==== # Laravelデータベースマイグレーション技術 ## スキーマ変更時のダウンタイム回避テクニック Laravelの`after()`メソッドを使用した段階的なカラム追加は、本番環境でよく発生する問題を解決します。 ### 一般的な問題 本番環境で新しいカラムを追加する際、既存のレコードに対してNOT NULL制約を設定すると、データベースエラーが発生することがあります。 ### 解決方法 ```php // マイグレーション 1: まずNULL許容で追加 public function up() { Schema::table('users', function (Blueprint $table) { $table->string('phone_number') ->nullable() ->after('email'); }); } // マイグレーション 2: デフォルト値を設定 public function up() { DB::table('users') ->whereNull('phone_number') ->update(['phone_number' => '未設定']); } // マイグレーション 3: NOT NULL制約を追加 public function up() { Schema::table('users', function (Blueprint $table) { $table->string('phone_number') ->nullable(false) ->change(); }); } ``` ### メリット - **ダウンタイムなし**: アプリケーションを停止せずにスキーマを変更できます - **データ整合性**: 既存データへの影響を最小限に抑えます - **ロールバック可能**: 各段階で問題が発生した場合、安全に戻せます この技術により、大規模なデータベースでも安全にスキーマ変更が可能になります。