【Rails】generate コマンドで生成されるファイルを制限する設定

はじめに

 rails generateコマンドはさまざまなファイルを自動生成してくれるとても便利なコマンドですが、「このファイル使わないんだよな〜」または「なんのファイルを生成しているかよくわからない」ってことはありませんか。そこで、今回はgenerateコマンドで生成するファイルを制限する方法について紹介していきます。

まず、generate controllerコマンドの動きを確認してみましょう!!
$ rails generate controller users index
Running via Spring preloader in process 61447
      create  app/controllers/users_controller.rb
       route  get 'users/index'
      invoke  erb
      create    app/views/users
      create    app/views/users/index.html.erb
      invoke  test_unit
      create    test/controllers/users_controller_test.rb
      invoke  helper
      create    app/helpers/users_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/users.scss

このように、コントローラー、ヘルパー、テストなどが自動生成されました。
ちなみに主なgenerateコマンドで生成されるファイルのこのようになっています。

コマンド コントローラ ビュー モデル マイグレーション アセット ルート テスト ヘルパー
scaffold
controller × ×
model × × × × ×
migration × × × × × ×

例えば、generate controllerではこの表から分かる通りコントローラ、ビュー、アセット、ルート、テスト、ヘルパーが生成されます。では、本題である生成されるファイルを制限する設定をしていきましょう。

自動生成を制限する設定

設定をするファイルはconfig/application.rbです。今回は、

  • アセット
  • ルート
  • ヘルパー
  • テスト

を制限してみましょう。設定はこのようになります。

config/application.rb

class Application < Rails::Application
    
#以下のように、generateコマンド時に生成されるファイルに制限をかける
    config.generators do |g|
      g.assets false
      g.skip_routes true
      g.helper false
      g.test_framework false
    end
  end

そして、先ほどと同じgenerateコマンドを入力すると、、、

rails d controller users index
Running via Spring preloader in process 62848

      remove  app/controllers/users_controller.rb
      invoke  erb
      remove    app/views/users
      remove    app/views/users/index.html.erb

このように、コントローラとビューのみ自動生成されるようになりました。