時々とおまわり

プログラミング雑記

rails g controller で不要なルーティングの追加をスキップしたい

FBCRailsのプラクティスでdevise gemの使い方を学んでいます。 ログイン機能とプロフィールページの追加にUserモデルのcontrollerが必要になりました。 既にに必要なルーティングは追加済みだったのでrails g コマンドでcontrollerを作成する際にルーティングの追加をスキップする方法を調べました。

結論

--skip-routes オプションを追加するとルーティングの追加をスキップできる。

例) Userモデルのindex、showアクションを追加したcontroller作成したいがルーティング追加はスキップしたい

デフォルトではルーティングも追加されてしまう。

$ rails g controller users index show
Running via Spring preloader in process 12369
      create  app/controllers/users_controller.rb
       route  get 'users/index' # routes.rbへの不要な追記
              get 'users/show'  # routes.rbへの不要な追記
      invoke  erb
       exist    app/views/users
      create    app/views/users/index.html.erb
      create    app/views/users/show.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

--skip-route オプションを追加するとルーティング追加をスキップできる。

$ rails g controller users index show --skip-routes
Running via Spring preloader in process 13318
      create  app/controllers/users_controller.rb
      invoke  erb
       exist    app/views/users
      create    app/views/users/index.html.erb
      create    app/views/users/show.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

rails g controller について

rails g controller モデル名複数形 アクション名 オプション でcontrollerとそれに付随するファイルを自動生成してくれます。

コマンドラインツール - Railsガイド

デフォルトでは次のファイルを自動生成します。

  • controller
  • view
  • asset
  • route
  • test
  • helper

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

オプションについて

ルーティング作成のスキップ以外にも次のようなオプションが用意されています。

  • assets成をスキップ: --no-assets
  • test作成をスキップ: --no-test-framework
  • helper作成をスキップ: --no-helper

rails generate controller で不要なファイルを生み出さないために - Qiita

他にも色々とオプションが用意されているので詳細はrails g controller -h でヘルプを参照してください。

rails g で同時作成するファイルの設定を変更する

設定ファイルである./config/application.rb に設定を追加することで同時作成するファイルのデフォルト設定を変更できるようです。

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

# ./config/application.rb

...
module BooksApp
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.1

    # 下記を追記
    config.generators do |g|
      g.assets false          # assetファイルの作成をスキップ
      g.skip_routes false     # route追加をスキップ
      g.test_framework false  # testファイルの作成をスキップ
    end

  end
end

実際にデフォルトの設定変更は行っていないので機会があればやってみたいと思います。

まとめ

controllerを作成したかっただけなのに不要なルーティングが追加されるので時間を費やしてしまった。 Railsは色々と便利なコマンドや機能が揃っているが、慣れるまでがちょっと大変だなと感じました。

参照

コマンドラインツール - Railsガイド

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

rails generate controller で不要なファイルを生み出さないために - Qiita