読者です 読者をやめる 読者になる 読者になる

ちなみに

火曜日の空は僕を押しつぶした。

Rails console に任意のヘルパーメソッドを追加する

たとえば API の呼び出しを console からテストしたい場合、もろもろの準備などを毎回書くのは大変面倒である。API を呼び出して結果を取得するまでをヘルパーメソッドにしておくと楽になる。RSpec でいうところの Request Spec を書けば良いという話は置いておいておく。

module Hoge
  class Application < Rails::Application
    # ...

    console do
      require "console/hoge_helper"
      Rails::ConsoleMethods.include Console::HogeHelper
      TOPLEVEL_BINDING.eval('self').extend Rails::ConsoleMethods
    end
end

config/application.rbconsole ディレクティブを追加して、そこで任意の Module を include してやる。 Rails::ConsoleMethods に include すればいいのかと思ったけど、main に extend してやらないと動かなかった。

module Console
  module HogeHelper
    def awesome
      # ...
    end
  end
end

Module は lib/console/*_helper.rb に置いてるけどどこでも良さそう。

ファイルに分けるまでもない場合は、直接メソッドを定義してやってもよい。

TOPLEVEL_BINDING.eval('self').instance_eval do
  def hoge
    # ...
  end
end

これで Rails console 上からおもむろに awesome メソッドが呼べる。

$ bin/rails console
> awesome
=> すごい結果

pry-rails を使っているので この辺 を参考にしたが、もしかしたら irb だと事情が違うかもしれない。

この記事は Add helper methods to your Rails console を参考に書きました。