【完全リファレンス】rails generate の使い方|model/controller/scaffold/migration等の全generatorを徹底解説

【完全リファレンス】rails generate の使い方|model/controller/scaffold/migration等の全generatorを徹底解説

Rails 開発の生産性を大きく支えるのが rails generate コマンド。1行で「モデル + マイグレーション + テスト」、「コントローラ + ビュー + ルーティング」など、必要なファイル一式をコンベンション通りに自動生成してくれます。

bin/rails generate model User name:string email:string
bin/rails generate scaffold Post title:string body:text
bin/rails generate migration AddEmailToUsers email:string

しかし、generator の種類は数多く:

  • どの generator を使うべきか迷う(model vs resource vs scaffold)
  • 自動生成されるファイルが何か分からない
  • カラム型・オプション指定の正しい書き方
  • 不要なテストファイル等をスキップしたい
  • 間違って生成したファイルの削除方法
  • Rails 8 から authentication generator が追加された?
  • 自分でカスタム generator を作りたい

など、覚えるべきことが多くあります。

本記事では、rails generate の使い方を、リファレンスとして実用的に整理します。model/controller/scaffold/migration等の基本 generator、Rails 8 の新機能(authentication / Solid Trifecta install)、destroy による取り消し、generator のオプション、カスタム generator 作成、設定カスタマイズ、FAQまで完全網羅。この1本をブックマークすれば、Rails の generator を自信を持って使いこなせるようになります。


目次

結論:今すぐ使える基本パターン10選

時間がない方向けに、頻出パターンを先に示します。

# ① モデル生成
bin/rails g model User name:string email:string

# ② コントローラ生成
bin/rails g controller Posts index show new edit

# ③ scaffold(一括生成)
bin/rails g scaffold Article title:string body:text published:boolean

# ④ マイグレーションのみ
bin/rails g migration AddEmailToUsers email:string

# ⑤ Mailer 生成
bin/rails g mailer UserMailer welcome reset_password

# ⑥ ActiveJob 生成
bin/rails g job NotificationJob

# ⑦ Action Cable Channel 生成
bin/rails g channel Chat

# ⑧ Rails 8 認証一式(新機能)
bin/rails g authentication

# ⑨ ヘルプ表示
bin/rails g
bin/rails g model --help

# ⑩ 生成を取り消し
bin/rails destroy model User

詳細は以下で順に解説します。


まず押さえる:generator の基本

コマンド構文

bin/rails generate GENERATOR_NAME ARGUMENTS [OPTIONS]

# 短縮形
bin/rails g GENERATOR_NAME ARGUMENTS [OPTIONS]

利用可能なgenerator確認

bin/rails generate
# または
bin/rails g

出力例:

Rails:
  application_record
  authentication
  benchmark
  channel
  controller
  generator
  helper
  integration_test
  jbuilder
  job
  mailbox
  mailer
  migration
  model
  resource
  scaffold
  ...

詳細ヘルプ

bin/rails g model --help
bin/rails g scaffold --help
bin/rails g controller --help

特定 generator の使い方が確認できます。

dry-run(実行せずに確認)

bin/rails g model User name:string --pretend
# または -p

実行前に「どんなファイルが作られるか」だけ確認できます。


主要なgenerator 一覧

Generator用途
modelモデル + マイグレーション + テスト
controllerコントローラ + ルーティング + ビュー + テスト
resourcemodel + controller + ルーティング
scaffoldresource + ビュー + 一通りの実装
migrationマイグレーションのみ
mailerメーラー + ビュー + プレビュー
jobActiveJob
channelAction Cable Channel + JS
helperヘルパー + テスト
system_testシステムテスト
integration_test統合テスト
mailboxAction Mailbox
taskRake task
application_recordApplicationRecord 基底クラス
authentication(Rails 8新規)認証一式
solid_queue:installSolid Queue インストール
solid_cache:installSolid Cache インストール
solid_cable:installSolid Cable インストール

model generator

基本

bin/rails g model User name:string email:string

生成されるファイル:

invoke  active_record
create    db/migrate/20260620100000_create_users.rb
create    app/models/user.rb
invoke    test_unit
create      test/models/user_test.rb
create      test/fixtures/users.yml
ファイル内容
db/migrate/xxx_create_users.rbDBスキーマ作成
app/models/user.rbモデルクラス
test/models/user_test.rbモデルテスト
test/fixtures/users.ymlテストデータ

カラム型の指定

bin/rails g model Product \
  name:string \
  description:text \
  price:decimal \
  stock:integer \
  active:boolean \
  published_at:datetime

関連(references)

bin/rails g model Post user:references title:string body:text

→ 自動的に:

  • user_id カラム作成
  • インデックス追加
  • 外部キー制約
  • モデルに belongs_to :user 追加

ポリモーフィック関連

bin/rails g model Comment commentable:references{polymorphic} body:text

class CreateComments < ActiveRecord::Migration[8.0]
  def change
    create_table :comments do |t|
      t.references :commentable, polymorphic: true, null: false
      t.text :body
      
      t.timestamps
    end
  end
end

UUIDを主キーにする

bin/rails g model User name:string --primary-key-type=uuid

または config で全体に適用:

# config/application.rb
config.generators do |g|
  g.orm :active_record, primary_key_type: :uuid
end

インデックス・ユニーク

# 通常インデックス
bin/rails g model User email:string:index

# ユニーク(uniq)
bin/rails g model User email:string:uniq

複合インデックス(手動)

generator では複合インデックスは自動生成されないため、マイグレーションを手動編集。


controller generator

基本

bin/rails g controller Posts index show new edit create update destroy

生成されるファイル:

create  app/controllers/posts_controller.rb
invoke  erb
create    app/views/posts
create    app/views/posts/index.html.erb
create    app/views/posts/show.html.erb
create    app/views/posts/new.html.erb
create    app/views/posts/edit.html.erb
invoke  test_unit
create    test/controllers/posts_controller_test.rb
invoke  helper
create    app/helpers/posts_helper.rb
ファイル内容
app/controllers/posts_controller.rbコントローラクラス
app/views/posts/*.html.erbアクション数分のビュー
app/helpers/posts_helper.rbヘルパーモジュール
config/routes.rbルーティング追加(get ‘/posts/index’等)

ネスト名前空間

bin/rails g controller Admin::Posts index show
# または
bin/rails g controller admin/posts index show

app/controllers/admin/posts_controller.rb に生成、Admin::PostsController クラス。

ルーティング自動追加を抑制

bin/rails g controller Posts --no-route-specs --skip-routes

routes.rb に追加しない(自分で書きたい場合)。

ビュー・ヘルパー・テストをスキップ

bin/rails g controller Posts --no-helper --no-test-framework --no-view-specs

resource generator

model + controller + routes の組み合わせ:

bin/rails g resource Post title:string body:text

生成されるもの:

invoke  active_record
create    db/migrate/20260620100000_create_posts.rb
create    app/models/post.rb
invoke    test_unit
create      test/models/post_test.rb
create      test/fixtures/posts.yml
invoke  controller
create    app/controllers/posts_controller.rb
invoke    erb
create      app/views/posts
invoke    test_unit
create      test/controllers/posts_controller_test.rb
invoke    helper
create      app/helpers/posts_helper.rb
invoke  resource_route
 route    resources :posts

ポイント:

  • ビューファイルは作成されない(個別の *.html.erb なし)
  • routes.rbresources :posts が追加
  • controller は空の状態

「scaffold より控えめ、controller より一歩進んだ」レベル感です。


scaffold generator

最も自動化レベルが高い generator:

bin/rails g scaffold Article title:string body:text published:boolean

生成されるもの(多い!):

invoke  active_record
create    db/migrate/20260620100000_create_articles.rb
create    app/models/article.rb
invoke    test_unit
create      test/models/article_test.rb
create      test/fixtures/articles.yml
invoke  resource_route
 route    resources :articles
invoke  scaffold_controller
create    app/controllers/articles_controller.rb
invoke    erb
create      app/views/articles
create      app/views/articles/index.html.erb
create      app/views/articles/edit.html.erb
create      app/views/articles/show.html.erb
create      app/views/articles/new.html.erb
create      app/views/articles/_form.html.erb
create      app/views/articles/_article.html.erb
invoke    test_unit
create      test/controllers/articles_controller_test.rb
create      test/system/articles_test.rb
invoke    helper
create      app/helpers/articles_helper.rb
invoke    jbuilder
create      app/views/articles/index.json.jbuilder
create      app/views/articles/show.json.jbuilder
create      app/views/articles/_article.json.jbuilder

CRUD(Create/Read/Update/Delete)のすべてが実装された状態で生成。

API モードでのscaffold

# Rails の API モード
bin/rails new myapp --api
bin/rails g scaffold Post title:string body:text

ビューファイルは生成されず、JSON 出力(jbuilder)のみ。

scaffold で生成されるコントローラ例

class ArticlesController < ApplicationController
  before_action :set_article, only: %i[ show edit update destroy ]
  
  def index
    @articles = Article.all
  end
  
  def show
  end
  
  def new
    @article = Article.new
  end
  
  def edit
  end
  
  def create
    @article = Article.new(article_params)
    
    respond_to do |format|
      if @article.save
        format.html { redirect_to @article, notice: "Article was successfully created." }
        format.json { render :show, status: :created, location: @article }
      else
        format.html { render :new, status: :unprocessable_entity }
        format.json { render json: @article.errors, status: :unprocessable_entity }
      end
    end
  end
  
  # update / destroy も生成される
  
  private
  
  def set_article
    @article = Article.find(params.expect(:id))
  end
  
  def article_params
    params.expect(article: [ :title, :body, :published ])
  end
end

学習中の人が CRUD 構造を理解するのに最適。

scaffold を使うべきか

状況推奨
プロトタイプ・MVPscaffold
学習目的scaffold(コードを読み解く)
本格的な機能model + controller を個別作成
認証や複雑なロジックresource → 自前でcontroller書く

scaffold で生成したコードは書き換える前提。そのまま本番で使うことは少ない。


migration generator

スキーマ変更のみを行う:

bin/rails g migration AddEmailToUsers email:string

生成:

create  db/migrate/20260620100000_add_email_to_users.rb

命名規約による自動生成

# Add{Columns}To{Table} パターン
bin/rails g migration AddEmailToUsers email:string

# Remove{Columns}From{Table}
bin/rails g migration RemoveEmailFromUsers email:string

# Create{Table}
bin/rails g migration CreateProducts name:string price:decimal

これらは Rails がマイグレーション内容を自動推測してくれます。

命名規約外の場合

# 任意の名前
bin/rails g migration UpdateUserStatus

→ 空のマイグレーションファイル生成。手動で内容を記述。

詳細はrails db:migrate 使い方の記事を参照。


mailer generator

bin/rails g mailer UserMailer welcome reset_password

生成されるもの:

create  app/mailers/user_mailer.rb
create  app/mailers/application_mailer.rb(既になければ)
invoke  erb
create    app/views/user_mailer
create    app/views/user_mailer/welcome.text.erb
create    app/views/user_mailer/welcome.html.erb
create    app/views/user_mailer/reset_password.text.erb
create    app/views/user_mailer/reset_password.html.erb
invoke  test_unit
create    test/mailers/user_mailer_test.rb
create    test/mailers/previews/user_mailer_preview.rb

mailer の使い方

# app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
  def welcome(user)
    @user = user
    mail to: user.email, subject: "ようこそ"
  end
end
# どこかで
UserMailer.welcome(user).deliver_later

mailer preview

開発時にメールをブラウザで確認:

http://localhost:3000/rails/mailers/user_mailer/welcome

job generator

ActiveJob(バックグラウンドジョブ)の生成:

bin/rails g job ProcessImage

生成:

create  app/jobs/process_image_job.rb
create  test/jobs/process_image_job_test.rb
# app/jobs/process_image_job.rb
class ProcessImageJob < ApplicationJob
  queue_as :default
  
  def perform(*args)
    # Do something later
  end
end

特定キューを指定

bin/rails g job ProcessImage --queue=image_processing

Solid Queue と組み合わせ

詳細はSolid Queue 使い方の記事を参照。


channel generator(Action Cable)

bin/rails g channel Chat

生成:

create  app/channels/chat_channel.rb
identical  app/javascript/channels/index.js
identical  app/javascript/channels/consumer.js
create  app/javascript/channels/chat_channel.js

サーバー側 Channel と、クライアント側 JavaScript を両方生成。

# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
  def subscribed
    # stream_from "some_channel"
  end
  
  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end
end

Solid Cable との組み合わせはSolid Cable 使い方の記事を参照。


Rails 8 の新機能:authentication generator

Rails 8 でDevise なしの認証機能を簡単に追加できる generator が追加されました。

基本

bin/rails g authentication

生成されるもの(多い):

create  app/models/user.rb
create  app/models/current.rb
create  app/models/session.rb
create  app/controllers/sessions_controller.rb
create  app/controllers/passwords_controller.rb
create  app/controllers/concerns/authentication.rb
create  app/mailers/passwords_mailer.rb
create  app/views/sessions/new.html.erb
create  app/views/passwords/new.html.erb
create  app/views/passwords/edit.html.erb
create  app/views/passwords_mailer/reset.html.erb
create  app/views/passwords_mailer/reset.text.erb
create  test/mailers/previews/passwords_mailer_preview.rb
create  db/migrate/20260620100000_create_users.rb
create  db/migrate/20260620100001_create_sessions.rb
route   resource :session
route   resources :passwords, param: :token
bin/rails db:migrate

これだけで以下が実装される:

  • User モデル(email + password_digest)
  • Session 管理
  • ログイン/ログアウト
  • パスワードリセット
  • 認証 concern(before_action)

Devise との比較

機能DeviseBuilt-in(Rails 8)
Email + Password 認証
Session管理
パスワードリセット
アカウント確認
OAuth
カスタマイズ✅(コードを直接編集)
学習コスト
適性大規模・複雑要件小〜中規模

Rails 8 アップグレードガイドも参照。


Solid Trifecta インストール generator

Rails 8 から標準採用された Solid Queue/Cache/Cable を導入:

Solid Queue

bin/rails g solid_queue:install

詳細はSolid Queue 使い方の記事

Solid Cache

bin/rails g solid_cache:install

詳細はSolid Cache 使い方の記事

Solid Cable

bin/rails g solid_cable:install

詳細はSolid Cable 使い方の記事


アセット系 generator

importmap-rails

bin/rails g importmap:install

JavaScript の Import Map をセットアップ。Node.js 不要のフロントエンド構築。

jsbundling-rails

bin/rails g javascript:install:esbuild
# または
bin/rails g javascript:install:bun
bin/rails g javascript:install:rollup
bin/rails g javascript:install:webpack

JS バンドラーをセットアップ。

cssbundling-rails

bin/rails g css:install:tailwind
bin/rails g css:install:bootstrap
bin/rails g css:install:bulma
bin/rails g css:install:postcss
bin/rails g css:install:sass

CSS フレームワーク or ビルドツールをセットアップ。

tailwindcss-rails

bin/rails g tailwindcss:install

Tailwind CSS を即セットアップ。

Propshaft 関連

詳細はPropshaft 使い方の記事を参照。


その他の generator

helper

bin/rails g helper Posts

app/helpers/posts_helper.rb 生成。

concern

Rails 8 では:

# モデル concern
mkdir -p app/models/concerns
touch app/models/concerns/searchable.rb

# controller concern
mkdir -p app/controllers/concerns
touch app/controllers/concerns/authorizable.rb

generator は無いため、手動で作成するのが一般的。

system_test(システムテスト)

bin/rails g system_test Users
# test/system/users_test.rb
require "application_system_test_case"

class UsersTest < ApplicationSystemTestCase
  # test "visiting the index" do
  #   visit users_url
  #
  #   assert_selector "h1", text: "Users"
  # end
end

E2E テスト用。

integration_test

bin/rails g integration_test Posts
# test/integration/posts_test.rb
require "test_helper"

class PostsTest < ActionDispatch::IntegrationTest
  # test "the truth" do
  #   assert true
  # end
end

mailbox(Action Mailbox)

bin/rails g mailbox InboundMail

メール受信処理を実装する場合に使用。

task(Rake task)

bin/rails g task admin_reports daily_report weekly_report

lib/tasks/admin_reports.rake 生成:

namespace :admin_reports do
  desc "TODO"
  task daily_report: :environment do
  end

  desc "TODO"
  task weekly_report: :environment do
  end
end

crontab 書き方 例の記事で定期実行も。


generator のオプション

スキップオプション

# テストファイルを生成しない
bin/rails g model User --no-test-framework
bin/rails g model User --skip-test-framework

# fixtures を生成しない
bin/rails g model User --no-fixture

# helper を生成しない
bin/rails g controller Posts --no-helper

# ビューを生成しない
bin/rails g controller Posts --no-helper --skip-template-engine

# routes に追加しない
bin/rails g controller Posts --skip-routes

# scaffold で system test を生成しない
bin/rails g scaffold Post --no-system-tests

dry-run

bin/rails g model User name:string --pretend
# または -p

生成しないで確認のみ。

強制上書き

bin/rails g model User name:string --force

既存ファイルを警告なく上書き。

Quiet mode

bin/rails g model User name:string --quiet
# または -q

出力を最小化。


ファイル生成の取り消し(destroy)

間違った generate を取り消したい時:

# generate で作ったファイルを削除
bin/rails destroy model User
# または短縮形
bin/rails d model User

bin/rails generate model User で作成したファイルがすべて削除されます:

  • app/models/user.rb
  • db/migrate/xxx_create_users.rb
  • test/models/user_test.rb
  • test/fixtures/users.yml

注意点

⚠️ マイグレーションを実行済みの場合は、destroy する前に DB を rollback:

bin/rails db:rollback   # マイグレーション戻す
bin/rails d model User  # ファイル削除

詳細はrails db:migrate 使い方の記事を参照。

scaffold の取り消し

bin/rails d scaffold Post

scaffold で生成された大量のファイルを一気に削除。


generator のカスタマイズ

config/application.rb でデフォルト挙動を変更:

config.generators do |g|
  # テストフレームワーク
  g.test_framework :rspec
  
  # fixtures
  g.fixture_replacement :factory_bot, dir: 'spec/factories'
  
  # システムテスト
  g.system_tests :rspec
  
  # ヘルパー無効化
  g.helper false
  
  # アセット無効化
  g.javascripts false
  g.stylesheets false
  
  # ORM の主キー
  g.orm :active_record, primary_key_type: :uuid
  
  # template engine
  g.template_engine :haml
end

RSpec を使う場合

# Gemfile
group :development, :test do
  gem 'rspec-rails'
end

# 設定
config.generators do |g|
  g.test_framework :rspec
end

これで bin/rails g model 時に test_unit ではなく RSpec ファイルが生成される。

FactoryBot を使う場合

config.generators do |g|
  g.fixture_replacement :factory_bot, dir: 'spec/factories'
end

→ fixtures の代わりに factories が生成。


カスタム generator の作成

自社・自アプリ用の generator を作る方法。

基本

bin/rails g generator service_object
create  lib/generators/service_object
create  lib/generators/service_object/service_object_generator.rb
create  lib/generators/service_object/USAGE
create  lib/generators/service_object/templates
invoke  test_unit
create    test/lib/generators/service_object_generator_test.rb

実装

# lib/generators/service_object/service_object_generator.rb
class ServiceObjectGenerator < Rails::Generators::NamedBase
  source_root File.expand_path("templates", __dir__)
  
  def create_service_file
    template "service.rb.tt", "app/services/#{file_name}_service.rb"
  end
end
# lib/generators/service_object/templates/service.rb.tt
class <%= class_name %>Service
  def call
    # TODO: 実装
  end
end

USAGE 説明

# lib/generators/service_object/USAGE
Description:
    Creates a service object class.

Example:
    bin/rails generate service_object Payment

    This will create:
        app/services/payment_service.rb

利用

bin/rails g service_object Payment

app/services/payment_service.rb が生成。


トラブルシューティング

generator が見つからない

bin/rails g unknown_generator
# => Could not find generator

確認:

bin/rails g  # 一覧表示

該当 gem がインストールされているか、Gemfile を確認。

生成されるファイルが少ない

config/application.rbconfig.generatorsfalse 設定がある可能性:

# 確認
config.generators do |g|
  g.helper false  # ← これがあるとヘルパー生成されない
end

routes が自動追加されない

bin/rails g controller Posts --no-routes  # ← 明示的にスキップしてる

または config.generators で:

g.controller_specs false
g.routing_specs false

NAMESPACEのファイル配置

bin/rails g controller Admin::Posts
# app/controllers/admin/posts_controller.rb

ディレクトリが自動作成されます。

Solid Trifecta install 後にエラー

詳細はActiveRecord::PendingMigrationError の記事を参照。db:migrate 忘れの可能性。


よくある質問(FAQ)

Q1. generate と g どっちを使うべき?

機能は同じ。慣習的には g の方が多い:

bin/rails g model User
# 短くて打ちやすい

Q2. model vs resource vs scaffold の使い分け

状況推奨
モデルだけ欲しいmodel
モデル + 空コントローラ + ルーティングresource
一通り動くCRUDscaffold(学習・プロト用)
本格的な実装個別に model → 自前 controller

Q3. テストフレームワーク変更

config.generators do |g|
  g.test_framework :rspec  # または :minitest, :none
end

Q4. 生成済みファイルの一括削除

# generate と同じ引数で destroy
bin/rails d model User
bin/rails d scaffold Post
bin/rails d migration AddEmailToUsers

Q5. マイグレーション関連で間違えた

# 実行済みの場合
bin/rails db:rollback
bin/rails d migration XXX
# ファイル消えた

# まだ実行してない場合
bin/rails d migration XXX
# でOK

Q6. scaffold のビューを変更したい

config/application.rb:

config.generators.template_engine :haml
# または :slim

または scaffold のテンプレートを上書き:

mkdir -p lib/templates/erb/scaffold
cp $(bundle show railties)/lib/rails/generators/erb/scaffold/templates/* lib/templates/erb/scaffold/
# カスタマイズ

Q7. generator 一覧の絞り込み

bin/rails g
# Rails:
#   model, controller, scaffold, ...
# 
# RSpec:(rspec-rails 入れてれば)
#   rspec:model, rspec:controller, ...

Q8. 自動で routes に追加されないようにしたい

config.generators do |g|
  g.skip_routes true
end

または個別に:

bin/rails g controller Posts --skip-routes

Q9. concerns ディレクトリの generator

Rails 標準には無し。手動作成が一般的:

mkdir -p app/models/concerns
cat > app/models/concerns/searchable.rb <<'EOF'
module Searchable
  extend ActiveSupport::Concern
  
  included do
    # ...
  end
end
EOF

Q10. PostgreSQL 拡張機能の generator

bin/rails g migration EnablePgcrypto
class EnablePgcrypto < ActiveRecord::Migration[8.0]
  def change
    enable_extension "pgcrypto"
  end
end

Q11. Devise の generator

# Gemfile に gem 'devise' 追加後
bin/rails g devise:install
bin/rails g devise User

Devise 標準の generator が利用可能。

Q12. Rails 8 で新しく追加された generator

主要な新規:

  • authentication(認証一式)
  • solid_queue:install / solid_cache:install / solid_cable:install
  • kamal:install(Kamal 2 デプロイ)
  • thruster:install(Thruster HTTP/2プロキシ)

詳細はRails 8 アップグレードガイド


参考リンク・関連資料

Rails 公式

関連 Gem

関連記事(本サイト)


まとめ

rails generate は Rails 開発の生産性を支える基幹コマンド。要点を再整理します。

  • コマンド構文: bin/rails g GENERATOR ARGS [OPTIONS]
  • 主要 generator: model / controller / scaffold / resource / migration / mailer / job / channel
  • Rails 8 新機能: authenticationsolid_queue:installsolid_cache:installsolid_cable:installkamal:install
  • オプション: --pretend(dry-run)、--no-test-framework--skip-routes
  • 取り消し: bin/rails destroy(migration実行済みなら先に rollback)
  • カスタマイズ: config.generators でデフォルト挙動を変更
  • 自作 generator: lib/generators/ 配下に作成、template + DSL
  • 使い分け:
    • 学習・プロトタイプ → scaffold
    • 本格実装 → model 個別 → 自前 controller
    • 認証 → authentication(Rails 8)or devise

これらの知識は、Rails アプリの設計・開発の初期段階・継続的な拡張すべてで活用できます。本記事をブックマークしておけば、rails generate のあらゆる場面で適切な選択ができるようになります。


本記事は2026年6月時点の情報をもとに、Ruby on Rails 7.x / 8.x での動作確認・公式ドキュメントに基づき作成しています。Rails のバージョンによって挙動が異なる場合があるため、最新の情報はRails公式ガイドもあわせてご確認ください。