いまさらRakeについての覚書
2016 年 5 月 14 日 by 山平タイトルそのままですが、最近Rakeを使ってみて、勘所を残しておきたいと思います。
Rake とは
Rake は Make によく似た機能を持つ Ruby で書かれたシンプルなビルドツールです。
Rake は以下のような特徴を持っています。
- Rakefile (Rake における Makefile) は標準的な Ruby の文法で書くことができます。 XML ファイルを編集する必要はありませんし、Makefile の風変わりな文法 (タブだっけ?スペースだっけ?) に頭を悩ませる必要もありません。
- ユーザは必須条件をタスクに指定できます。
- Rake は暗黙のタスクを合成することをサポートしています。
- 配列のように振る舞うフレキシブルな FileList メソッドがあります。 FileList はファイル名やパス名を扱うのに便利です。
- Rakefile をより簡単に作成するためにこのライブラリにはいくつかのタスクが同梱されています。
Rakeの使い方に関しては、検索するとたくさん出てきますので、そちらを参照していただければよいかと思います。
Rakeの最大の特徴はRubyのDSLとして実装されている点です。
Rakefileもタスク記述用の機能が追加されたrubyプログラムなので、タスクの定義が即動作するコードだということです。
Javaまわりだと、定義はxmlなことが多いので、動かすにはもうひと手間かかります。
つまりこれって、タスクのインターフェイスとして使えるということです。
GitHubが採用しているJekyllをブログ寄りにお膳立てしてくれているoctopressというツールがまさにこれでして、rekeのタスクの中でjekyllコマンドをたたいています。
要はこんな感じです。
- コマンドラインアプリケーションのIFをタスクとして公開する
タスクのリストや説明の表示もrakeオプションで提供されている - コマンドラインアプリケーションの依存関係は勝手に解決してくれる
日次⇒週次⇒月次など、先に実行する必要がある処理は依存関係として登録できる - rubyのプログラムなので、IF提供しない機能はタスク定義しなければよい
具体的な機能は通常の関数定義で定義すればよいだけ
と、使い方によってはとても便利なrakeですが、バージョンの関係か、2つ以上の引数を渡す部分で、ネットの情報通りでは動かないことがありました。
上記のサイトでは「環境変数」と「タスク引数」の渡し方がありますが、手元の10.0.4だと、タスク引数は1つの場合のみ正常に動作しました。
~$ rake –version
rake, version 10.0.4
依存関係をさかのぼる際、引数を渡せないので、ちょっと面倒ですが、環境変数として渡す方法を採用したほうが良い場合があるかもしれません。
(環境変数は依存先でも参照可能なため)
以上です。