requires=
classes=Rake,Rake=RuleRecursionOverflowError,Rake=TaskArgumentError,Rake=Application,Rake=Cloneable,Rake=DefaultLoader,Rake=EarlyTime,Rake=FileCreationTask,Rake=FileList,FileList,Rake=FileTask,Rake=InvocationChain,Rake=InvocationChain=EmptyInvocationChain,Rake=MultiTask,Rake=NameSpace,Rake=Task,Rake=TaskArguments,Rake=TaskManager,RakeFileUtils
methods=Module/i.rake_extension.rake,String/i.ext.rake,String/i.pathmap.rake,String/i.pathmap_explode.rake,String/i.pathmap_partial.rake,String/i.pathmap_replace.rake,Kernel/i.task.rake,Kernel/i.file.rake,Kernel/i.file_create.rake,Kernel/i.directory.rake,Kernel/i.multitask.rake,Kernel/i.namespace.rake,Kernel/i.rule.rake,Kernel/i.desc.rake,Kernel/i.import.rake,FileUtils/i.sh.rake,FileUtils/i.ruby.rake,FileUtils/i.safe_ln.rake,FileUtils/i.split_all.rake
sublibraries=rake.classic_namespace,rake.clean,rake.gempackagetask,rake.packagetask,rake.tasklib,rake.rake_test_loader,rake.rdoctask,rake.runtest,rake.testtask,rake.loaders.makefile
is_sublibrary=false
category=Development

Rake というコマンドラインツールを扱うライブラリです。

=== Rake とは

Rake は Make によく似た機能を持つ Ruby で書かれたシンプルなビルドツールです。

Rake は以下のような特徴を持っています。

  * Rakefile (Rake における Makefile) は標準的な Ruby の文法で書くことができます。
    XML ファイルを編集する必要はありませんし、Makefile の風変わりな文法 (タブだっけ？スペースだっけ？) に頭を悩ませる必要もありません。
  * ユーザは必須条件をタスクに指定できます。
  * Rake は暗黙のタスクを合成することをサポートしています。
  * 配列のように振る舞うフレキシブルな FileList メソッドがあります。
    FileList はファイル名やパス名を扱うのに便利です。
  * Rakefile をより簡単に作成するためにこのライブラリにはいくつかのタスクが同梱されています。

@see [[man:make(1)]]

=== Rake コマンドの使い方

  $ rake --help
  rake [-f rakefile] {options} targets...
  Options are ...
      -C, --classic-namespace       トップレベルに Task, FileTask を定義します。
                                    過去との互換性のためのオプションです。
      -D, --describe [PATTERN]      パターンにマッチしたタスクの詳細を表示して終了します。
                                    パターンは省略可能です。
      -n, --dry-run                 アクションを実行せずにタスクを実行します。
      -e, --execute CODE            Ruby のコードを実行して終了します。
      -p, --execute-print CODE      Ruby のコードを実行して結果を表示して終了します。
      -E, --execute-continue CODE   Ruby のコードを実行してから、タスクを実行します。
      -I, --libdir LIBDIR           ロードパスに LIBDIR を含めます。
      -P, --prereqs                 タスクの依存関係を表示して終了します。
      -q, --quiet                   標準出力にログメッセージを表示しません。
      -f, --rakefile [FILE]         FILE を Rakefile として使用します。
      -R, --rakelibdir RAKELIBDIR   RAKELIBDIR にある *.rake ファイルを自動的にインポートします。
          --rakelib                 デフォルトは rakelib です。
      -r, --require MODULE          Rakefile を実行する前に MODULE を require します。
          --rules                   ルールの解決を追跡します。
      -N, --no-search, --nosearch   親ディレクトリの Rakefile を検索しません。
      -s, --silent                  --quiet に似ていますが、ディレクトリも表示しません。
      -g, --system                  システム全体の Rakefile を使用します。('~/.rake/*.rake')
      -G, --no-system, --nosystem   システム全体の Rakefile を使用しません。
      -T, --tasks [PATTERN]         パターンにマッチしたタスクの短い説明を表示して終了します。
                                    パターンは省略可能です。
      -t, --trace                   全てのバックトレースを表示します。
      -v, --verbose                 標準出力にログメッセージを表示します (デフォルト)。
      -V, --version                 このプログラムのバージョンを表示します。
      -h, -H, --help                このメッセージを表示します。

=== Rake ファイルの書き方

一から全て自分で書くことも出来ますが、あらかじめ定義されているタスクを
使用すると比較的複雑なタスクも簡単に定義することができます。
また、ルールやファイルタスクをうまく使うとタスクを簡潔に書くことが
出来る場合があります。Rakefile は普通の Ruby スクリプトと同じ文法で
書くことができるので工夫次第で Ruby にできることなら何でもできます。

簡単な例:
  # coding: utf-8
  task :hello do
    puts 'do task hello!'
  end

動的にタスクを定義する例:
  # coding: utf-8
  require 'rake/testtask'
  require 'rake/clean'    # clean, clobber の二つのタスクを定義
  task :default => [:test]
  
  1.upto(8) do |n|
    Rake::TestTask.new("test_step#{n}") do |t|
      t.libs << "step#{n}"
      t.test_files = FileList["step#{n}/test_*.rb"]
      t.verbose = false
    end
  end
  
  desc 'execute all test'
  task 'test_all' => (1..8).to_a.map{|n| "test_step#{n}"}

=== 用語集


: action / アクション
  タスクを機能させるためのコードです。
  Rakefile 内のアクションはコードブロックで指定されます。(たいていは do/end ブロックで区切られます)
: execute / 実行
  あるタスクが実行されると、それに含まれるアクションは定義された順番通りに全て評価されます。
  invoke と違うのは execute はアクションを常に実行する点です (事前タスクを呼び出したり実行したりしません)。
: file task (FileTask) / ファイルタスク (FileTask)
  ファイルとはファイルを作成するためのものです。(同じ名前のタスクもあります)
  ファイルタスクは呼び出されると以下の条件のいずれかを満たす場合のみタスクを実行します。
     (1) 関連するファイルが存在しない場合
     (2) 事前タスクで作成したファイルの方が新しい場合
  普通のタスクを事前タスクに持つファイルタスクが常に実行されるのは、
  普通のタスクが現在時刻をタイムスタンプとしているためです。
: invoke / 呼び出し
  あるタスクが呼び出されると、最初にそのタスクが以前呼び出されたことがあるかチェックします。
  呼び出されたことがあれば何もしません。そのタスクが初めて呼び出された場合は、そのタスクの
  事前タスクを一つずつ呼び出します。最終的に、このタスクのアクションを実行する必要があるかどうか
  チェックします。このタスクを実行する必要があれば、アクションを実行します。
  NOTE: このタスクを実行する必要が無い場合も事前タスクは呼び出されています。この振る舞いは将来変更予定です。
: prerequisites / 事前タスク
  全てのタスクはゼロ個以上の事前タスクを持ちます。
  タスク T に対する事前タスク P は必ずタスク T よりも前に呼び出されます。
: rule / ルール
  タスクが明確に定義されていない場合に、ルールはタスクを合成するレシピになります。
  ルールはふつうファイルタスクを合成します。
: task (Task) / タスク (Task)
  Rake ファイルにおける基本単位です。
  タスクは名前と、事前タスクと、実行するアクションのリストを持ちます。
