この記事では、Laravelのマイグレーションファイルの作成方法、基本的な使い方、およびよく使われるコマンドを記載していきます。筆者自身が時々コマンドなど忘れる事があるので、自身の忘備録がてら誰かのお役に立てればと思います。
マイグレーションとは?
Laravelにおけるマイグレーションとは、データベースを管理するためのものになります。マイグレーションを使用することで、開発中のデータベースの構造変更をコードベースで追跡し、異なる開発環境間でのデータベースの状態を一致させることができます。また、過去のある時点のデータベース構造に簡単に戻ることも可能なため、アプリケーションのバージョン管理が容易になります。
マイグレーションファイルの作成
マイグレーションファイルは、データベースのテーブルを作成、または変更するための指示が書かれたPHPファイルです。新しいマイグレーションファイルを作成するには、以下のArtisanコマンドを使用します。
php artisan make:migration create_テーブル名_table
このコマンドは、database/migrations
ディレクトリに新しいマイグレーションファイルを作成します。ファイル名にはタイムスタンプが付与され、実行順序を保証します。
マイグレーションファイルの構造
マイグレーションファイルは主にup()
と down()
のふたつのメソッドを含んでいます。
up()
メソッドはテーブルの作成やカラムの追加など、データベースに対する変更を定義します。down()
メソッドは up()
メソッドで行った変更を元に戻すための処理を定義します。
public function up()
{
Schema::create('テーブル名', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
上記でも問題はないのですが、すでにテーブルが存在する場合、再度マイグレーションが流れるとエラーになります。
public function up()
{
if (!Schema::hasTable('テーブル名')) { // ここで存在チェック
Schema::create('テーブル名', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
}
このようにすることでテーブルが既に存在している場合には新たにテーブルを作成しようとすることなく、エラーを回避できます。また、マイグレーションを再実行したい場合でも、既に存在するテーブルに影響を与えずに他のマイグレーション処理を安全に実行することができるようになるのでつけておいたほうがいいかもですね。
マイグレーションの実行とロールバック
マイグレーションを実行するには、以下のArtisanコマンドを実行。
php artisan migrate
このコマンドを実行すると、未実行のマイグレーションがデータベースに適用されます。
プロジェクトによってはすべて実行されるとまずい場合もあるので、その際は個別に実行することもできます。
php artisan migrate --path=/database/migrations/マイグレーションファイル名.php
もしマイグレーションをひとつ前の状態に戻したい場合は、以下のコマンドを使用します。
php artisan migrate:rollback
マイグレーションのロールバックも特定のマイグレーションファイルに対して行いたい場合は以下
php artisan migrate:rollback --path=/database/migrations/マイグレーションファイル名.php
最後に全てのマイグレーションをロールバックしたい場合や、特定のマイグレーションまで戻したい場合は、オプションを指定して実行することができます
このコマンドは最後のマイグレーションを一つだけロールバックします。--step
オプションで指定した数だけマイグレーションを戻すことが可能です。
php artisan migrate:rollback --step=1
マイグレーションの状態確認
現在のマイグレーションの状態を確認するには、以下のコマンドを使用します。
php artisan migrate:status
このコマンドはすべてのマイグレーションのリストと、それぞれがデータベースに適用されたかどうかの状態を表示します。これにより、どのマイグレーションが実行されていないのか、または問題が発生しているのかを簡単に把握することができます。
マイグレーションのリフレッシュとリセット
開発中に何度もマイグレーションをやり直したい場合は、migrate:refresh
または migrate:reset
コマンドが便利です。
php artisan migrate:refresh
このコマンドはすべてのマイグレーションをロールバックし、再度実行します。これにより、データベースをクリーンな状態にリセットしてから、すべてのマイグレーションを再適用することができます。
やぶはこれを知らず、migrate
とrollback
でやっていたよ…。
php artisan migrate:reset
migrate:reset
コマンドはすべてのマイグレーションをロールバックしますが、再適用は行いません。データベースを完全にクリーンな状態に戻すことができるため、新しいスタートが必要なときに有効です。
まとめ
Laravelのマイグレーション機能は、データベースの管理を非常に簡単に行うことができるツールです。開発の初期段階からマイグレーションを利用することで、データベースの変更がプロジェクトの全体的な進行に与える影響を最小限に抑えることが可能になります。Laravelでのアプリケーション開発をこれから始める方々とコマンド忘れがちな筆者にとって、この記事が役立つと嬉しいです。
コメント