Rakeの基本的な使い方まとめ
Rakeの基本的な使い方のまとめです。
- インストールから、Rakefileの書き方、組み込みライブラリの使い方まで。
- 忘れたときに見返す用に。
Rakeって何?
rakeツールのインストールと使い方
rakeコマンド
よく使いそうなものをいくつか。
$ rake <タスク名> # 指定のタスクを実行。 $ rake <パラメータキー>=<値> <タスク名> # パラメータ指定ありで、指定のタスクを実行。 $ rake -h # 使い方を表示。 $ rake -T # 定義されているタスク一覧を表示
Rakefileの書き方
Task
Rakeで行う処理は「タスク」としてRakefileで定義されます。タスクは以下の要素から成ります。
- 名前
- タスクを識別するための名前。rakeコマンドで実行するタスクを指定する場合などに使用します。
- アクション
- タスクで行われる一連の処理です。省略可です。
- 事前タスク
- 前提として実行するタスクの一覧です。指定された事前タスクは、タスクの実行前に実行されていなければ実行されます。
- パラメータ
- タスクに渡されるパラメータ名です。rakeコマンドの引数で
タスクは「task」メソッドで定義できます。
## 書き方 # task <タスク名> , [<パラメータ名>, <パラメータ名> ... ] => [<前提タスク名>,<前提タスク名> ... ] do # # アクション # end # "hello" を表示するだけのタスク task :hello do puts 'hello' end # "hello"の後に"world"を出力するタスク task :hellow_world=>[:hello] do puts 'world' end # アクションなしのタスク task :all=>[:hellow_world, :echo] #パラメータを受け付けるタスク task :echo, [:message] => [:hello] do |t, args| # ブロックへのパラメータとしてタスクオブジェクトとパラメータが渡される。 puts args.message end
タスクに説明を付ける
「desc」で、次に作成するタスクの説明を設定できます。
desc "タスクの説明です。" task :hoge
説明を付与しておくと、「-T」オプションの一覧で表示されます。
$ rake -T (in xx/Rakefile) rake hoge # タスクの説明です。
指定のファイル/ディレクトリがあれば実行しないタスクを作る
「file」メソッドでタスクを定義すると、タスク名が示すファイルが存在しない場合のみ実行するタスク(File Task)を作成できます。「.classを作ったら消されるまで再コンパイルしない」といった場合に使えます。
# foo.txtがない場合のみ実行されるタスク file "foo.txt" do puts "create foo.txt" open("./foo.txt", "w"){|f| f << "test." } end
同様に、ディレクトリがない場合のみ作成するタスクも作成できます。こちらはアクションは指定できません。
# var/hoge ディレクトリがない場合のみ、ディレクトリを作るタスク。 # アクションは指定できない。 directory "var/hoge"
名前に対応するタスクが存在しない場合のタスクを指定する
「rule」メソッドで、名前に対応するタスクが存在しない場合に実行されるタスクを定義できます。
# *.txtが存在しない場合、作成するタスク rule /.*\.txt/ do |t| puts "create #{t.name}" open("#{t.name}", "w"){|f| f << "test." } end
rubyの「method_missing」的な機能ですかね。ただ、ruleで定義したタスクはFile Task扱い(=タスク名が示すファイルが存在しない場合のみ実行される)のでご注意。
名前空間
「namespace」で、任意の名前空間の中にタスクを定義できます。
# ネームスペースの中にタスクを定義する。 namespace :test do task :hello do puts 'hello' end task :hello_world=>[:hello] do puts 'world' end end
タスクをグループ化したいときに。実行時には「<ネームスペース>:<タスク名>」の形式で指定します。
$ rake test:hello_world (in xx/Rakefile) hello world
組み込みタスクを使う
よく使うタスクがいくつか組み込みで用意されていて、さくっと使えるようになっています。
成果物を削除する
clean/clobberタスクは
require 'rake/clean'
で定義されるタスクです。
- clean
- Remove any temporary products. (ビルドの一時作成物を削除する?)
- デフォルトでは["**/*~", "**/*.bak", "**/core"]を削除するので、他に消したいものがあれば、定数「CLEAN」に追加します。
require 'rake/clean' CLEAN << "*.txt"
- clobber
- Remove any generated file.(ビルドの作成物を削除する?)
- cleanで消されるファイル+定数「CLOBBER」のファイルを削除します。
- cleanとの違いはいまいちわからん。
rdocを作る
RDocTaskでrdocを生成するタスクをさくっと定義できます。
# 「lib/**/*.rb」のrdocを生成するタスク require 'rake/rdoctask' Rake::RDocTask.new do |rd| # RDocTask 内で rdoc,rdoc_clobber,rerdocが定義される。 rd.rdoc_dir = 'rdocs' rd.rdoc_files = FileList["lib/**/*.rb"] rd.options << '-charset=UTF-8 ' end
これで、
$ rake -T (in xx/Rakefile) rake clobber_rdoc # Remove rdoc products rake rdoc # Build the rdoc HTML Files rake rerdoc # Force a rebuild of the RDOC files
が定義され、実行できるようになります。
$ rake rdoc (in xx/Rakefile) rm -r rdocs test.rb: c.... Generating HTML... Files: 1 Classes: 1 Modules: 0 Methods: 4 Elapsed: 0.717s
Gemを作る、UnitTestを実行する .. etc ..
その他、未確認ですが、gemを作ったり、UnitTestを実行したりするタスクもrdocのようなユーティリティでさくっと定義できるみたいです。詳細はrdocで。
補足: 参考にしたサイトなど
- rake.rubyforge.org
- rake のAPIなど。Rakefileの書式等についても解説があります。
- docs.rubyrake.org
- チュートリアルやサンプル。