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

Tags of current page

,