これを見ながらやっていきます。環境はWindows11, PowerShellです。 まずは、上記の「Composerの依存パッケージ」に書いてあるものを全部composer.jsonに反映して、composer updateしました。
Windowsだと動かない、laravel/horizon等をcomposer require laravel/horizon --ignore-platform-reqs
でインストールしている関係上、composer update --ignore-platform-reqs
としないとエラーになりました。また、kitloong/laravel-migrations-generator
がLaravel11に対応していないというエラーが出たので削除しました。
あとは、Cashier, Sanctumを使っているので、下記を実行する必要があるらしい。マイグレーションファイルをpublishしないとマイグレーション実行ができなくなったということかな。
php artisan vendor:publish --tag=cashier-migrations php artisan vendor:publish --tag=sanctum-migrations
Sanctumについては、下記も対応が必要らしい。
config/sanctum.php設定ファイルで、authenticate_session, encrypt_cookies, validate_csrf_tokenミドルウェアへの参照を以下のように更新してください。
'middleware' => [ 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class, 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class, 'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class, ],
Laravel11では、新しいデフォルトのアプリケーション構造が導入され、デフォルトのファイルが少なくなっています。つまり、新しいLaravelアプリケーションには、サービスプロバイダ、ミドルウェア、設定ファイルの数が少なくなっています。 しかし、Laravel10アプリケーションをLaravel11にアップグレードするときに、アプリケーション構造の移行を試みることはお勧めしません。Laravel11はLaravel10のアプリケーション構造もサポートするように注意深く調整してあります。
と書いてあるので、あんまりファイルとかディレクトリ構成をいじるのはやめよう。
マイグレーションのこれは結構見直しが必要になるのかもと思った。
Laravel10では、このマイグレーションはカラムのunsigned、default、comment属性を保持していました。しかし、Laravel11からマイグレーションにはカラムに以前定義していた属性もすべて含める必要があります。含めなければ、それらを削除します。
changeメソッドはカラムのインデックスを変更しません。そのため、カラムを変更する際には、インデックス修飾子を使って明示的にインデックスを追加したり削除したりしてください。
でも、下記にあるように、一旦マイグレーションを圧縮すればいいのか。
既存カラムの属性を保持するために、アプリケーション内の既存の全「変更(change)」マイグレーションを更新したくない場合は、単純にマイグレーションを圧縮してください。
php artisan schema:dump
上記を実行して、手動で既存のマイグレーションファイルを全部削除しました。 ローカル環境で、下記を実行して、きちんと動作するのを確認しました。 これは、DBの中身を全部消して、最初からマイグレーション実行するコマンドです。
> php artisan migrate:fresh
Laravel Cashier (Stripe)のアップグレード対応
Cashier(Stripe)は下記にある対応が必要でした。
Stripe Webhookの再作成
Cashierが使うStripe APIバージョンが変わったので、再作成する必要があるようです。
php artisan cashier:webhook --disabled
上記は、.envにあるURLを元にwebhookを作成します。 --disable
をつけることで、無効な状態で作成されます。
イベントの送信先は、https://example.com/stripe/webhookとなります。
私は本番環境のサーバで上記コマンドを実行して、本番用のwebhookを作成しました。
環境変数のSTRIPE_WEBHOOK_SECRET
に新しいwebhookの署名シークレットを登録して、新しいwebhookを有効にし、古い方を無効にする(削除する)ことで、新しいwebhookに切り替わります。
テーブルの一部変更
下記が変わりましたので、これ用のマイグレーションファイルを作成し、 php artisan migrate
を実行します。
Schema::table('subscriptions', function (Blueprint $table) {
$table->renameColumn('name', 'type');
});