rubyforgeホスティングする gem パッケージを作成する際に rake で出来ること(Rakefile で記述できること)のまとめ。

  • RDocTask による RDoc ドキュメントの生成
  • GemPackageTask による gem パッケージの生成
  • PackageTask による tar.gz, tar.bz2 など各種パッケージ形式の生成
  • RubyForgePublisher による html ドキュメントのアップロード(使ってないので解説しません)

RDocTask による RDoc ドキュメントの生成は以下のように行う。

Rake::RDocTask.new do |rd|
  rd.main = "README"
  rd.rdoc_files.include "README", "lib/**/*.rb"
  rd.rdoc_dir = "doc/rdoc"
  rd.options = PKG_RDOC_OPTIONS
end

RDocTask オブジェクトに渡されたブロックの引数は RDocTask オブジェクト自身である。
rd に対する操作はそのまま rdoc コマンドに渡されるように設計されている。
RDocTask のインスタンスメソッドとして提供されていないrdocコマンドへの引数は options へ Array として渡せばよい。

GemPackageTask による gem パッケージの生成および PackageTask による tar.gz, tar.bz2 など各種パッケージ形式の生成は以下のように行う。

spec = Gem::Specification.new do |s|
  s.summary = "summary"
  s.description = "description"
  s.name = PKG_NAME
  s.version = PKG_VERSION
  s.files = PKG_FILES
  s.email = "your@mail.co.jp"
  s.homepage = "http://yourproject.rubyforge.org/"
  s.authors = ["your name"]
  s.test_files = ["test/runner.rb"]
  s.has_rdoc = true
  s.rdoc_options << PKG_RDOC_OPTIONS
  s.extra_rdoc_files = ["README"]
end
Rake::GemPackageTask.new(spec) do |pkg|
  pkg.need_tar_gz = true
  pkg.need_tar_bz2 = true
end

GemPackageTask.new に対して Gem::Specification オブジェクトを渡すことで非常に見通しがよく、重複のない Rakefile 記述にすることが可能となっている。
GemPackageTask は PackageTask のサブクラスであり、必要とするパッケージ形式が他にもあれば(例えば .zip など)、単にpkg.need_*** = true とするだけである。

このように rake を利用することで容易にパッケージを作成することが可能となる。

  • rake 自体の使い方についてはこのページが参考になる。(Makefile の代替としての rake の使い方に主眼を置いて解説されているようだ)
  • gem 自体の使い方についてはこのページが参考になる。