RailsでオリジナルRakeタスク作成からRSpecテストまで


RailsのRakeタスク作成〜RSpecでのテストまでの流れをまとめました。
できるだけシンプルにまとめたので、Rakeタスクの作成にはじめてトライされる方はぜひご一読ください。

02/13 22:10全体的に説明書きを書き直し


😸 Rakeタスクファイルの作成

次のコマンドを実行すると、Rakeタスク用のファイルがlib/tasksの下に作成されます。
(reportsの部分は任意の名前に変更してください)

rails g task reports

上で生成されたlib/tasks/reports.Rakeに処理を記述。

namespace :reports do
# descの記述は必須
desc "Generate report"
# :environment は モデルにアクセスするのに必須
task :generate => :environment do
# 処理を記述
ReportGenerator.generate
end
end

ここまで完了するとRakeタスクの中にreports:generateが追加されます。

rake -vT
# rake reports:generate # hoge の説明" # <= となっていれば成功

次のコマンドで、作成したreports:generateのRakeタスクを実行できます。

rake reports:generate

🐮 RakeタスクのRSpecを作成

Rakeタスクのテストですが、@netwillnetさんのgem『Rspec で rake タスクをテストする用の gem を作った』で詳解されているgem『rake_shared_context』を使う方法を書いておきます。

この方法は、thoughtbotさんのブログに書かれていたrakeのテスト方法をgem化したものだそうです。こちらも読んでおくと捗ります!

まずはGemfileに以下を追加して、ターミナルでbundle installを実行。

gem 'rake'
# shared_context for rake tasks
gem 'rake_shared_context'

spec/lib/tasks/reports_rake_spec.rbを作成して、テストを記述。

require 'spec_helper'
describe 'reports:generate' do
include_context 'rake'
its(:prerequisites) { should include('environment') }
it 'generates the report' do
ReportGenerator.should_receive(:generate)
subject.invoke
end
end

かなり簡単にRakeタスクのテストができちゃいます!

🚜 参考リンク

🐹 変更来歴

12/12/05 22:00 gem ‘Rake’インストールを追加

12/12/11 12:55 taskのサンプルコード内にコメントを追記

12/12/17 10:45コード内の注意書きを追記

13/12/31 16:20 Rails 4 x Ruby 2.1環境で動作確認

14/02/13 21:20全体的に説明書きを書き直し

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)