rails generateで生成されるもの
目次
概要
rails generate
コマンドを使うと、Railsアプリケーションにおける基本的な機能の雛形を簡単に生成することができます。😊
しかし、コマンド実行時にどのようなファイルが生成されるのかを把握していないと、無駄なファイルが残ってしまい、ソースが煩雑になります。😢
そこで今回は、各種コマンドとそれに応じて生成されるファイルをまとめてみました!
検証環境
- MacBook Pro(14インチ、2021)
- ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [arm64-darwin21]
- Rails 6.1.7
検証準備
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 generate
のgenerate
は、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
を編集して生成されるファイルを制御することができます。
おわり
いかがだったでしょうか?
適切な場面で適切なコマンドを使えるようになりたいですね!
ありがとうございました!😊👋