状況
以下の3つの Rakeタスクファイル があるとします。
lib/tasks/foo/a.rake
lib/tasks/foo/b.rake
lib/tasks/foo/c.rake
それぞれのファイル内には以下の名前のタスクが定義されているものとします。
- a
- b
- c
この 3つ のタスクを抽象的なコード*1で実行します。
タスクファイルの中身の具体例
上記の例の lib/tasks/foo/a.rake
の中身の例は以下のとおりです。
namespace :foodo desc 'Task a' task a: :environment do # ここにタスクの中身が記述されている end end end
結論
Dir.glob('lib/tasks/foo/*.rake').each do |file| task_name = File.basename(file, '.rake') Rake::Task["foo:#{task_name}"].invoke end
注意点
ファイル名 = タスク名
という前提条件を守っている必要がありますファイル名 = タスク名
という条件は絶対的なものではなく、「抽象」の記述が守られるような命名規則が定立されているならばそれで OK です*2