チュートリアル
このページでは、実際のPackngaのRakefileを参考に、Packngaの使用方法を紹介します。
インストール
PackngaはRubygemsからインストールできます。
% sudo gem install packnga
タスク生成の準備
Packngaを使用する前に、Gem::Specification.newメソッドにて spec
を作成します。この spec
を用いてPackngaはタスクを生成します。次にその例を示します。
Gem::Specification.newメソッドを用いたspecの作成
ここではgemspecファイルにてGem::Specification.newメソッドを使ってspecを作成する方法を紹介します。 次の例を見てください。
version = Packnga::VERSION.dup
readme_path = File.join(base_dir, "README.textile")
entries = File.read(readme_path).split(/^h2\.\s(.*)$/)
entry = lambda do |entry_title|
entries[entries.index(entry_title) + 1]
end
= []
emails = []
entry.call("Authors").each_line do |line|
if /\*\s*(.+)\s<([^<>]*)>$/ =~ line
<< $1
emails << $2
end
end
clean_white_space = lambda do |entry|
entry.gsub(/(\A\n+|\n+\z)/, '') + "\n"
end
description = clean_white_space.call(entry.call("Description"))
summary, description = description.split(/\n\n+/, 2)
Gem::Specification.new do |s|
s.name = "packnga"
s.version = version
s. =
s.email = emails
s.summary = summary
s.description = description
s.extra_rdoc_files = ["README.textile"]
s.files = ["README.textile", "Rakefile", "Gemfile"]
Dir.chdir(base_dir) do
s.files += Dir.glob("lib/**/*.rb")
s.files += Dir.glob("doc/text/*.*")
end
s.homepage = "http://ranguba.org/"
s.licenses = ["LGPLv2"]
s.require_paths = ["lib"]
s.add_runtime_dependency("rake")
s.add_runtime_dependency("yard")
s.add_runtime_dependency("gettext")
s.add_development_dependency("test-unit")
s.add_development_dependency("test-unit-notify")
s.add_development_dependency("bundler")
s.add_development_dependency("RedCloth")
end
次に、Rakefileでgemspecファイルで作成したspecを取得します。 次のようなコードをRakefileに書くとspecを取得できます。
helper = Bundler::GemHelper.new(base_dir)
helper.install
spec = helper.gemspec
Jeweler::Task.newによって生成されるオブジェクト
RakefileでJeweler::Tasks.newメソッドを使ってspecを作成する場合は、次の例を見てください。 この例のコードはPackngaの以前のRakefileに書かれていたものです。
spec = nil
Jeweler::Tasks.new do |_spec|
spec = _spec
spec.name = "packnga"
spec.version = version
spec.homepage = "http://ranguba.org/"
spec. = ["Haruka Yoshihara", "Kouhei Sutou"]
spec.email = ["yoshihara@clear-code.com", "kou@clear-code.com"]
entries = File.read("README.textile").split(/^h2\.\s(.*)$/)
description = cleanup_white_space(entries[entries.index("Description") + 1])
spec.summary, spec.description, = description.split(/\n\n+/, 3)
spec.license = "LGPLv2"
spec.files = FileList["lib/**/*.rb",
"Rakefile",
"README.textile",
"Gemfile",
"doc/text/**"]
spec.test_files = FileList["test/**/*.rb"]
end
タスクの生成
Packngaでは、それぞれのタスクを担当するクラスがあります。Packngaのクラスと、そのクラスで定義できるタスクは次のようになります。
- Packnga::DocumentTask
- リファレンスなどのドキュメントを生成する関係のタスクを設定・定義します。YARDによるドキュメント生成や、poファイルの生成、そのpoファイルによるドキュメントの翻訳などを行うタスクを定義します。
- Packnga::ReleaseTask
- リファレンスやパッケージをアップロードしたり、そこまでの準備を行うタスクを定義します。gitへのリリースのタグを打ったり、gemをユーザインストールしてテストを実行するためのタスクを定義します。
それぞれ、タスクを生成するためには次のようにします。
Packnga::DocumentTask.new(spec)
Packnga::ReleaseTask.new(spec)
ドキュメントのパスを設定する
DocumentTaskやReleaseTaskのオブジェクトを生成する際に、ブロックにて変更できるパラメータがあります。 ここでは例として、ドキュメントのベースとなるようなディレクトリの設定を行います。このディレクトリの下に、ドキュメント関係のファイルが生成されるようになります。この値を独自に設定したい場合には次のようにRakefileに記述します。
また、このベースディレクトリの値は両方のクラスにて同じものを指定してください。
Packnga::DocumentTask.new(spec) do |task|
task.base_dir = "doc/"
end
Packnga::ReleaseTask.new(spec) do |task|
task.base_dir = "doc/"
end
他にも設定できるパラメータがあります。詳しくはリファレンスマニュアルをご覧ください。