大学生がプログラマーを目指すはなし

ruby, python, AIの話が多いです

Rake taskでコマンドラインから複数引数を指定する方法

1. taskを作成してみる。

$rake g task file_name

file_nameにてきとうな名前をつける。
すると、rails/lib/task/ に以下のようなファイルが作成される。

file_name.rake
namespace :file_name do
end

 2. taskに処理を書いてみる。

file_name.rake
namespace :file_name do
  task practice do
print "hello" end end

これで保存する。

 

3. rake taskを確認してみる。

$ rake -vT

# 出力結果
...
rake file_name:practice
...

 こう出力されれば作成されている。

 

4. 実行してみる。

$ rake file_name:practice

# 出力結果
hello

 ここまでくればとりあえず完成である。

 

5. Rake taskでコマンドラインから複数引数を指定する方法

5-1. 概要

rakeコマンド実行時にコマンドラインから複数の引数を入力として受け取るには主に2つの方法があります。

  1. taskを複数定義する。
  2. 環境変数を複数定義する。

5-2. taskを複数定義する。

例えば、

task :practice, 'firstname', 'lastname'

task :practice do |i, args|

  puts "My name is  #{args['first_name']} #{args['last_name']}"

end

 として、実行してあげると

$ rake file_name:practice[Ryotaro,Kubota]

 

# 出力結果

My name is Ryotaro Kubota 

とできる。

5-3. 環境変数を複数定義する

例えば、

task :practice do |t|

  puts "My name is #{ENV['first_name']} #{ENV['last_name']}"

end

 として、実行してあげると

$ rake file_name:practice first_name=Ryotaro last_name=Kubota

# 出力結果

My name is Ryotaro Kubota 

とできる。

 

6. どっちがいいの?

まぁどっちでもいいと思ってしまいますが、強いていうなら環境変数の方が好きかもしれないです。

なぜならtaskを繋げてたくさん書いていくとrake -vTで確認したときに、横にたくさん連なって色々見辛くなります(笑)

$ rake -vT

# 出力結果
...
rake file_name:practice,'sample1','sample2','sample3','sample4'...
...

 こうなっちゃうとdescで説明したところが右側に追いやられてしまうんですよね...

何か良い方法があれば別ですが...