2007-06-05
newgem-0.10.4を使ったrubyforgeプロジェクトの管理
を作るにあたり、プロジェクトテンプレートとして、newgemを使いました。
これは
newgem -n "PatternMatching module" -t rspec -v 0.1.0 patternmatching
などのようにして、Rakefileなどがそろった雛形が作られます。
そこに、lib以下に作っておいたライブラリをコピーし、いくつかのファイルを修正してやれば、あっというまにRubyforgeにあったプロジェクトのファイル構造を作ることができます。アップロードしたサイトも(素のHTMLに比べれば)それなりに見栄えのするように作ってくれます。
修正していくファイル
- README.txt
- History.txt
- Manifest.txt
- License.txt
- Rakefile
- lib/patternmatching.rb
- lib/patternmatching/version.rb
- spec/patternmatching_spec.rb
- デフォルトでは失敗するようになっているので、修正します。
- website/index.txt
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で一覧が出ます。以下よく使うものです。
ファイル生成系
- rake clobber
- 生成したpkg/とdoc/にあるファイルを消します。
- rake package
- pkg/下ににパッケージを作成します。
- rake docs
- doc/下にrdoc生成します。
- rake website_generate
アップロード系
- rake VERSION=X.Y.Z deploy
- rake publish_docs
- docs以下を生成し、アップロードします。
- http://patternmatching.rubyforge.org/rdoc/ に反映されます。
生成時の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等、避けたいメソッドは結構あったりします。
- 518 http://pools.jp/2008/04/19/newgemによるrubyのgemパッケージ作成参考サイト/
- 68 http://tobysoft.net/wiki/index.php?Ruby/RubyGems/gemの作り方/newgem
- 23 http://eto.com/d/CreateRubyGemsPackage.html
- 17 http://d.hatena.ne.jp/
- 17 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=A98&q=trac+register+plug-in&btnG=検索&lr=lang_ja
- 13 http://www.google.co.jp/search?q=newgem&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 8 http://www.google.co.jp/search?q=newgem&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:ja:unofficial&client=firefox-a
- 6 http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&rls=org.mozilla:ja:official&hs=6al&q=newgem&btnG=検索&lr=
- 6 http://www.google.com/search?client=safari&rls=ja-jp&q=newgem&ie=UTF-8&oe=UTF-8
- 4 http://d.hatena.ne.jp/koseki2/20080110/HoeManifestUpdate