Laravelでマイグレーションを使ってテーブルを作成する方法
生徒
「Laravelでデータベースのテーブルを作るにはどうすればいいですか?」
先生
「Laravelでは“マイグレーション”という仕組みを使って、テーブルを簡単に作成・管理することができますよ。」
生徒
「マイグレーションって何ですか?難しそうです……」
先生
「心配いりません。ゆっくりひとつずつ見ていきましょう。例え話を交えて解説しますね。」
1. マイグレーションとは?
マイグレーション(Migration)とは、Laravelでデータベースの構造(テーブルやカラムなど)をコードで管理する仕組みです。たとえば、Excelで表を作るように、データベースでも「名前」「年齢」「メールアドレス」などの列(カラム)を持つ表(テーブル)を作ります。これをLaravelでは、PHPファイルとして記述することで再利用や修正がしやすくなるのです。
マイグレーションを使えば、「いつ・誰が・どんなテーブルを作ったか」もコードで残るため、作業のミスが減ります。
2. マイグレーションファイルを作る
まずはマイグレーションファイルを作ります。Laravelでは、コマンドでファイルを作成します。
パソコンの「コマンドプロンプト」や「ターミナル」と呼ばれる黒い画面に、以下のように入力してください。
php artisan make:migration create_users_table
このコマンドは、「users」という名前のテーブルを作成するためのマイグレーションファイルを生成するものです。
3. マイグレーションファイルの構成
作成されたファイルは、database/migrationsフォルダの中に保存されています。ファイル名の先頭には日時が自動で付いています。
ファイルを開くと、up()メソッドとdown()メソッドがあります。
- upメソッド:テーブルを作成したり、カラムを追加したりします。
- downメソッド:逆にテーブルを削除する処理を記述します。
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
この例では、「users」テーブルに「id」「name」「email」「created_at」「updated_at」のカラムを作成しています。
4. マイグレーションを実行する
マイグレーションファイルを作成しただけでは、データベースにまだテーブルは作られていません。実際にデータベースに反映させるには、次のコマンドを実行します。
php artisan migrate
このコマンドを実行すると、マイグレーションファイルに書かれた内容がデータベースに反映され、テーブルが作成されます。
5. テーブルの修正をしたいときは?
たとえば、「users」テーブルに「年齢」カラムを追加したいときは、新しいマイグレーションファイルを作成して、そこに変更内容を記述します。
php artisan make:migration add_age_to_users_table
ファイルの中に、以下のようにカラムの追加処理を記述します。
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age');
});
}
そして再度、php artisan migrateを実行すると、カラムが追加されます。
6. マイグレーションを取り消したいとき
マイグレーションを取り消すには、次のコマンドを使います。
php artisan migrate:rollback
このコマンドを実行すると、downメソッドに書かれた処理が実行されて、テーブルが削除されます。誤って作成してしまった場合などに便利です。
まとめ
Laravelのマイグレーションは、データベースのテーブルやカラムをコードで管理できるとても便利な仕組みであり、学べば学ぶほどその価値が実感できる技術です。マイグレーションを活用することで、従来のように直接データベースソフトを操作してテーブルを作り直したり、設定を手動で変更したりする必要がなくなり、開発作業が整然として再現性の高いものになります。また、複数人で同じプロジェクトを進める場合にも、テーブル構造をコードで共有できるため、チーム全体が同じ環境で作業でき、環境差による不具合が大幅に減少します。誰が、いつ、どのような変更を行ったのか履歴として追える点も魅力で、プロジェクトが大規模になるほど威力を発揮します。
マイグレーションの基本となるup()とdown()メソッドは、とても分かりやすい役割分担を持っています。up()には「テーブルを作る」「カラムを追加する」といった追加系の処理を書き、down()には「テーブルを消す」「カラムを消す」といった取り消し処理を書きます。この仕組みにより、誤った変更を行ってしまった場合でも、マイグレーションを取り消すだけで簡単に元の状態に戻すことができます。また、テーブルの修正を行いたい時は新しいマイグレーションファイルを作成するという明確なルールがあるため、無秩序な設定変更が起こりにくく、プロジェクトの品質が保たれます。
実際の作業手順としては、まずコマンドでマイグレーションファイルを生成し、ファイル内にテーブルの構造を記述します。そしてphp artisan migrateコマンドを実行することで、データベースにその内容が反映されます。テーブルの中にどんなカラムを作るのか、どんな制約をつけるのかはすべてコードに記述できるため、読み返すだけでデータ構造の全体像が把握できるようになります。さらに、Laravelが提供するBlueprintクラスの豊富なメソッドを使えば、文字列・数値・日時・ユニーク制約・外部キー制約など、あらゆるカラムの設定を簡潔に書くことができます。
また、マイグレーションは単にテーブルを作るだけではなく、アプリケーションの構造を見直す際にも役立ちます。たとえば、ユーザー管理・商品管理・予約システムなど、さまざまなデータ構造が登場するアプリケーションでは、途中でカラムを追加したくなることがよくあります。そのたびに新しいマイグレーションを作成し、php artisan migrateで反映させればよく、既存のデータはそのまま保たれます。「年齢を追加したい」「住所を分割したい」「ステータスのカラムが必要になった」などの仕様変更にも柔軟に対応できる点は、マイグレーションの大きな強みです。
大規模開発や長期間の運用でも安心して利用できるよう設計されているLaravelのマイグレーションは、習得することでプロジェクト全体の品質向上につながり、より効率的で管理しやすいアプリケーション開発を実現できます。以下には、基本的なマイグレーション構造を振り返りとしてまとめたサンプルコードを掲載しますので、学んだ内容と照らし合わせながら復習に役立ててください。
サンプルプログラム(振り返り用)
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('books', function (Blueprint $table) {
$table->id(); // 主キー
$table->string('title'); // 本のタイトル
$table->string('author'); // 著者名
$table->integer('price'); // 本の価格
$table->timestamps(); // created_at、updated_at
});
}
public function down()
{
Schema::dropIfExists('books');
}
};
この例では「books」というテーブルを作成し、本の情報を管理できる構造を定義しています。マイグレーションによってテーブル設計をコード化することで、後から見返してもどんな構造だったのかすぐに理解でき、修正もしやすくなります。Laravelのマイグレーションは、開発をスムーズにし、データベース管理の負担を大幅に軽減してくれる非常に頼もしい仕組みです。
生徒
「先生、マイグレーションって最初は複雑そうに感じたけれど、コードでテーブルを管理できるなんてすごく便利ですね!」
先生
「そうですね。マイグレーションを使えばデータベースの操作が統一されて、どんな環境でも同じ状態を作れるようになります。開発効率も大きく上がりますよ。」
生徒
「特にphp artisan migrateでテーブルが一気に作られるところが感動しました!修正したくなったときに別ファイルで追加できるのも便利です。」
先生
「その通りです。テーブルの追加や修正もマイグレーションで行えば履歴として残るので、変更内容が把握しやすくなります。」
生徒
「データベースの管理がこんなに整理されるなんて知らなかったです!次は外部キーやインデックスの追加にも挑戦してみたいです!」
先生
「いいですね。Laravelのマイグレーション機能はさらに奥が深いので、ぜひ応用的な部分も学んでみてください。」