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
...

関連ページ