LoginSignup
61
36

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-17

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
61
36
2

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
61
36