LoginSignup
2
0

More than 1 year has passed since last update.

Rakeって何?

RakeはRubyのタスクランナーです。makeのRubyバージョンのようなものだと思います。

都度、実行する必要があるようなタスクをrakeを使って管理することができます。
Railsでマイグレーションを行う時にはrails db:migrateを実行すると思いますが、rake db:migrateでも同様の結果を得られます。

Ruby単体での使い方

    gem install rake
    touch Rakefile
Rakefile.rb
    task :sample do
      puts "sample"
    end

上記のように定義した場合、以下のように呼び出すことができます。

    rake sample

また、命名においてバッティングが起こる可能性があるため名前空間を使うことができます。

Rakefile.rb
    namespace :animal do
      task :monkey do
        puts "サル"
      end
      task :elephant do
        puts "ゾウ"
      end
    end

名前空間を使った場合は:を使って表します。

    rake animal:monkey
    # => サル
    rake animal:elephant
    # => ゾウ

Railsでの使い方

Railsにはデフォルトの状態でRakeが入っています。
Rakeファイルを見てみると以下のようになっています。

Rakefile.rb
    # 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
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を追加する必要があります。

lib/tasks/user.rake
    namespace :user do
        desc 'return all users count'
        task count: :environment do
            puts User.all.count
        end
    end

参考にした記事

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0