プログラミング学習記録

主にRuby on Railsを使ったプログラミングを学んでいます。

rails generateコマンド実行時に不要なファイルを生成しないよう設定する方法

rails gコマンドで生成されるもの

コントローラーやモデルを作成する場合、rails gコマンドを使うとコントローラーやモデルのファイルと共に、テストファイルなどの関連するファイルを自動で生成してくれる。
デフォルトで生成するものは以下の通り。

https://i.gyazo.com/146862d2fa1c2222e801c713253e6616.png

※ルーティングに関してはファイルを生成するのではなく、ルーティングを設定するという意味。

ただこのままだと開発を進める際に、自動で生成されるファイルに不要なものが含まれる場合がある。

不要なファイルを生成しないよう設定する方法

config/application.rbに設定を加えていく。
例えば、rails g controller コントローラー名(小文字複数形)を実行する際、コントローラーファイルとビューのフォルダのみ(アクション指定時はファイルも)生成し、ルーティングを含め後は必要に応じて自分で用意したいという場合。
この場合、assets,helper,testファイルが不要となり、ルーティングも自動で設定されないようにすればいい。(rails gコマンドを使う場合不要になりやすい設定は、上の表からもわかる通り大体この辺り。コントローラーやマイグレーションファイルが不要なら、別のコマンドを使えばいいのだから)
config/application.rb

...
module App名
  class Application < Rails::Application
    config.load_defaults 5.2

    # ここから
    config.generators do |g|
      g.skip_routes true  # routes.rbを変更しない
      g.assets false  # assets(CSS,JavaScript)ファイルを生成しない
      g.helper false  # helperファイルを生成しない
      g.test_framework false  # testファイルを生成しない
    end
    # ここまで

    config.generators.system_tests = nil
  end
end

ちなみに

制限を加えていない、デフォルトの状態でrails g controller コントローラー名 アクション名とアクションを指定して実行する場合、ビューではviews/コントローラー名/アクション名.html.erbが生成され、routes.rbにはget 'コントローラー名/アクション名'が追加される。(このようなルート定義でも動きはするが、RESTfulの観点からは望ましくない。そのため、routes.rbに変更を加えないよう設定を変え自身でルーティングを設定していく方が、柔軟に開発できるしRESTfulに沿った記述にしていける。)コントローラーファイルには空のアクションが追加される。
アクションを指定しない場合、ビューはコントローラー名のフォルダのみ作成され、routes.rbに変更は加えられない。コントローラーファイルも当然変更なし。
rails g scaffold モデル名を実行した場合、routes.rbにresourcesメソッドを使ってルーティングが一括で設定される。

参考サイト

Rails ジェネレータとテンプレート入門 - Railsガイド

rails generateで自動生成されるファイルの設定 - Qiita

Rails generate コマンドで生成するファイルを限定する方法 - Kazu Tech Blog

DIVE INTO CODE | rails g コマンドが行なっていること

実はこんなにある rails generate|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社