Rubyのrakeの使い方をまとめました

19/01/27 17:28:30     19/05/06 11:58:50

Rubyのrake

Rubyのrakeとは、Ruby製のビルドプログラムです。C言語のmakeというビルドプログラムの影響を受けており、似たような機能になっています。このページでは、rakeの使い方や、そもそもビルドプログラムとは何か、といったことも解説していきます。

ビルドプログラムの仕組み等についてすでに知っているという方は、その部分は読み飛ばしてください。

ビルドプログラムとは

ビルドプログラムとは、ソースコードを二進数に変換するプログラムのことです。プログラミング言語は人間にわかるよう英語に近い形にしたものですが、コンピューターはプログラミング言語自体を理解できるわけではありません。

プログラミング言語を開発した人が各コードに対して二進数を割り当てているだけで、言語そのものはまったくシステムとは関係ないということです。二進数に変換することを想定し、なおかつ人間にわかるように言語化したものがプログラミング言語です。

よって、このプログラミング言語を二進数に変換しないとコンピューターは動きません。またコンパイルとビルドの違いですが、明確に区別する必要はありません。区別するとすれば、一つ一つのソースコードを二進数に変換する作業がコンパイル、コンパイルを含めソースコード全体をコンピューターが動ける状態に整える作業がビルド、といったイメージです。

つまり、ビルドのメインがコンパイルです。ビルドの大部分がコンパイルなので、ビルド≒コンパイルとなります。

rakeの特徴

rakeはRubyで記述できる仕様になっており、記述したものはRakefileというファイルに保存されます。このファイル内の一連の処理をタスクと呼びます。コマンドの詳細は後述しますが、基本となるタスクの実行は以下のように記述します。

rake 実行タスク名

たとえば以下のRakefileが用意されているとします。

desc 'Task description'
task :task_name do
    puts 'Rake task'
end

このファイルを以下のコマンドで実行します。

rake task_name # => Rake task

また、以下のコマンドでタスク一覧を表示することができます。

rake –T

rakeのタスクのTを指定します。調べたいコマンドがあれば、以下のコマンドでRakeコマンドのオプションを見ることができます。

man rake

より詳細な情報がほしい場合、以下のコマンドでヘルプを見ることができます。

rake --help

rakeを使うための準備

rakeを使用するためには、gemというライブラリが必要になります。Rubyのインストールはrbenvを使用する人が多いかと思いますが、その場合特に意図していなくてもrakeは一緒に入っています。

rakeコマンドとその説明

rakeはすでに入っているという前提で、コマンドについて解説していきます。

タスクを指定する

まずはもっとも基本となる、rakeにタスクを指定するコマンドです。

# task :default => :hello
task default: :hello

desc "hello"
task :hello do
    puts "Hello Rake!!"
end

デフォルトでhelloというタスクを実行してください、と書いてあり、下ではhelloというタスクの中身を記述しています。処理内容は、Hello Rake!と表示することです。

タスクを階層化する

タスクを指定するだけでなく、これを階層化することが可能です。以下のようになります。

task default: 'basic:hello'

namespace :basic do
    desc "hello"
    task :hello do
        puts "Hello Rake!!"
    end
end

namespace :foo do
    namespace :bar do
        desc "foo bar hoge!!"
        task :hoge do
            puts "foo:bar:hoge!!"
        end
    end
end

タスクの階層は以下のようになります。

$ rake -f Rakefile -T
rake basic:hello # hello
rake foo:bar:hoge # foo bar hoge

二つ目のタスクでは、タスクのなかにタスクが入っているのがわかります。foo、bar、hogeと、タスクが三層構造になっています。また二層目で出力処理を記述し、さらに三層目でも出力処理を記述しています。

タスクをチェーンにする

階層化と似ていますが、タスク内で他のタスクの実行を指定することが可能です。以下のタスクhelloでは、fooとbarのタスクの実行を指定しています。記述のフォーマットは以下の通りなので、チェーンにする場合コピペして中身を書き換えると良いかと思います。

desc "invoke foo bar"
task :hello => %w[foo bar]

task :foo do
    puts "hello foo"
end

task :bar do
    puts "hello bar"
end

以下のように、タスクがチェーンになっていることがわかります。

$ rake -f Rakefile -T
rake hello # invoke foo bar
$ rake -f Rakefile hello
hello foo
hello bar

タスクに引数を渡す

今までは引数なしのタスクを設定してきましたが、引数も使えます。

desc "hello task"
task :hello, [:name, :job] => [:hi, :bye]

task :hi, [:name, :job] do |task, args|
    puts "DEBUG: #{task}, #{args}"
    puts "Hi #{args[:name]}, #{args[:job]}"
end

task :bye, [:name, :job] do |task, args|
    puts "DEBUG: #{task}, #{args}"
    puts "bye #{args[:name]}, #{args[:job]}"
end

hiとbyeという二つのタスクをhelloから指定しています。

引数はnameとjobの二つで、それぞれ処理のなかで使用しています。タスク一覧で確認すると以下のようになっています。

$rake -f Rakefile -T
rake hello[name,job] # hello task
$ rake -f Rakefile “hello[taro, jedi]”
DEBUG: hi, #<Rake::TaskArguments name: taro, job: jedi>
Hi taro, jedi
DEBUG: bye, #<Rake::TaskArguments name: taro, job: jedi>
bye taro, jedi

まとめ

以上、Rubyのrakeの使い方を紹介しました。基本のタスク登録はそこまで難しくないかと思いますが、慣れないうちは戸惑うかもしれません。またその他応用的な使い方もありますが、それについてはコマンドオプションやヘルプで確認するか、ネットや書籍で情報を漁ってみてください。

rakeコマンドはRubyそのもののコーディングに比べると難易度は低いのですが、情報が少ないという欠点があります。特にネット上でコマンドを探してもなかなか見つからないケースがあるので、最初のうちは自分が書いたコマンドが合っているのかどうかわからないことがあるかもしれません。

情報が見つからない場合Githubや英語検索だと割と引っかかるので、英語でも問題ない方はそのまま、日本語にしたい方は翻訳ツール等を使ってチャレンジしてみてください。Chromeの拡張機能でページを丸ごと翻訳できるものもあるので、英語サイトにも目を向けることがプログラミングの情報収集には役立ちます。

Rubyのフリーランス案件をチェック

→Rubyの案件情報一覧はこちら

Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法
13, Rubyでディレクトリ内のファイルを一覧出来るようにする方法
14, Rubyを使ってcsvファイルを読み込む・書き込む方法まとめ
15, MacでRubyの開発環境構築する方法をまとめました
16, サーバーサイド開発言語としてのRubyってどうなの?
17, Rubyで範囲オブジェクトを配列にする方法
18, CentOSサーバにRubyをインストールする方法
19, Rubyを使ってやりたいことから逆引きで使える機能を解説します
20, Rubyでopen uriを使ってWeb上のデータを取得しよう
21, Rubyでハッシュをマージ(結合)する方法まとめ
22, (この記事)Rubyのrakeの使い方をまとめました
23, Rubyでのtimeクラスの取扱に関してのまとめ

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する