##Rake
RakeはRubyで記述されたbuildツールでMakeやAnt,Mavenと同種のツールです。
設定ファイルに記述されている作業を上から順に実行してくれる
Rakeの特徴
- Rubyで記述ができる
- 言語内DSLを採用
- Rakefileというファイルに一連の処理を定義する
(この処理のまとまりを「タスク」と呼ぶ)
※ DSL...
Domain-Specific Language
特定の領域で特化して設計された言語
(例)Rake, RSpec, SQLとか
Rakefile
build定義を記述するファイル
- rakeだったらRakefile
- Antだったらbuild.xml
- MakeだったらMakefile
Rakeの実行方法
Rakeはrakeコマンドに引数として、実行したいタスクを渡すことで
タスクを実行する。
rake 実行タスク名
例
以下のようにRakefileが記述されていた場合
desc 'Task description'
task :task_name do
puts 'Rake task'
end
実行コマンド例
rake task_name # => Rake task
rakeコマンドに-Tオプションを渡して実行すると、
定義されているタスク一覧が表示できる
「desc」メソッドで説明文を記載しておけば、
タスク一覧には説明文も表示することができる。
rake -T
# 以下のように表示される
# rake task_name # Task description
また、-tオプション(小文字のt)を指定するとトレース情報を得ることができる。
rake task_name -t
# 以下のように出力される
# ** Invoke task_name (first_time)
# ** Execute task_name
# =>Rake task
defaultについて
Rakeで何もタスクを指定していないときに実行されるタスク
以下のように定義する
task :default => :タスク名
task :default => :task_name
desc 'Task description'
task :task_name do
puts 'Rake task'
end
rake
taskメソッドとは別の定義の方法について
ファイルタスク
fileメソッドの引数にはファイル名の文字列を指定する
文字列が示すファイルがある場合はファイルタスクの実行がスキップされる。
使いどころ
- ファイルの有無判定
実行例 参考p.412 リスト 12.13
クリーンタスク
buildの過程でできた一時ファイルを一括で削除してくれる
利用するにはRakefileでrequire 'raka/clean'する必要がある
require 'rake/clean'
...
requireするとCLEANとCLOBBERいう定数が定義される。
この定数に削除したいファイル名を指定すると削除される。
require 'rake/clean'
...
CLEAN.include(./hoge/*) # includeメソッドで指定ができる
CLEANはbuildの過程でできた一時ファイル
CLOBER一時ファイルだけでなくbuildでできたファイルも消せる。
ディレクトリタスク
ディレクトリを自動で作ってくれるタスク
ディレクトリが存在しなければ自動で作成し、
存在していれば処理をスキップする。
つかいどころ
- buildで作ったファイルを保存するディレクトリを作成するとき
使い方
directory メソッドにディレクトリ名を渡してあげる
directory "hoge" # hogeディレクトリを作成してくれる
#coding: utf-8
HOGE = "hoge_dir"
directory HOGE # この段階ではディレクトリは作られなかった
desc "directoryタスクの確認"
task :dir => HOGE do
sh "ls hoge_dir"
end
Hikaru-no-MacBook-Pro:ruby_practice fukuzawh$ rake dir -t
** Invoke dir (first_time)
** Invoke hoge_dir (first_time)
** Execute hoge_dir
mkdir -p hoge_dir
** Execute dir
ls hoge_dir
# 2回目
Hikaru-no-MacBook-Pro:ruby_practice fukuzawh$ rake dir -t
** Invoke dir (first_time)
** Invoke hoge_dir (first_time, not_needed)
** Execute dir
ls hoge_dir
ルール
特定のパターンの名前のファイルに対して動的に処理を定義する
ruleメソッドを使う
つかいどころ
- 特定のファイル名や拡張子に対して動的に処理を加えたいとき
実行例 p.417 12-3-7
本の例では、タスクを実行するときに.cファイルをコンパイルすることをしている。
グループ化
動作が似ているタスクをグループ化する
namespaceメソッドを使う
つかいどころ
- 動作が似ているタスクをグループ化したいとき
#coding: utf-8
namespace :check do
desc 'ログファイルのチェック'
task :log do
end
desc 'ymlファイルのチェック'
task :yml do
end
end
実行は以下のようにするとできる
rake namespace:タスク名
rake check:log
Rakeコマンドのオプション
man rake
または
rake --help
で調べる