結論
プロジェクトルートディレクトリにRakefile
を作成する。
# Rakefile
# 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.
# 以下に、プロジェクトルートディレクトリからRailsルートディレクトリの application.rb への相対パスを指定する
require_relative 'path_to_your_rails_app_root/config/application'
Rails.application.load_tasks
原因
Railswaysプラグインは、内部的にrake routes
を実行しているが、これはRubyMineのAPIを利用しているらしい。1
(おそらく、RubyMineのRun Anything
を利用していると思われる)
Run Anything
でのコマンド実行は、プロジェクトルートディレクトリで行われる。
そのため、Run Anything
でrakeコマンドを実行する場合、プロジェクトルートディレクトリにRakefile
を作成する必要がある。
これに関しては、公式ヘルプにも記述があった。2
背景
個人的にRailwaysはとても重宝しており、多用していた。
しかし、アプリケーションにフロントエンドやTerraformを追加するにあたり、ディレクトリを分けて管理したくなった。
そうすると、今まではプロジェクトルートディレクトリ = Rialsルートであったが、以下のような構成になる。
.
├── terratorm
├── frontend
├── backend # Rails App
├── docker-compose.yml
└── README.md
Rakefile
さんがいなくなってしまった。
この状態ではRailwaysは動かず、困っていた。
backend
ディレクトリをRubyMineで開けば動くが、それだと他のディレクトリにアクセスしづらく、利便性が落ちてしまう。
開発するにあたりRailwaysを手放したくはなく、なんとかならないかと考えていた。
追加情報
ちなみに、Railswaysの実行タスクは設定で変えることができる。
(Rialsways > Settings > Rake task name)
デフォルトではroutes
になっており、プレフィックスでrake
を与えてコマンドを実行していることがわかる。
そのため、最初はこの実行コマンドを変えることで対応できるのではないかと考えたが、無理だった。
内容を-f path_to_your_rails_root/Rakefile rouets
に変更し、rake -f path_to_your_rails_root/Rakefile rouets
が実行されるようにしたが、以下のエラーが出てしまった。
rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:698:in `raw_load_rakefile'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:104:in `block in load_rakefile'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:103:in `load_rakefile'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:82:in `block in run'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
/Users/xxxxxx/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
-f
オプションでRakeファイルを指定しているのに、なぜ、、、。
絶対パスで指定してもダメだった。
さらには、Run Anything
では-f
フラグを付けると、プロジェクトルートにRakefile
がなくても実行できた。
内部的にRun Anything
を利用していると考えていたが、もしかしたら違うのかもしれない。
いったいRailswaysのタスクはどこで実行されているのだろうか、、、。
まとめ
今までRakefile
は特に意識しておらず、今回調べたときにその役割を知った。
調べる中でrake
について詳しくなれたのは今回の収穫だった。
この記事がどなたかのお役に立てたら幸いです。