【Laravel】マイグレーションの動作について

Laravel開発してて外せないのがマイグレーション

公式の説明を見ると、「破壊的」とか「データーを失う」とか、怖いこといっぱい書いてる。

新規で開発するならそうでもないけど、既存システムの改修の場合かなりビビるので、挙動をまとめておく。

migrateコマンドで実行されるファイル

マイグレーションの実行コマンドは非常に単純。
Laravelのルートディレクトリ(artisanファイルがある場所)に移動して、

php artisan migrate

これだけ。

え?追加したマイグレーションファイルだけ実行したいんだけど大丈夫?ってなる。

不安なので、まずは上記コマンドの前に以下のコマンドを実行してみる。

php artisan migrate:status

するとこんな結果が。

+------+---------------------------------------------+
| Ran? | Migration                                   |
+------+---------------------------------------------+
| Y    | 2019_01_15_110240_create_test_table         |
| Y    | 2019_01_16_110309_create_sample_table       |
| N    | 2019_01_17_092545_add_new_column            |
+------+---------------------------------------------+

Ran?の列に、「Y」と「N」が表示されている。

どうやらマイグレーションが実行されているファイルかどうかを表しているようだ。

次に気になるのは、どこでこの情報を持ってるのか?というところ。

マイグレーション情報を持つテーブル

マイグレーション情報を持つテーブルは以下で設定されている。

./config/database.php
:
migrations => '[マイグレーション情報テーブル]',
:

migrateコマンドを実行してみる

statusの結果が上記の状態で、migrateコマンドを実行してみると、Nとなっているファイルだけが実行された。

+------+---------------------------------------------+
| Ran? | Migration                                   |
+------+---------------------------------------------+
| Y    | 2019_01_15_110240_create_test_table         |
| Y    | 2019_01_16_110309_create_sample_table       |
| Y    | 2019_01_17_092545_add_new_column            |
+------+---------------------------------------------+

なるほど、つまりmigrateコマンドは、実行されていないマイグレーションファイルのみ実行されるっぽい。

migrate:rollbackを実行してみる

マイグレーションにはロールバック機能もあるようで、ロールバックを実行してみる。

php artisan migrate:rollback
+------+---------------------------------------------+
| Ran? | Migration                                   |
+------+---------------------------------------------+
| Y    | 2019_01_15_110240_create_test_table         |
| Y    | 2019_01_16_110309_create_sample_table       |
| N    | 2019_01_17_092545_add_new_column            |
+------+---------------------------------------------+

さいごに実行したファイルのみ、Nに戻っている。
こういう動きをするのか。

まとめ

動作が分かればマイグレーションは怖くない。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のSEを経て、独立。 ここ数年はWEB以外の仕事をしていたため、割と本気で勉強中。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください