Rails generate コマンドの一覧と使い方をわかりやすく解説!
はじめに
Ruby on Railsでアプリケーションを作成する際、rails generate コマンドは開発者の作業を大幅に効率化します。
モデルやコントローラなどを一括で生成できるため、手作業でファイルを作るよりも格段にスピードアップできるでしょう。
しかし、初心者の方にとっては「どんなコマンドが用意されていて、何が生成されるのか」「実務ではどのように使えばいいのか」が分かりにくいかもしれません。
そこでこの記事では、Rails generate コマンドの代表的な種類を一覧で紹介しながら、具体的な活用シーンや気をつけたいポイントを詳しく解説します。
これを読めば、無駄な手作業を減らし、アプリケーション開発の初期段階から整った構成を得るために役立つはずです。
はじめてRailsを触る方でも理解しやすいように、専門用語をなるべくかみ砕いて説明していきます。
この記事を読むとわかること
- rails generate コマンドが何をするのか
- よく使われるサブコマンド(model、controller、scaffold など)の特徴と使い方
- コマンド実行で生成されるファイルやディレクトリの概要
- 実務での具体的な使用例
- コマンドを使うときの注意点や、よくある質問
Rails generate コマンドの概要
Railsには、プロジェクトをスムーズに構築するためのさまざまな仕組みがあります。
そのうちの一つがrails generateで、単にrails g
と省略して使うことも多いです。
rails generate でできること
rails generate コマンドを実行すると、指定したサブコマンドに応じて必要なファイルやディレクトリが自動的に生成されます。
たとえばモデルを作りたいならrails generate model
、コントローラならrails generate controller
といった具合です。
それにより、以下のようなメリットを得られます。
- ファイルの作成漏れを防げる
- 初期設定が整った雛形が自動的に生成される
- コードの重複や書き忘れを減らせる
rails generateは、最初から決まったディレクトリ構造をもつRails特有のアプリケーション開発において、とても役に立つコマンドです。
実務と紐付けたイメージ
実際の業務では、新しい機能を追加する際に必要なモデルやコントローラ、テストのファイルなどを、開発チーム内で統一した手順で作ることが重要です。
rails generate コマンドを使えば、誰が作っても同じディレクトリ・同じ命名規則で整えられるため、チーム開発の効率も上がるでしょう。
たとえば「ブログ記事を管理する機能」を新たに作成したいときは、モデルとしてブログ記事を表すクラス、投稿画面や閲覧画面を管理するコントローラ、必要に応じてテストファイルなどを一気に生成できます。
これにより、機能追加時の初期準備を自動化できるのが大きなポイントです。
rails generate model
モデルはデータを表すクラスで、データベースとやり取りするための機能を担います。
rails generate model コマンドは、アプリの中核となるテーブルと対応するクラスを生成します。
基本的な使い方
例えば「Post」という名前のモデルを作りたいとしましょう。
次のように書くと、post.rb
というモデルファイルやマイグレーションファイルなどが一度に用意されます。
rails generate model Post title:string content:text
モデル名に続けて title:string
や content:text
のように記述することで、データベース上のカラムを指定できます。
生成時にカラムを指定すると、後からマイグレーションファイルを編集する手間が減るので便利です。
実務での活用イメージ
ブログの投稿機能、ユーザープロフィール、商品情報など、データベースで管理したい情報すべてにモデルが関わります。
たとえばEコマースサイトであれば、ProductやOrderといったモデルを作成し、そこに商品名や価格などのカラムを設定します。
モデルを先に定義しておくことで、テーブル構造やデータの扱い方がチーム全体で共有しやすくなります。
一度モデルファイルができれば、アプリ全体で同じデータ構造を使い回せるため、開発が楽になるでしょう。
rails generate controller
コントローラは、ユーザーからのリクエストを受け付けて対応する処理を行い、ビューへ渡す役割を持ちます。
rails generate controller では、コントローラの雛形となる .rb
ファイル、ビュー用のディレクトリなどが生成されます。
基本的な使い方
例えば「PostsController」という名前で生成する場合は以下のようになります。
rails generate controller Posts index show new create
コマンドの末尾に index show new create
のようにアクション名を列挙しておくと、それらに対応するビューも自動的に生成される仕組みです。
具体的には app/controllers/posts_controller.rb
や app/views/posts/index.html.erb
などが用意されます。
実務での活用イメージ
たとえばブログ記事の一覧画面や詳細画面を素早く準備したいとき、最初の段階では最低限のアクションやビューをまとめて作ってしまうと便利です。
あとは生成されたファイルにロジックやHTMLを書き足すだけで、基本的なページが出来上がります。
コントローラを使えばユーザの入力に応じてモデルを操作し、その結果をビューで表示するという一連の流れを管理できます。
rails generate で必要ファイルの大部分を賄えるので、手作業よりもはるかに効率的です。
rails generate scaffold
rails generate scaffold は、モデルやコントローラ、ビュー、ルーティング設定など、CRUD操作(作成・読み取り・更新・削除)に必要なファイルをまとめて生成する強力なコマンドです。
初心者にとっては「とにかく一発でアプリの基本機能を作りたい」という場合に重宝するでしょう。
基本的な使い方
例えば「Post」をテーブル名とするブログ投稿機能の雛形を一発で用意したいなら、以下のように書くだけです。
rails generate scaffold Post title:string content:text
このコマンドを実行すると、以下のように複数のファイルが生成されます。
app/models/post.rb
app/controllers/posts_controller.rb
- ビュー関連(
app/views/posts/
以下) - マイグレーションファイル
- ルーティング設定(
config/routes.rb
が更新される)
実務での活用イメージ
新しい機能を試作する段階で、いちいちモデルやコントローラを個別に作る手間を省き、まずプロトタイプを作り上げるのに向いています。
また、管理画面をシンプルに構築したいケースでも有用です。
rails generate scaffold は便利ですが、コードが自動で大量に生成されるため、初心者の方には「どこがどう作られたか」分からなくなる恐れがあります。
学習目的の場合、いきなりscaffoldを使うより、最初はmodelやcontrollerなどを個別に生成して仕組みをつかむ方が理解は深まるでしょう。
rails generate migration
マイグレーションファイルは、データベースの変更(テーブルの作成やカラムの追加など)をバージョン管理する仕組みです。
rails generate migration コマンドは、この変更内容を記述するためのファイルを生成します。
基本的な使い方
例えば、既存のテーブル「posts」にステータスを表すカラムを追加したい場合、以下のように書けます。
rails generate migration AddStatusToPosts status:string
これにより、db/migrate
フォルダ配下にマイグレーションファイルが作成され、ファイル内には指定したカラム追加のコードが雛形として書かれています。
rails db:migrate
を実行することで、データベースが実際に更新されます。
実務での活用イメージ
業務システムでは頻繁に機能追加や変更が発生するため、その都度DBのカラム構造を変えることになります。
マイグレーションファイルをきちんと作っておけば、チームメンバーが後から「何がどのように変更されたのか」を簡単に追えるようになるでしょう。
これによって、開発環境や本番環境など複数の環境で、同じ手順でDB更新を適用できるメリットもあります。
rails generate resource
rails generate resource は、モデルとコントローラ、そしてルーティングなどの基本的なファイルをまとめて作成するコマンドです。
scaffoldほどビューの細かいテンプレートは生成しませんが、model/controller/routes の最低限はそろいます。
基本的な使い方
たとえば「Comment」リソースを追加したい場合は、以下のように実行します。
rails generate resource Comment body:text post:references
これで、モデルファイルやコントローラ、マイグレーション、ルーティング設定などを生成可能です。
ビューに関しては自動生成されないので、必要に応じて別途手動で作成します。
実務での活用イメージ
APIサーバーの開発などで、ビューは不要だがモデル・コントローラ・ルートが必要というケースが多々あります。
このような場合に、scaffoldよりもすっきりとリソースの初期構成だけを整えたい場合に使うと便利です。
また、後で独自にビューを用意することが分かっているときにも、resourceで最低限のリソース構成だけを素早く生成する方法が好まれます。
rails generate mailer
rails generate mailer は、メール送信機能を行うクラスやビューを生成します。
アプリケーションからユーザにメールを送りたい場合(パスワード再設定メールなど)に利用します。
基本的な使い方
たとえば「NotificationMailer」という名前のメールクラスを作りたい場合、以下のように実行します。
rails generate mailer NotificationMailer
すると app/mailers/notification_mailer.rb
と、対応するビューを配置するための app/views/notification_mailer
ディレクトリが生成されます。
あとは各アクションを定義し、必要なビューを作成すればメールを送れるようになります。
実務での活用イメージ
ユーザ登録時の確認メール、本登録完了メールなどを送信するシステムを整えたいときに役立ちます。
さらに、大量のメール送信や定期的な通知などもマイラーを通じて実現されるケースが多いです。
メール機能を実装する際は、実際に外部に送信する前に「どのタイミングで呼び出されるか」や「文面をどのように管理するか」をあらかじめ決めておくとスムーズです。
ビューを使って柔軟にHTMLメールのレイアウトを整えられるため、デザインや文面を変更しやすいのも魅力です。
rails generate job
rails generate job は、非同期実行したい処理を記述するクラスを生成します。
長時間かかる処理やバッチ的な作業をバックグラウンドで実行する仕組みとして、RailsのActive Jobを利用する場合に便利です。
基本的な使い方
たとえば「ExportDataJob」という名前のジョブを作りたいときは、以下のように書きます。
rails generate job ExportData
これにより app/jobs/export_data_job.rb
が生成され、perform
メソッドをはじめとする雛形が用意されます。
あとは、この中に実行したい処理のコードを書くだけです。
実務での活用イメージ
画像の変換やレポートの作成など、実行に時間がかかる処理をユーザの操作と切り離したいときは、Jobとして定義してバックエンドで実行する方法がよく採られます。
たとえば「ユーザがアップロードしたファイルを自動で加工し、終わったら通知を送る」などの流れを作るときに活用します。
rails generate channel
Action Cableという、Rails標準のリアルタイム機能(WebSocketを使った双方向通信)を扱うときに必要となるのがrails generate channel です。
チャット機能など、リアルタイムに情報を更新したいシーンで利用されます。
基本的な使い方
たとえば「ChatChannel」を定義したい場合、以下のコマンドを実行します。
rails generate channel Chat
すると app/channels/chat_channel.rb
や app/javascript/channels/chat_channel.js
(または.coffee
ファイルの場合もあります)など、Action Cableに必要なファイルが作られます。
実務での活用イメージ
リアルタイム性が要求されるアプリは、チャットのみならず、株価更新やマルチプレイゲームの情報共有など、多岐にわたります。
バックエンドとフロントエンドをWebSocketで繋ぐ方法として、RailsのAction Cableを活用するときにはchannelのクラス設計が欠かせません。
rails generate helper
ヘルパーは、ビューでよく使う処理をまとめておく役割を持ちます。
rails generate helper を使うと、指定した名前でヘルパーモジュールのファイルが生成されます。
基本的な使い方
たとえば「PostsHelper」を作るなら以下のように実行します。
rails generate helper Posts
すると app/helpers/posts_helper.rb
が用意されます。
ここにビューで使いたい共通処理をメソッド化しておけば、ERBファイル内などで簡単に呼び出せるようになります。
実務での活用イメージ
日付のフォーマット変換や文字数のカウント、レイアウトの一部を出し分けるためのメソッドなど、細かい処理をまとめて可読性を高めたい場合に活用します。
大規模なアプリケーションほど、ビュー周りのコードが煩雑になりがちなので、ヘルパーでスッキリ管理すると良いでしょう。
rails generate integration_test
Railsにはテストフレームワークが内蔵されており、コントローラやビューを含めたアプリ全体の流れを検証するのが 統合テスト (Integration Test) です。
rails generate integration_test は、その統合テストの雛形ファイルを作ります。
基本的な使い方
例えば「login_flow」という名前の統合テストを作る場合、以下のコマンドを実行します。
rails generate integration_test login_flow
すると test/integration/login_flow_test.rb
というファイルが生成されます(RSpec環境ではファイルパスが異なる場合がありますが、基本的な仕組みは同じです)。
これを編集して「実際にユーザがログインページを開き、正しい情報を入力してログインする」などの流れをテストできます。
実務での活用イメージ
機能が増えれば増えるほど、手動でテストするのは大変になります。
統合テストを活用すれば、主要なフローが正しく動くかどうかを自動で確認できるため、品質を保ったまま開発を進めやすくなるでしょう。
rails generate system_test
Rails 5.1以降のバージョンから導入された仕組みとして、ブラウザをシミュレートしたUIテストを行える システムテスト (System Test) があります。
rails generate system_test コマンドは、そのシステムテストのファイルを作成します。
基本的な使い方
たとえば「posts」という名前のシステムテストを用意したいなら、以下のように実行します。
rails generate system_test posts
test/system/posts_test.rb
が生成され、そこにブラウザ操作のシミュレーションを記述することで、実際の画面遷移や入力フォームへの記入、ボタンのクリックなどをテストできます。
実務での活用イメージ
ユーザが実際に操作する画面まわりをテストしたいときに有効です。
重要な画面フロー(商品一覧ページから商品を選び、カートに入れて注文確定まで進むなど)をプログラムで再現し、誤作動がないかチェックできます。
rails generate task
Railsには、アプリケーション独自のタスクを設定できるRakeタスクという仕組みがあります。
定期的に動作させたい処理や、メンテナンス作業などをまとめておくと便利です。
rails generate task は、そのRakeタスクの雛形を生成します。
基本的な使い方
例えば「reports」という名前の名前空間で「daily_summary」というタスクを作りたい場合、以下のように入力します。
rails generate task reports daily_summary
これによって lib/tasks/reports.rake
が生成され、そこに daily_summary
タスク用のコードを記述できます。
実行時は rails reports:daily_summary
のような形で呼び出します。
実務での活用イメージ
日次バッチのように「深夜に1日分の集計をしてレポートを作成し、管理者へメールを送る」といった定期作業を実装したいケースが典型です。
Rakeタスクとして切り出しておけば、いつでもコマンド一発で同じ処理を呼び出せるうえ、スケジューラとの連携も簡単になります。
rails generate resource と scaffold の違い
rails generate resource と rails generate scaffold は似ている部分もありますが、生成されるファイルの範囲が違います。
リソースとルーティングをまとめて作る点は共通ですが、scaffoldのほうはビューまで含めたCRUD機能全体を一括生成します。
一方でresourceはビューを作らず、コントローラ側のアクションも空っぽの状態です。
「コントローラとモデル、ルーティングだけあれば十分」というAPI志向の設計や、独自デザインでビューを一から作り込みたい場合などに適しています。
逆に言えば、管理画面や試作品など「最低限CRUDが動けばいい」というケースではscaffoldが楽です。
rails generate コマンドを使うときの注意点
rails generate コマンドは便利ですが、乱用するとファイルが大量に増えすぎて、どこに何があるのか分からなくなるリスクがあります。
以下の点を意識すると良いでしょう。
目的をはっきりさせる
何のためにモデルやコントローラを生成するのかを明確にしてからコマンドを打つと、無駄なファイルを増やすことを避けられます。
生成後の修正を前提にする
生成されたコードはあくまで雛形です。
内容をしっかり読みながら、自分のアプリに合うように編集・削除しましょう。
チームのルールを決める
どのタイミングでscaffoldを使っていいのか、モデルやコントローラは細分化するかどうかなど、あらかじめ方針があると整合性が保ちやすいです。
rails destroy との関係
rails destroy
コマンドを使うと、rails generate で生成したファイルを逆に削除できます。
たとえば model や controller など、同じ引数を指定して実行すれば、そのときに作られたファイルが自動的に取り除かれる仕組みです。
ただし、一部の設定ファイル(routes.rb
やマイグレーションファイル)を編集したあとにdestroyを実行した場合、手動で編集した部分までは元に戻らないことがあります。
そのため、よく考えたうえで生成・削除を行うのが無難です。
rails generate でよくある質問
不要なテストファイルも生成されてしまうのですが?
Railsではデフォルトでテストファイルが一緒に作られます。
テストフレームワークを使わない予定なら、設定を変更してテストの生成をオフにできる場合もあります。
ただし、後でテストを導入するとなったときに再度ファイルを揃えるのは手間なので、初期のうちはそのまま作っておくケースも多いでしょう。
大文字と小文字の使い方に迷います
Railsの命名規則として、クラス名は先頭を大文字(キャメルケース)、ファイル名やテーブル名はスネークケース(すべて小文字で単語をアンダースコア区切り)です。
rails generate model Post
のように、クラス名をキャメルケースで指定すれば、自動的にファイル名はスネークケースに変換されます。
scaffoldで作られるコードが自分の要望と違う
scaffoldはあくまで「一般的なCRUD機能のテンプレート」を作るものです。
独自の処理やUIを求めるなら、後から自分で編集する必要があります。
どうしてもテンプレートが異なる場合は、ジェネレータのテンプレートをカスタマイズする方法もありますが、初心者のうちはまずは手動編集で慣れたほうがよいでしょう。
まとめ
rails generate コマンドは、Rails開発においてさまざまなファイルを一括で生成し、作業を効率化するうえで欠かせない機能です。
初心者でも扱いやすいコマンドが揃っており、モデル・コントローラ・ビュー・テストなどをスピーディーに用意できます。
特に scaffold は一気にCRUD機能を整備できるため、とりあえず動くものを作りたいときには有用です。
ただし、どんなファイルが生成されたかを理解せずに使うと、後々どこを直せばいいのか分からなくなる恐れがあります。
以下のポイントを押さえて、ぜひ実際の開発や練習プロジェクトで使ってみてください。
- まずは model や controller をそれぞれ生成して、Railsの構造を理解する
- 大まかな試作品や管理画面を作るなら scaffold が役立つ
- ビューが不要なAPIや細かい制御が必要な機能は resource が便利
- mailer, job, channel など、用途別のコマンドを使いこなすと開発効率が格段に向上する
Railsのプロジェクトでgenerateコマンドを覚えると、立ち上げから実装までのスピードがぐっと増すはずです。
それぞれのコマンドの役割と使い所をしっかり理解しながら、開発を進めていきましょう。