Hatena::ブログ(Diary)

ラシウラ このページをアンテナに追加 RSSフィード Twitter

2007-06-05

newgem-0.10.4を使ったrubyforgeプロジェクトの管理

を作るにあたり、プロジェクトテンプレートとして、newgemを使いました。

これは

newgem -n "PatternMatching module" -t rspec -v 0.1.0 patternmatching

などのようにして、Rakefileなどがそろった雛形が作られます。

そこに、lib以下に作っておいたライブラリコピーし、いくつかのファイルを修正してやれば、あっというまにRubyforgeにあったプロジェクトファイル構造を作ることができます。アップロードしたサイトも(素のHTMLに比べれば)それなりに見栄えのするように作ってくれます。

修正していくファイル

rspecのRakefileはデフォルトではrspecタスクlibパスが通っていないので、追加しましょう。

desc "Run the specs under spec/models"
Spec::Rake::SpecTask.new do |t|
  t.spec_opts = ['--options', "spec/spec.opts"]
  t.spec_files = FileList['spec/*_spec.rb']
  t.libs << "lib" # <= これ必要
end

Manifest.txtは以下のmakemanifest.rbをscriptsにおいて、実行して自動生成させてます。

#!/usr/bin/ruby

base_dir = File.join(File.dirname(__FILE__), "..")
glob_pattern = File.join("**", "*")
exclude_patterns = [
  /^pkg/,/^doc/,
]

Dir.chdir(base_dir)
files = Dir.glob(glob_pattern).delete_if do |fname|
  File.directory?(fname) or
  exclude_patterns.find do |pattern|
    pattern =~ fname
  end
end
manifest = File.new("Manifest.txt", "w")
manifest.puts files.sort.join("\n")
manifest.close

puts "Manifest.txt updated"

タスク

rake --tasksで一覧が出ます。以下よく使うものです。

ファイル生成系
アップロード

生成時のRakefileでは、rake releaseではpublish_docsされません。

もし、同時にアップロードしたいなら、以下のように書き換えるといいでしょう。

task :website => [:website_generate, :website_upload, :publish_docs]

修正後、リリース時に行うこと

  • 必ず、rake spec でエラーがでないようにする
  • example/, README.txt, index.txt ほか、 現状のAPIに合わせる
  • Histrory.txt に変更履歴を入れる
  • 最後に lib/*/version.rb を更新する
  • 上記ファイルを確認してから、 rake VERSION=x.y.z deploy
  • truncをtagsにsvn cpする

注意点

いくつかのタスクでは、コマンドrubyforge setupやrubyforge configを適切に行っている必要があります。newgemが生成する設定は、このようにRubyForgeの構造に依存した部分があるので、その他のプロジェクト管理システムのためのプロジェクトにはあまり向いてません。

また、rdocはトップレベルmoduleドキュメントは生成しません。トップレベルmoduleで機能が必要な場合は、内側に内部moduleをつくり、そこにメソッドやドキュメントを置いて、下でincludeしてあげるといいでしょう。

docsやridocsとかで生成したファイルリポジトリパッケージに含める必要はありません。導入側のgem installで適切に生成してくれます。

あと、rubygemsでは、どうもメソッドyがObjectに追加されるので、"y"という変数やメソッドは、コアはもちろん例やspecで使わないほうがいいです。念のため。ほかにもrspecとかでぶつかるmatch等、避けたいメソッドは結構あったりします。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。