rails generateで生成されるもの

目次

概要

rails generateコマンドを使うと、Railsアプリケーションにおける基本的な機能の雛形を簡単に生成することができます。😊

しかし、コマンド実行時にどのようなファイルが生成されるのかを把握していないと、無駄なファイルが残ってしまい、ソースが煩雑になります。😢

そこで今回は、各種コマンドとそれに応じて生成されるファイルをまとめてみました!

検証環境

検証準備

Railsアプリケーションの生成

以下のコマンドでrailsアプリケーションを生成します。

rails new sample_app

Railsアプリケーションの起動

生成完了後、以下のコマンドでアプリケーションを起動します。

rails s

ブラウザでhttp://localhost:3000にアクセスし、以下のような画像が表示されたらOKです!

Git管理

各操作毎にコミットしておくと、コマンドで何が生成されたのか把握しやすくなるのでおすすめです!

(Gitの説明は割愛します🙏)

検証

rails generateの対象

rails generateの対象はなんと26個もあります。😳

(これらは、rails generate --helpで確認できます。)

今回はよく使われる4つ(⭐︎マーク)について検証します!

  • Rails:
    • application_record
    • assets
    • benchmark
    • channel
    • ⭐︎controller
    • generator
    • helper
    • integration_test
    • jbuilder
    • job
    • mailbox
    • mailer
    • ⭐︎migration
    • ⭐︎model
    • resource
    • ⭐︎scaffold
    • scaffold_controller
    • system_test
    • task
  • ActiveRecord:
    • active_record:application_record
  • RackProfiler:
    • rack_profiler:install
  • TestUnit:
    • test_unit:channel
    • test_unit:generator
    • test_unit:install
    • test_unit:mailbox
    • test_unit:plugin

rails generate model

rails generate model を使用することで、modelに関するファイルを生成することができます。

rails generate model {モデル名} {カラム名1}:{型名1} {カラム名2}:{型名2} ...

実際にコマンドを実行し、生成物を確認しましょう。

# 実行コマンド
rails generate model book title:string memo:text

# 実行ログ
Running via Spring preloader in process 82219
      invoke  active_record
      create    db/migrate/20221115151513_create_books.rb
      create    app/models/book.rb
      invoke    test_unit
      create      test/models/book_test.rb
      create      test/fixtures/books.yml

4つのファイルが生成されたことを確認できました。

modelやmigrateファイルだけでなく、テストファイルも作成されるのですね。 👀

rails generate migration

次は、既存のmodelに要素を追加・変更したい時に使用するrails generate migrationです。

操作内容によってrails generate migration以降の命名が変わるので注意です!🚨

# カラム追加の場合
rails g migration Add{カラム名}To{テーブル名} {カラム名}:{型名}

実際にコマンドを実行し、生成物を確認しましょう。

# 実行コマンド
rails generate migration AddAuthorToBooks author:string

# 実行ログ
Running via Spring preloader in process 82559
      invoke  active_record
      create    db/migrate/20221115152836_add_author_to_books.rb

migrateファイルが新たに生成されました。

操作内容がファイル名から読み取れるようになっており良いですね。👏

rails generate controller

続いて、controllerやview周りを生成するrails generate controller です。

rails generate controller {コントローラー名前(複数形)} {アクション名(省略可)}

実際にコマンドを実行し、生成物を確認しましょう。

アクション名あり

# 実行コマンド
rails generate controller books index

# 実行ログ              
Running via Spring preloader in process 82970
      create  app/controllers/books_controller.rb
       route  get 'books/index'
      invoke  erb
       exist    app/views/books
      create    app/views/books/index.html.erb
      invoke  test_unit
      create    test/controllers/books_controller_test.rb
      invoke  helper
      create    app/helpers/books_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/books.scss

controllerやviewファイルの追加以外にも、routesへの追記も確認できます。

アクション名なし

rails generate controller books                        
Running via Spring preloader in process 82765
      create  app/controllers/books_controller.rb
      invoke  erb
      create    app/views/books
      invoke  test_unit
      create    test/controllers/books_controller_test.rb
      invoke  helper
      create    app/helpers/books_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/books.scss

ファイル以外にもapp/views/booksディレクトリが作成されていました。

rails generate scaffold

最後に、アプリケーションの基本的な機能(一覧・詳細・新規作成・編集・削除)を実現するのに必要なファイルを一通り追加してくれるrails generate scaffoldを見てみましょう!

rails generate scaffold {モデル名} {カラム名1}:{型名1} {カラム名2}:{型名2} ...

実際にコマンドを実行し、生成物を確認しましょう。

# 実行コマンド
rails generate scaffold book title:string memo:text

# 実行ログ
Running via Spring preloader in process 83355
      invoke  active_record
      create    db/migrate/20221115160008_create_books.rb
      create    app/models/book.rb
      invoke    test_unit
      create      test/models/book_test.rb
      create      test/fixtures/books.yml
      invoke  resource_route
       route    resources :books
      invoke  scaffold_controller
      create    app/controllers/books_controller.rb
      invoke    erb
       exist      app/views/books
      create      app/views/books/index.html.erb
      create      app/views/books/edit.html.erb
      create      app/views/books/show.html.erb
      create      app/views/books/new.html.erb
      create      app/views/books/_form.html.erb
      invoke    resource_route
      invoke    test_unit
      create      test/controllers/books_controller_test.rb
      create      test/system/books_test.rb
      invoke    helper
      create      app/helpers/books_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/books/index.json.jbuilder
      create      app/views/books/show.json.jbuilder
      create      app/views/books/_book.json.jbuilder
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/books.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss

基本的な機能を実現するべく、様々なファイルが生成されていることを確認できます。

小ネタ

コマンド省略

rails generategenerateは、gと省略することができます。

# 以下の2つは同じ
rails generate ~
rails g ~

generateコマンド取り消し

もしgenerateコマンドを間違えたを実行した場合は、rails destroy ~を使って生成されたファイルを削除することができます。

(rails g(generate) ~rails d(destroy) ~にするだけです。😳)

# 実行コマンド
rails d controller books

# 実行ログ
Running via Spring preloader in process 83700
      remove  app/controllers/books_controller.rb
      invoke  erb
      remove    app/views/books
      invoke  test_unit
      remove    test/controllers/books_controller_test.rb
      invoke  helper
      remove    app/helpers/books_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      remove      app/assets/stylesheets/books.scss

様々なオプション

rails generateは便利なコマンドですが、場合によっては不要なファイルも生成されます。

そんな時は、cofig/application.rbを編集して生成されるファイルを制御することができます。

おわり

いかがだったでしょうか?

適切な場面で適切なコマンドを使えるようになりたいですね!

ありがとうございました!😊👋

参考文献