Rakeって何?
RakeはRubyのタスクランナーです。make
のRubyバージョンのようなものだと思います。
都度、実行する必要があるようなタスクをrakeを使って管理することができます。
Railsでマイグレーションを行う時にはrails db:migrate
を実行すると思いますが、rake db:migrate
でも同様の結果を得られます。
Ruby単体での使い方
gem install rake
touch Rakefile
task :sample do
puts "sample"
end
上記のように定義した場合、以下のように呼び出すことができます。
rake sample
また、命名においてバッティングが起こる可能性があるため名前空間を使うことができます。
namespace :animal do
task :monkey do
puts "サル"
end
task :elephant do
puts "ゾウ"
end
end
名前空間を使った場合は:
を使って表します。
rake animal:monkey
# => サル
rake animal:elephant
# => ゾウ
Railsでの使い方
Railsにはデフォルトの状態でRakeが入っています。
Rakeファイルを見てみると以下のようになっています。
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require_relative 'config/application'
Rails.application.load_tasks
lib/tasks
配下にrakeファイルを作成すると、Rakefileに読み込まれます。
Rails.application.singleton_class.instance_method(:load_tasks)
=> #<UnboundMethod: #<Class:#<App::Application:0x000056015a39d760>>#load_tasks(app=...) /usr/local/bundle/gems/railties-6.1.6/lib/rails/engine.rb:462>
総User数を表示するタスクを作ります。(Userモデルは既成)
touch lib/tasks/user.rake
namespace :user do
desc 'return all users count'
task :count do
puts User.all.count
end
end
上記の設定でrake user:count
を実行するとNameError: uninitialized constant User
エラーが表示されると思います。
通常の状態ではActiveRecordに対してアクセスできないため、:environment
を追加する必要があります。
namespace :user do
desc 'return all users count'
task count: :environment do
puts User.all.count
end
end
参考にした記事