【Laravel10】Schema::create と Schema::tableの使い方について



- 1. Schema::createとSchema::table
- 2. Schema::createとは?
- 2.1. 基本構文
- 2.2. 例: ユーザー情報を格納するテーブルを作成
- 3. Schema::tableとは
- 3.1. 概要
- 3.2. 基本構文
- 3.3. 例: users テーブルに新しいカラムを追加
- 4. 両者の違い
- 5. マイグレーションの操作例
- 5.1. 複数のカラムを一括で追加(Schema::create)
- 5.2. 複数のカラムを追加・削除(Schema::table)
- 6. Schemaクラスのその他のメソッド
- 6.1. テーブルの削除
- 6.2. テーブルが存在するか確認
- 6.3. カラムの存在を確認
1. Schema::createとSchema::table
Schema::create
と Schema::table
は、Laravel のマイグレーション機能で使用されるメソッドです。それぞれ、データベース内のテーブルを新しく作成したり、既存のテーブルを変更したりするために使われます。この記事では、Laravel10を利用して、両者の違いや基本的な使い方についてわかりやすく解説します。
2. Schema::createとは?
Schema::create
は、新しいテーブルを作成するために使用します。このメソッドは、テーブルの構造(カラムやインデックスなど)を指定する関数を受け取ります。
2.1. 基本構文
Schema::create('テーブル名', function (Blueprint $table) {
$table->カラム型('カラム名');
});

2.2. 例: ユーザー情報を格納するテーブルを作成
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('users', function (Blueprint $table) {
$table->id(); // 主キー
$table->string('name'); // ユーザー名
$table->string('email')->unique(); // メールアドレス(ユニーク制約)
$table->timestamps(); // created_at と updated_at
});
}
public function down()
{
Schema::dropIfExists('users'); // テーブルを削除
}
}
ポイント:
up
メソッドでテーブルを作成し、down
メソッドでそれを削除します。- Blueprint オブジェクト
$table
を使って、カラムやインデックスなどを定義します。
3. Schema::tableとは

3.1. 概要
Schema::table
は、既存のテーブルを変更するために使用します。新しいカラムを追加したり、既存のカラムを修正したりする際に便利です。
3.2. 基本構文
Schema::table('テーブル名', function (Blueprint $table) {
$table->カラム型('カラム名');
});
3.3. 例: users テーブルに新しいカラムを追加
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->text('profile')->nullable(); // プロフィール情報を格納
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('profile'); // カラムを削除
});
}
}
ポイント:
- 新しいカラムを追加する場合や、既存のカラムを削除または変更する場合に使います。
- カラムの変更(型の変更など)は
doctrine/dbal
ライブラリのインストールが必要な場合があります。
4. 両者の違い
項目 | Schema::create | Schema::table |
---|---|---|
目的 | 新しいテーブルの作成 | 既存のテーブルの変更 |
使用タイミング | 新しいデータモデルを追加するとき | 既存のデータ構造を修正するとき |
主な用途 | テーブル全体の構造を定義 | 特定のカラムやインデックスを操作 |

5. マイグレーションの操作例
5.1. 複数のカラムを一括で追加(Schema::create)
新しいテーブルを作成し、そのテーブルに複数のカラムを一度に追加するには、Schema::create
メソッドを使用します。以下の例では、products
というテーブルを作成し、いくつかのカラムを定義しています。
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->decimal('price', 8, 2);
$table->integer('stock');
$table->timestamps();
});
5.2. 複数のカラムを追加・削除(Schema::table)
既存のテーブルに新しいカラムを追加したり、不要なカラムを削除したりするには、Schema::table
メソッドを使用します。以下の例では、products
テーブルに新しいカラムを追加し、不要なカラムを削除しています。
Schema::table('products', function (Blueprint $table) {
$table->boolean('is_active')->default(true); // 新規カラムを追加
$table->dropColumn('stock'); // 不要なカラムを削除
});
6. Schemaクラスのその他のメソッド
6.1. テーブルの削除
不要になったテーブルを削除したい場合は、Schema::dropIfExists
メソッドを使用します。このメソッドは、指定したテーブルが存在する場合のみ削除を実行します。
Schema::dropIfExists('テーブル名');
6.2. テーブルが存在するか確認
特定のテーブルがデータベース内に存在するかを確認するには、Schema::hasTable
メソッドを使用します。以下はその例です。
if (Schema::hasTable('users')) {
// テーブルが存在する場合の処理
}
例えば、usersテーブルを削除したい場合は、以下のように書きます。
Schema::dropIfExists('users');
6.3. カラムの存在を確認
特定のテーブル内に指定したカラムが存在するかを確認する場合は、Schema::hasColumn
メソッドを使用します。以下はその例です。
if (Schema::hasColumn('users', 'email')) {
// emailカラムが存在する場合の処理
}