rakeタスクの中だけで使うメソッドはRefinementsで定義するとべんり

  • 17
    Like
  • 0
    Comment

Refinementsを使うと他から参照できないrakeタスクの中だけで使えるメソッドを定義できる。

Rakefile
top_level = self

using Module.new {
  refine(top_level.singleton_class) do
    def hi
      puts :hi
    end
  end
}

desc 'はい'
task :hi do
  hi
end
% rake hi
hi

その他のアプローチ

rake task でメソッド定義 by @kuboon on @Qiita
ruby - 特定のRakeタスク内でのみ使うメソッドの定義方法 - スタック・オーバーフロー

ふつうに定義したときの失敗1

hiメソッドがトップレベルに定義されてしまう。

Rakefile
def hi
  puts :hi
end

desc 'はい'
task :hi do
  hi
end

ふつうに定義したときの失敗2

hiメソッドがトップレベルに定義されてしまう。

Rakefile
desc 'はい'
task :hi do
  def hi
    puts :hi
  end

  hi
end

ふつうに定義したときの失敗3

hiメソッドがトップレベルに定義されてしまう。

Rakefile
m = Module.new do
  def hi
    puts :hi
  end
end

desc 'はい'
task :hi do
  include m
  hi
end