Rake のメモ
基本
タスクを定義する
desc "Description"
task :task_name do |t|
...
end
desc で説明を書かないと「rake -T」の一覧表示のときにタスクが表示されない。
便利なメソッドを使う
sh "ls"
cd "/path/to/dir"
他のタスクを実行する
task :task_name do |t|
Rake::Task[:other_task].execute
end
Rake::FileList
Rake::FileList を使う
ファイル名のパターンを保持していて resolve メソッドでファイル名一覧の配列を作る。 Array のメソッドの多くが定義されていて、 その動作は resolve を実行してファイル名の配列を作り、 その配列に対する Array のメソッドとなっている。
file_list = Rake::FileList.new("*.c", "*.h")
file_list = Rake::FileList["*.c", "*.h"]
として使う。
パターンを追加する
file_list = Rake::FileList.new
file_list.include("*.cpp")
デフォルトで無視されるファイル
DEFAULT_IGNORE_PATTERNS や DEFAULT_IGNORE_PROCS デフォルトで無視されるパターンが指定されている。 たとえば
file_list = Rake::FileList.new("*~")
としてもどのファイルにもマッチしない。 これらに指定されたパターンにマッチさせるためには clear_exclude を実行する。
file_list.clear_exclude
rake/clean.rb
rake/clean.rb には clean と globber タスクが定義されている。 Rake::FileList オブジェクトである定数 CLEAN と GLOBBER が定義されていて、 clean タスクは CLEAN のファイルを globber タスクは CLEAN と GLOBBER の ファイルを削除する。 デフォルト値はそれぞれ
CLEAN = Rake::FileList["**/*~", "**/*.bak", "**/core"]
CLOBBER = Rake::FileList.new
となっている。
require 'rake/clean'
とすると使用することができる。
RDoc::Task のようなクラスを作る
RDoc::Task を参考にしてタスクを定義するクラスを作る。 ruby の lib/rdoc/task.rb を見る。 まず、Rake::TaskLib を継承する。
class RDoc::Task < Rake::TaskLib
initialize では、インスタンス変数を設定して ブロックが与えられていれば、ブロックを評価して define メソッドの中で Rake タスクを定義する。
def initialize name = :rdoc # :yield: self
defaults
check_names name
@name = name
yield self if block_given?
define
end