1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails初学者】マイグレーションの基礎についてざっくり理解する

Last updated at Posted at 2025-12-11

はじめに

Railsのマイグレーションについて、なんとなく使っていたものの根本的な理解の部分が足りていないと感じていたので、改めて基礎から理解を深めていきたいと思います💪
同じような方や初学者の方の参考になれば嬉しいです!

migration.png

マイグレーションとは

マイグレーション(migration)とは日本語で「移行」や「移動」を意味し、Railsにおいてはデータベースのスキーマ(構造)を管理・変更するための仕組みを指します。
プログラムのコード変更を管理するために「Git」を使いますが、マイグレーションはデータベースの構造変更をバージョン管理するためのツールと考えるとイメージしやすいかと思います!

データベースが作成される仕組み

マイグレーションの理解を深めるために、Railsアプリケーションでデータベースがどのように作成されるかを確認していきます🙌

簡単なイメージ図を作成してみたので、こちらもあわせて参考にしてください!!

migration-flow.png

1.接続先の設定

Railsがデータベースという違う世界とやりとりするためには、まず「どのRDBMS(MySQLやPostgreSQLなど)を使うのか?」「ユーザー名やパスワードは何か?」を知る必要があります。
その情報をRailsに教えてあげるのがconfig/database.ymlファイルになります!

参考: Railsガイド - データベースの設定

2. データベースの作成

設定ファイルconfig/database.ymlをもとに、データベースの「箱(入れ物)」だけを作成します。
このときに使うコマンドが以下になります。

rails db:create

このコマンドを実行すると、database.ymlに記載されている情報をもとに、指定されたRDBMS上にデータベースが作成されます。ちなみに、この段階ではまだusersテーブルやarticlesテーブルなどは存在せず、空っぽのデータベースが作成されるだけです。

開発において最初のみしか実行しないコマンドなので、あまり馴染みがないかもしれません😂

3. 設計図の作成(マイグレーションファイル)

ここから開発で必要となる具体的なテーブルの構造を定義します。
例えば、usersテーブルを作成したい場合は、以下のコマンドを実行しマイグレーションファイルを作成します。

rails generate migration CreateUsers

このコマンドを実行すると、db/migrateディレクトリにタイムスタンプ付きのマイグレーションファイル(20251203123456_create_users.rbのようなファイル名)が作成されます。

このファイルの中に、usersテーブルのカラムやデータ型などの情報を記述していきます✍️

class CreateUsers < ActiveRecord::Migration[8.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.timestamps
    end
  end
end

マイグレーションファイルの具体的な書き方については、Railsガイドに詳しく記載されているので、そちらを参考にしてください😊

4. テーブルの構築

最後に、作成した設計図(マイグレーションファイル)をデータベースに適用します!

rails db:migrate

このコマンドを実行すると、

  1. Railsがdb/migrateディレクトリ内のマイグレーションファイルを順番に読み込み、定義された内容に基づいてSQL(CREATE TABLE ...など)に翻訳してデータベースにテーブルやカラムを作成・変更します。
  2. db/schema.rbファイルが更新され、現在のデータベースのスキーマ情報が反映されます。

db/schema.rbファイルとは?

  • データベースの現在の構造を一目で確認できる「スナップショット」ファイル
  • マイグレーションファイルが「変更履歴」だとすると、schema.rbは「最新の完成図
  • マイグレーションを実行するたびに自動的に更新され、データベースの構造がどのようになっているのか一目で確認できるため便利⭐️

マイグレーションの仕組み

タイムスタンプ

マイグレーションファイルを作成すると、ファイル名の先頭にタイムスタンプが自動的に付与されます。
タイムスタンプとは下記例の20251120164103部分
(例:db/migrate/20251120164103_create_comments.rb

これは「いつ作られたか」を表す日時(UTC)であり、マイグレーションIDとして扱われます。 Railsはこの数字が小さい(古い)順にファイルを読み込むことで、データベースの変更の順番を保証しています。

schema_migrationsテーブル

マイグレーションの仕組みを理解するには、schema_migrationsテーブルの存在を知る必要があります!
このテーブルはdb/schema.rbには記載されていませんが、Railsがマイグレーションの状態を管理するために内部的に使用している特別なテーブルです。

(↓実際のschema_migrationsテーブルの中身の例)

スクリーンショット 2025-12-12 0.10.25.png

rails db:migrate実行時の流れ

  1. Railsはまずschema_migrationsテーブルを確認し、すでに適用されたマイグレーションファイルのID(タイムスタンプ)を取得
  2. db/migrateディレクトリ内のマイグレーションファイルをタイムスタンプ順にチェックし、schema_migrationsテーブルに存在しないIDのファイルだけを実行
    逆にいうと、すでにschema_migrationsテーブルに存在するIDのファイルはスキップされる
  3. 実行が成功したら、そのマイグレーションIDをschema_migrationsテーブルに追加し、次回以降の実行時に再度適用されないようにする
  4. 実行後のデータベースの状態をdb/schema.rbに反映する

Q. rails db:schema:loadコマンドとは?

  • db/schema.rbファイルの内容を直接データベースに反映するコマンドです!
  • 使用タイミングとしては、プロジェクトの開発環境のセットアップや、データベースを初期化したいとき、テスト環境の準備などに利用されます。

rails db:migrateとの違い

rails db:migrate rails db:schema:load
実行内容 マイグレーションファイルを1つずつ順番に実行 schema.rbを一気に読み込んで反映
速度 遅い(特にマイグレーションが多い場合) 速い
用途 開発中の通常のマイグレーション実行 新規環境のセットアップ

注意点

  • このコマンドは、仕様として「既存のデータが入っていても、一旦テーブルを空にして作り直す(リセットする)」という挙動をするため、データが入っている状態で使用するとそのデータが消えてしまいます。
  • そのため、通常の開発中にはあまり使わず、新規セットアップやテスト環境での利用に限定するのが一般的です。(もちろん本番環境ではもってのほかです)

参考記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?