はじめに
Ruby on Rails でモデルからテーブルが作られる流れを学んだとき、つまずいたポイントがいくつかありました。
同じように悩む初学者の方の助けになればと思い、学んだ内容をまとめて記事にしてみました。できるだけシンプルに、流れがつかめるような構成を意識しています。
🎯 本記事の目的
- モデルを作ってからテーブル作成されるまでの流れをざっと理解する。
- マイグレーションファイルの役割と流れを掴む。
- マイグレーションの
down、up状態を知る。 -
schema.rbから何がわかるかを知る。
✅ 結論(ざっくり全体像)
下記の順序に沿ってモデルがつくられ、そしてデータベーステーブルが作成されます。
-
rails generate model名でモデルとマイグレーションファイルが生成される - マイグレーションファイルはまだ「down」の状態
-
rails db:migrateを実行するとマイグレーションが「up」される - テーブルが作成され、
db/schema.rbが更新される
以下詳しく解説します。
お願い
※これから下記ステップで実践するコマンド等は、各自Ruby on Railsの動作する環境を用意して実行してください。今回の解説記事内では環境構築の説明は行いません。
🛠️ ステップ① モデル作成
下記コマンドを実行してモデルを作成してください。
モデル作成時点ではまだDBのテーブルは作成されていません。
また、モデル自体はRubyのクラスであって、DBのテーブルそのものではありません。
rails generate model Article title:string body:text
上記コマンドの補足
-
Article(モデル名を指定する。今回はArticleと指定する。)- モデル(class)名
- モデル名は単数形
-
title:string- 文字列型のtitleカラム
-
body:text- テキスト型のbodyというカラム
上記で実行したコマンドによって次の2つのファイルが作られます。
-
app/models/article.rb:モデル(class)ファイル -
db/migrate/xxxxxxxxxxxxxx_create_articles.rb:マイグレーションファイル
マイグレーションファイルの補足
マイグレーションファイル内にはテーブルに関する様々な記述がされています。
マイグレーションファイル実行時( rails db:migrate )に、ファイル内に記述されていることに沿ってテーブルが作成されたり、カラムが操作されます。
※rails db:migrateするまではテーブルはまだ存在していません。
マイグレーションファイルはテーブル作成前の設計図として扱われます。
db/migrate/xxxxxxxxxxxxxx_create_articles.rbのxxxxxxxxxxxxxxの補足
xxxxxxxxxxxxxxにはモデルが作成された日時が表示されます。
この日時はマイグレーションのバージョン管理に利用されます。
実際のファイルの中身は下記のようになっているかと思います。
#モデル
class Article < ApplicationRecord
end
#マイグレーションファイル
class CreateArticles < ActiveRecord::Migration[7.0]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
🔼 ステップ② マイグレーション実行(down → up)
rails db:migrateを実行する前に下記コマンドを実行してください。
rails db:migrate:status
rails db:migrate:statusコマンドは、マイグレーションファイルが実際に実行されたかどうかの状態を確認するコマンドになります。
上記コマンド(rails db:migrate:status)を実行すると、マイグレーションが実行されていなければ、下記のように Status が down になっているかと思います。
この Status が down という状態は、そのマイグレーションがまだ実行されていないことを意味しています。
つまり、そのマイグレーションファイルがまだデータベースに反映されていないという状態を表しています。
Status Migration ID Migration Name
--------------------------------------------------
down 20250727135706 Create articles
上記のマイグレーションが実行されていないとStatus が downになるということを確認したら、いよいよ下記の rails db:migrate コマンドを入力してマイグレーションファイルを実行してください。
rails db:migrate
上記 rails db:migrate コマンドを入力したら、下記rails db:migrate:statusコマンドを実行してマイグレーションファイルがデータベースに反映されたかどうか確認してください。
rails db:migrate:status
正常にマイグレーションが実行されていたら、下記のように Statusが upの状態になっているかと思います。このような状態になっていれば、マイグレーションファイルが正しく実行されたということになり、articlesテーブルが作成(create)されたということになります。
Status Migration ID Migration Name
--------------------------------------------------
up 20250727135706 Create articles
🗂️ ステップ③ schema.rb が作られる
マイグレーションが実行されると(rails db:migrate)、Railsは db/schema.rb を自動生成・更新します。
中身は現在のDB構造のスナップショットになります。
このファイルを見れば、現在どんなテーブル、カラムがあるのか確認することができます。
ActiveRecord::Schema[7.0].define(version: 2025_07_27_135706) do
create_table "articles", force: :cascade do |t|
t.string "title"
t.text "body"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
実際に作成したarticlesテーブルが存在しているかどうかをrails consoleを使用して確認してみましょう。下記コマンドを実行してください。
rails consoleとは
rails console は、Railsアプリの内部データやロジックをリアルタイムで操作・確認できる対話型Rails実行環境になります。
rails console
上記コマンドで対話モードに入ったら下記メソッドを入力してください。
Article.table_exists?
Article.table_exists?を入力して下記のようにtrueが返されたら、無事articlesテーブルが作成されたということになります。
=> true
また、下記メソッドを入力するとarticlesテーブルのカラムを確認することができます。
Article.attribute_names
下記がarticlesデーブルのカラム一覧になります。
=> ["id", "title", "body", "created_at", "updated_at"]
おわりに
今回は、Railsでモデルを作ってテーブルができるまでの流れを自分なりにまとめてみました。初めてRailsに触れる方でも「なんとなくわかったかも」と思ってもらえたら嬉しいです。
もし内容に間違いがあったり、わかりにくい部分があれば、ぜひ遠慮なく教えてください!
学びながら書いているので、フィードバックもらえるととてもありがたいです!
参考記事
https://railsguides.jp/active_record_migrations.html
https://qiita.com/Arashi-K/items/4e26fd367847b8bbed18
https://www.divx.co.jp/media/164