Rake とは「Ruby で書かれた Make っぽいもの」でだいたい合っている。
単にタスクに必要な処理をまとめておいて呼ぶ、くらいの使い方でも便利ではあるけれど、Make をリスペクトして用意されたファイルタスクなどを絡めるともっとおもしろいことができる、という話。
ファイルタスク
リファレンス・マニュアルなどに詳しい説明があるが、簡単に表現すると「あるファイルを作るためのタスク」である。
典型例でいうと実行バイナリの生成など。必要なヘッダにリンクしつつ適切なパラメータとソースファイルをコンパイラに渡す、といったことをファイルタスクが責任をもって定義する。
タスクの事前条件
タスクには、それが必要とする事前条件を定義することができる。
たとえばコンパイルを実行するタスクならば、必要なファイルや準備を定義したタスクを事前条件に指定しておくことで、必要であれば事前にそれらを実行する。
これがけっこう賢くて、たとえば事前条件にファイルを指定しておいて、かつそのファイルに対してファイルタスクを定義しておくと、ファイルが存在しないときにそのファイルタスクが実行される。
開発ツールを Homebrew でインストールする
OS X におけるパッケージ管理ソフトウェアとして Homebrew を使っている。
Git や Z shell (zsh) は日常的に使う開発ツールで、新しいマシンをセットアップする際には、まず入れる。
Git と Z shell, この2つくらいならシェルスクリプトに brew install zsh git
とか書いておくくらいで事済むが、たとえば wget も入れたいとか、hub も入れたいとか、日常的に使うツールはだんだん多くなってきたりする。
Homebrew と Rake
最近の Homebrew は $HOMEBREW_ROOT/opt/$formula
から $HOMEBREW_ROOT/Cellar/$formula/$latest_version
への symlink を張るようになっている。
つまり $HOMEBREW_ROOT/opt/$formula
に対するファイルタスクを定義しておくと自動化がしやすそう。
HOMEBREW_ROOT = '/usr/local'
namespace :homebrew do
file File.join(HOMEBREW_ROOT, 'opt', 'zsh') do
sh 'brew', 'install', 'zsh'
end
namespace :zsh do
desc 'Install zsh with Homebrew'
task :install => [File.join(HOMEBREW_ROOT, 'opt', 'zsh')
end
end
これで rake homebrew:zsh:install
を実行すると、Z shell がインストールされていない場合のみ brew install zsh
を実行しようとする。
発展
- Ruby のインストール
-
~/.rbenv/versions/$version
が存在しなければ
-
などもできる。
https://github.com/aereal/dotfiles/blob/master/Rakefile にもっといろいろ書いてある。
おわり
標準ライブラリはいろいろおもしろいライブラリがある。