0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マイグレーションシステムの仕組みについて

Posted at

はじめに

Recursionでマイグレーションシステムの仕組みを理解したので、復習用にメモとして残しておく。

1. 管理構成

マイグレーションは以下の2つで管理されている。

  • マイグレーションフォルダ

    実行対象のマイグレーションファイル(PHPクラス)を保存する場所。ファイル名には日付を含めて昇順で並ぶようにする。

  • マイグレーションテーブル

    データベース内で、実行済みのマイグレーションファイルのファイル名を記録するテーブル。

この2つを比較することで、どのマイグレーションが未実行なのかを判断する。


2. migrate の流れ

  1. migrations テーブルから「最後に実行されたマイグレーションファイル名」を取得する。
  2. フォルダ内のすべてのマイグレーションファイルを取得し、ファイル名の昇順にソートする。
  3. テーブルに記録されたファイルが、フォルダ内の何番目のファイルなのか(インデックス)を調べる。
  4. そのインデックスの次から最後までのファイルを、順に up() 実行していく。
  5. 実行が終わるたびに、migrations テーブルにそのファイル名を INSERT して記録する。

※ テーブルに実行履歴が一切なければ、最初のファイルからすべて実行される。


3. rollback の流れ

  1. migrations テーブルから「最後に実行されたマイグレーションファイル名」を取得する。
  2. フォルダ内のマイグレーションファイル一覧を取得し、昇順にソートする。
  3. 該当ファイルが何番目のファイルか(インデックス)を調べる。
  4. そのインデックスから逆方向(デクリメント)に down() を実行していく。
  5. 実行が終わるたびに、migrations テーブルからそのファイル名を DELETE して履歴を消す。

※ rollback の実行回数は引数で指定できる(デフォルトは 1 回)。


4. 命名ルールと注意点

  • マイグレーションファイル名には日付(またはソート可能な接頭辞)を含める。
  • ファイルはフォルダ内で昇順にソートされて実行される。
  • クラス名はファイル名を元に動的に生成されるため、命名規則に従う必要がある。
  • up() / down() メソッドの中で、スキーマ変更を行う SQL クエリを記述する。

5. この設計の利点

  • 実行状態を DB 側で正確に管理できる(ファイルの存在だけでは判断しない)。
  • 実行・巻き戻しがコマンド1つで可能。
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?