rails generateコマンド実行時に不要なファイルを生成しないよう設定する方法
rails gコマンドで生成されるもの
コントローラーやモデルを作成する場合、rails gコマンドを使うとコントローラーやモデルのファイルと共に、テストファイルなどの関連するファイルを自動で生成してくれる。
デフォルトで生成するものは以下の通り。
※ルーティングに関してはファイルを生成するのではなく、ルーティングを設定するという意味。
ただこのままだと開発を進める際に、自動で生成されるファイルに不要なものが含まれる場合がある。
不要なファイルを生成しないよう設定する方法
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株式会社