hoe を使ってみました
最近リリース作業が面倒になってきたので、より気軽にリリースができるよう hoe を導入しようと思います。そうすればきっと頻繁にリリースする気にもなるはず。newgem なんかもありますが、まずはシンプルに行ってみます。
- hoe をインストール
% sudo gem install hoe --include-dependencies
- rubyforge の素振り
パッケージを新規に登録したり、gem ファイルをアップロードするのには、rubyforge gem を利用しているのでまずはそっちを確認します。
setup コマンドを実行するとホームディレクトリ以下に .rubyforge/user-config.yml ができているので、rubyforge.org のユーザーアカウントとパスワードを記入しておきます。
% rubyforge setup
ユーザー情報を与えたら、設定情報を自動取得します。以下のように config コマンドで、rubyforge.org に存在するプロジェクトのリストを漁って、必要な ID を取り出してくれます。取り出されたものは、~/.rubyforge/auto-config.yml を見ればわかります。とくに意識して使うことはないでしょう。rubyforge.org の URL にあらわれる諸々の数字たちです。
% rubyforge config Getting username Fetching 2 projects Updating ap4r
で、ログインします。これでクッキーをキャッシュしてのちの操作に備えます。
% rubyforge login /usr/local/lib/ruby/gems/1.8/gems/rubyforge-0.4.2/lib/http-access2.rb:1087: warning: using default DH parameters. /usr/local/lib/ruby/1.8/openssl/buffering.rb:178: warning: SSL session is not started yet. /usr/local/lib/ruby/1.8/openssl/buffering.rb:35: warning: SSL session is not started yet.at depth 0 - 18: self signed certificate /usr/local/lib/ruby/gems/1.8/gems/rubyforge-0.4.2/lib/http-access2/cookie.rb:185: warning: 2 digits year is used /usr/local/lib/ruby/gems/1.8/gems/rubyforge-0.4.2/lib/rubyforge.rb:149: warning: potentially failed login using username:password
プロキシ越しの場合は、環境変数「HTTP_PROXY」にセットしておけば通ります。小文字だと信じきっていてしばらく悩みました...。 (^^;
上記のようにいろいろ警告がでましたが、とりえず create_package はできました。ただ、ファイルのアップロードをしようとすると、Internal Server Error になってしまうのでここらあたりの問題はもう少し考えてみます。たぶんプロキシ越しじゃなければ大丈夫な気もします。
追記: プロキシ越しじゃない場合は、すんなりファイルのアップロードもできました。
create_package や add_release をはじめ、以下のコマンドが実行できます。
% rubyforge --help ... create_package(group_id, package_name) creates the named package under the specified group. example : rubyforge create_package 1024 traits rubyforge login && rubyforge create_package codeforpeople.com traits add_release(group_id, package_id, release_name, userfile) release a file as release_name under the specified group_id and package_id. example : rubyforge add_release codeforpeople.com traits 0.8.0 traits-0.8.0.gem rubyforge add_release codeforpeople.com traits 0.8.0 traits-0.8.0.tgz rubyforge add_release 1024 1242 0.8.0 traits-0.8.0.gem rubyforge login && rubyforge add_release 1024 1242 0.8.0 traits-0.8.0.gem add_file(group_id, package_id, release_id, userfile) ... delete_package(group_id, package_name) ...
- gem プロジェクトを作成
sow コマンドを実行します。
以下で FIX と書かれている部分を適当に修正します。ちょっと親切ですね。
% sow ap4r creating project ap4r ... done, now go fix all occurances of 'FIX' ap4r/Rakefile:9: # p.author = 'FIX' ap4r/Rakefile:10: # p.email = 'FIX' ap4r/Rakefile:11: # p.summary = 'FIX' ap4r/README.txt:2: by FIX (your name) ap4r/README.txt:3: FIX (url) ap4r/README.txt:7:FIX (describe your package) ap4r/README.txt:11:* FIX (list of features or problems) ap4r/README.txt:15: FIX (code sample of usage) ap4r/README.txt:19:* FIX (list of requirements) ap4r/README.txt:23:* FIX (sudo gem install, anything else) ap4r/README.txt:29:Copyright (c) 2007 FIX
生成されたファイル/ディレクトリは以下です。
% ls -l total 40 -rw-r--r-- 1 kiwamu kiwamu 60 6 18 18:18 History.txt -rw-r--r-- 1 kiwamu kiwamu 83 6 18 18:18 Manifest.txt -rw-r--r-- 1 kiwamu kiwamu 1423 6 18 18:34 README.txt -rw-r--r-- 1 kiwamu kiwamu 508 6 18 18:21 Rakefile drwxr-xr-x 3 kiwamu kiwamu 102 6 18 18:18 bin drwxr-xr-x 3 kiwamu kiwamu 102 6 18 18:18 lib drwxr-xr-x 3 kiwamu kiwamu 102 6 18 18:18 test
タスクの一覧をみてみると、なにやら素敵そうな名前がいっぱい見つかります♪
% rake -T rake announce # Generate email announcement file and post to rubyforge. rake audit # Run ZenTest against the package rake check_manifest # Verify the manifest rake clean # Clean up all the extras rake clobber_docs # Remove rdoc products rake clobber_package # Remove package products rake config_hoe # Create a fresh ~/.hoerc file rake debug_gem # Show information about the gem. rake default # Run the default tasks rake docs # Build the docs HTML Files rake email # Generate email announcement file. rake gem # Build the gem file ap4r-1.0.0.gem rake install # Install the package. Uses PREFIX and RUBYLIB rake install_gem # Install the package as a gem rake multi # Run the test suite using multiruby rake package # Build all the packages rake post_blog # Post announcement to blog. rake post_news # Post announcement to rubyforge. rake publish_docs # Publish RDoc to RubyForge rake redocs # Force a rebuild of the RDOC files rake release # Package and upload the release to rubyforge. rake repackage # Force a rebuild of the package files rake ridocs # Generate ri locally for testing rake test # Run the test suite. Use FILTER to add to the command line. rake test_deps # Show which test files fail when run alone. rake uninstall # Uninstall the package.
ちなみに、開発環境にもともとある ap4r ディレクリを sow コマンドで上書きしようと思ったのですが、実行できなかったので別な場所でコマンドを実行してからぺたっとそれらをコピーしました。
AP4R では 「README」と「CHANGELOG」にしていたので、Rakefile 以外で同じファイル名のものはありませんでした。
最初はそれらをそのまま使おうとしてましたが、いろいろ rake タスクを試しているうちに、RDoc の生成時に困ることがわかったので、素直に sow で生成される「README.txt」と「History.txt」を利用することにしました。形式はほとんど同じだったのにほぼコピペで対応完了。
何が問題だったかというと、hoe の用意している RDoc 生成タスクでは、「README.txt」と「History.txt」を RDoc に加えるようべたにソースに書いてあるので、それ以外のファイル名にしてしまうと RDoc から消えてしまうのです。また、ページのタイトルもほぼ決めうちです。外から設定する口は用意されていないようです。
rake を素で使った場合には、rdoc_options で --main だとか --title だとか --line-numbers なんかが設定できますが、hoe ではここらへんが隠蔽されちゃっているので、ちょっと注意が必要かもしれません。
次に Manifest.txt をちゃんと書きます。以下のコマンドでローカルのファイルと記載内容の差分がでますので、うまく利用して gem パッケージに含めたいファイルをすべて記載するようにします。ちなみに /\.svn|tmp$|CVS/ に一致するファイルは差分の表示にでてきません。
ここのメンテが少しめんどくさそう...。
% rake check_manifest
追記: というわけで、Manifest.txt を作成するタスクは書いてしまいました。基本的には、.svn などを除いたものすべてなので素直にカレント以下のファイルを拾って書き出すだけです。これでメンテの手間も解消されると思います。
% rake create_manifest
あとは、Rakefile を自分のプロジェクト用に書き直すだけです。hoe の RDoc で Attributes を参考にするといいでしょう。
- seattlerb's hoe-1.2.1 Documentation
ちなみに、AP4R ではこんな感じにしてみました。一部省略していますが、ほぼそのままです。
description なんかは「README.txt」の内容を引っ張ってくることもできます。今回は単に手抜き。
require 'rubygems' require 'hoe' require File.join(File.dirname(__FILE__), 'lib/ap4r', 'version') ... Hoe.new('ap4r', Ap4r::VERSION::STRING) do |p| p.author = ['...'] p.changes = p.paragraphs_of('History.txt', 1..2).join("\n\n") #p.clean_globs = p.description = <<-EOF Asynchronous Processing for Ruby. EOF p.email = ['...'] p.extra_deps << ['reliable-msg', '=1.1.0'] p.extra_deps << ['activesupport'] p.extra_deps << ['mongrel'] p.extra_deps << ['rake'] p.extra_deps << ['hoe'] p.name = 'ap4r' p.need_tar = false p.need_zip = false #p.rdoc_pattern = #p.remote_rdoc_dir = #p.rsync = p.rubyforge_name = 'ap4r' #p.spec_extra = p.summary = 'Asynchronous Processing for Ruby.' p.test_globs = 'spec/**/*_spec.rb' p.url = 'http://ap4r.rubyforge.org/wiki/wiki.pl?HomePage' p.version = Ap4r::VERSION::STRING end
これで rake gem すれば OK です。
サンプルアプリのリリース用のカスタムタスクなんかも Rakefile に加えていきましたが、以前に比べだいぶすっきりした感じになりました♪
気楽なリリースに一歩近づいたかなw
- 参考
- Tutorial: Publishing RubyGems with Hoe | Ruby on Rails for Newbies
http://nubyonrails.com/articles/tutorial-publishing-rubygems-with-hoe
- seattlerb's hoe-1.2.1 Documentation