Ruby on Railsで新しくコントローラーを作る時に、不要なファイルを出さない様に設定をいれるか、オプションを指定する方法です。
#システム環境
環境に依存する話ではないと思いますが、私の環境は以下の通りです。
- Ruby 2.6.3
- Rails 6.0.3.3
- RSpec 3.9
#Before:設定がない時
デフォルトの状態でrails g controller hoges
すると、以下の様なファイルが生成されます。昔はcontroller specも生成された気がしますが、controller specは公式が推奨していないので、今は出ないみたいです。
$ rails g controller Hoges new
create app/controllers/samples_controller.rb
route get 'samples/new'
invoke erb
create app/views/samples
create app/views/samples/new.html.erb
invoke rspec
create spec/requests/samples_request_spec.rb
create spec/views/samples
create spec/views/samples/new.html.erb_spec.rb
invoke helper
create app/helpers/samples_helper.rb
invoke rspec
create spec/helpers/samples_helper_spec.rb
invoke assets
invoke scss
create app/assets/stylesheets/samples.scss
でも、「controllerごとにcssを分けないよね」とか「Helperも使わないよね」ということもあるんじゃないでしょうか(←私)。
生成したファイルを手動で毎回消すのが面倒なので、設定を入れることにします。
※不要なファイルは、後から他の人が見た時に分かりづらくなるので、消しておいた方が良いです。
#設定の方法
RSpecをテストフレームワークに設定している方はすでにconfig/application.rbconfig.generators do
の記載があると思いますので、その前後に以下の様に記述を足します。
config.generators do |g|
g.skip_routes true #routesの自動記述をoff
g.helper false #app/helperの自動生成をoff
g.assets false #同名のcssやjsの生成をoff
g.test_framework :rspec, #標準のテストをRSpecに変更
controller_specs: false, #公式で非推奨のためoff
view_specs: false, #Request/Systemで代替するのでoff
routing_specs: false #使用頻度低いのでoff
end
skip_routesは結局resouces :hoge, only: :new
の様にresourcesで書き換えてしまうことが多いので、デフォルトではオフにしています。
app/hoge_helper.rbも意外と使わないのでオフ。assetsも使用頻度が少ないのでオフ。
#After:設定がある時
設定を入れてrails g controller hoges newを実行すると、結果は以下の通りです。
$rails g controller Samples new
create app/controllers/samples_controller.rb
invoke erb
create app/views/samples
create app/views/samples/new.html.erb
invoke rspec
create spec/requests/samples_request_spec.rb
これである程度スッキリしたのではないでしょうか。
#ご参考:コマンドのオプションで指定する方法
config/application.rbに記載して設定するのではなく、都度オプションで指定する方法もあります。
$rails g controller samples new --no-assets
Option | 省略されるもの |
---|---|
--no-assets | app/assets/以下の.js, .cssファイル |
--no-helper | app/helpers以下のHelperファイル |
--no-test-framework | Specファイル。上の場合だとrequest specが省略されます |
--skip-routes | |
--skip-template-engine |