rakeを使う

Rakefile

rubyのmakeがrakeです。
そして、ruby版のMakefileRakefileとなります。
このRakefileには、Rubyを使ってタスクを記述し、rakeコマンドから実行することが可能です。

試してみる

実行環境

まずはrakeを動かす環境を準備します。
Dockerを使って、サクッと準備します。
docker-compose.ymlを作り、以下のようにします。

version: "3"

services:
  ruby:
    image: ruby
    volumes:
      - .:/work

シンプルなタスク

準備はできました。
では、タスクを作ってみます。

はじめに、最もシンプルなタスクを作ってみます。
hello, rake! と表示するだけのタスクになります。
Rakefileを作成し、以下のように編集します。

desc "sample rake task 1"
task :sample_task1 do
  puts "hello, rake!"
end

rake -Tコマンドでタスク一覧を確認してみます。

$ docker-compose run ruby sh -c "cd /work && rake -T"
rake sample_task1  # sample rake task 1

sample_task1が追加されています。
実行してみます。

$ docker-compose run ruby sh -c "cd /work && rake sample_task1"
hello, rake!

hello, rake!と表示されました。

依存のあるタスク

次に、依存のあるタスクを作ってみます。
sample_task2はsample_task1を実行してから実行されます。
以下を書き加えます。

desc "sample rake task 2"
task :sample_task2 => [:sample_task1] do
  puts "hello, rake 2!"
end

rake -Tで確認してみます。

$ docker-compose run ruby sh -c "cd /work && rake -T"
rake sample_task1  # sample rake task 1
rake sample_task2  # sample rake task 2

追加されています。
実行してみます。

$ docker-compose run ruby sh -c "cd /work && rake sample_task2"
hello, rake!
hello, rake 2!

sample_task1が実行され、sample_task2が実行されています。

引数をとるタスク

次に、引数をとるタスクを作ってみます。
helloに続いて引数で受け取ったmsgを表示するタスクを追加します。

desc "sample rake task 3"
task :sample_task3, ["msg"] do |task, args|
  puts "hello, " + args.msg
end

rake -Tで確認してみます。

$ docker-compose run ruby sh -c "cd /work && rake -T"
rake sample_task1       # sample rake task 1
rake sample_task2       # sample rake task 2
rake sample_task3[msg]  # sample rake task 3

追加されています。
実行してみます。
引数はタスク名の後ろに[]で囲って渡します。

$ docker-compose run ruby sh -c "cd /work && rake sample_task3[RAKE]"
hello, RAKE

引数として渡した RAKE が表示されています。

終わり