Rake
Rake(Ruby)概要
Rakeとは
Rakeは、Rubyで実装されたビルドプログラムであり、Makeコマンドに相当する機能を提供します。
Makefileに当たる「Rakefile」をRubyの文法で記述して、それに基づいたタスクを実行します。
「内部DSL(Domain Specific Language)」の仕組みによって、ビルドの記述にRubyの文法を使うことができるため、複雑なビルドを柔軟に記述することが可能です。
Rakeインストール
rubygemsからインストールします。
gemsについてはRubygemsについてを参照ください。
$ gem install rake
rakeコマンド
rakeコマンドはカレントディレクトリにあるRakefileを読み込んでタスクを実行します。
$ rake <タスク名> #指定のタスクを実行する。
$ rake -T #タスク一覧を表示する。
$ rake -h #ヘルプを表示する。
Rakefile
RakeはRakefileを解析して、その内容に従って処理を行います。
書式
task <タスク名> , [<パラメータ名>, <パラメータ名> ... ] => [<前提タスク名>,<前提タスク名> ... ] do
# アクション
end
タスク
タスクは以下の書式で定義します。
task タスク名
タスクに依存関係を定義する場合には、「=>」の先に依存するタスクを記述します。
依存先が複数ある場合は、配列として渡します。
task タスク名 => [タスク名1, タスク名2]
タスク名は任意に指定できますが、"default"タスクは予約されている。
rakeコマンドは実行タスクが指定されない場合、"default"タスクを実行します。
$ cat rakefile
task :default => "hello"
desc "タスクの説明です。"
task :hello do
puts 'hello'
end
$ rake
hello
タスクの説明
「desc」メソッドでタスクの説明を設定できます。
タスクの説明を定義しておくと、「-T」オプションのタスク一覧で表示されます。
$ cat rakefile
desc "タスクの説明です。"
task :hello do
puts 'hello'
end
$ rake -T
rake hello # タスクの説明です。
ファイル関連タスク
ファイルタスク
Rakeでは、ファイル生成に特化した「ファイルタスク」が用意されています。
「file」メソッドでタスクを定義すると、タスク名が示すファイルが存在しない場合のみタスク(File Task)を実行します。
CC = "gcc"
task :default => "hello"
file "hello" => "hello.o" do
sh "#{CC} -o hello hello.o"
end
file "hello.o" => "hello.c" do
sh "#{CC} -c hello.c"
end
ディレクトリタスク
ディレクトリが存在しない場合のみ、当該ディレクトリを作成するタスクです。
ただし、アクションは指定できません。
# tmpディレクトリが存在しない場合に、当該ディレクトリを作成します。
directory "tmp"
その他
ルール
「rule」メソッドは、全体で共通するルールを見いだしてタスクを実行します。
rule '.o' => '.c' do |t|
sh "#{CC} -c #{t.source}"
end
クリーン
rake/cleanをrequireすることで、CLEANとCLOBBERというタスクが自動的に追加されます。
cleanは、CLEANファイルリストに定義されているファイルを削除します。
clobberは、CLEANとCLOBBERに定義されているファイルを削除します。
require 'rake/clean'
CC = "gcc"
SRCS = FileList["**/*.c"]
OBJS = SRCS.ext('o')
CLEAN.include(OBJS)
CLOBBER.include("hello")
基本的にcleanは一時ファイルの削除に使用し、clobberは生成された全てのファイルの削除に使用します。
$ rake -T
rake clean # Remove any temporary products.
rake clobber # Remove any generated file.
$ rake clean
...
$ rake clobber
...