PHP 7.4環境のLaravel 8から、PHP 8.2環境のLaravel 11へのアップグレード手順
Laravelを旧バージョンから新バージョンにアップグレードすることにより、アプリケーションのパフォーマンス向上やセキュリティ強化、さらには新機能の活用など、多くの利点を享受できます。
本記事では、PHP 7.4環境で稼働しているLaravel 8から、PHP 8.2環境のLaravel 11へのアップグレード手順について、順を追ってご説明いたします。
アップグレードにより得られる主なメリット
- パフォーマンスの向上
PHP 8.2では、JIT(Just-In-Time)コンパイラの導入により、PHPコードの実行速度が大幅に改善されています。 - セキュリティの強化
新バージョンのPHPおよびLaravelには、セキュリティパッチや脆弱性対策のための機能が多数追加されています。 - 新機能の導入
Laravel 11およびPHP 8.2では、コードの保守性や効率性を向上させる機能が豊富に取り入れられています。 - ITコミュニティからのサポート
最新バージョンを使用することで、情報の入手が容易になり、コミュニティによる支援も受けやすくなります。
① システム要件の確認
アップグレードを実施する前に、以下の点をご確認ください。
- Laravelバージョン:現在のバージョンが8.xであること(確認コマンド:
php artisan --version
) - PHPバージョン:7.4系であること(確認コマンド:
php -v
) - サードパーティ製ライブラリ:一部のパッケージがPHP 8.2と互換性がない可能性があります。
composer.json
に記載された各ライブラリのドキュメントをご確認ください。
現在の開発環境:
- PHP:7.4.x
- Laravel:8.x
- Composer:最新版
- 開発機:MacBook M1
- 環境構築:Homebrew+Laravel Valet を使用し、PHPを管理
②PHP 8.2のインストール
以下のコマンドを実行して、PHP 8.2をインストールしてください。
brew tap shivammathur/php
brew install php@8.2
valet use php@8.2
③Laravelコアのアップデート手順
composer.json
の内容を以下のように変更します。
json
"require": {
"php": "^8.2",
"laravel/framework": "^11.0"
}"require": {
"php": "^8.2",
"laravel/framework": "^11.0"
}
- 以下のファイルとフォルダを削除します。
bash
rm -rf vendor composer.lock
- 依存パッケージを再インストールします。
bash
composer update
※ 互換性のないパッケージがある場合は、Composerがエラーを出力します。その際は、対象パッケージの最新版を探すか、代替のパッケージの利用をご検討ください。
ライブラリの互換性対応例
以下のパッケージで互換性の問題が発生しました:
bensampo/laravel-enum
バージョン 3.3spatie/laravel-medialibrary
バージョン 7.0overtrue/laravel-follow
対応として、以下のようにcomposer.json
を修正しました:
json
"bensampo/laravel-enum": "^4.2.0",
"overtrue/laravel-follow": "^5.0",
"spatie/laravel-medialibrary": "^11.0""bensampo/laravel-enum": "^4.2.0",
"overtrue/laravel-follow": "^5.0",
"spatie/laravel-medialibrary": "^11.0"
その後、再度以下のコマンドを実行します。
bash
composer update
④Rectorによるコードの互換性チェックと修正
まず、Rectorを開発環境に導入します。
bash
composer require rector/rector --dev
composer require rector/rector --dev
次に、以下のコマンドで互換性のないコードを確認します(この段階では変更は加えません)。
bash
php vendor/bin/rector process --dry-run
問題がなければ、以下のコマンドで実際のコード修正を適用します。
bash
php vendor/bin/rector process
⑤構成ファイルおよびディレクトリ構成の更新
Laravel 11では、プロジェクトの構成にいくつか変更が加えられています。
app/Console/Kernel.php の変更点:
scheduleTimezone()
メソッドはLaravel 11で削除されました。使用している場合は削除してください。schedule()
メソッドでは、use Illuminate\Console\Scheduling\Schedule;
の記述は不要です。- カスタムスケジュールロジックを記述している場合は、Laravel 11に対応するよう調整が必要です。
変更前の例:
php
use Illuminate\Console\Scheduling\Schedule;
protected function schedule(Schedule $schedule)
{
$schedule->command('your:command')->daily();
}
protected function scheduleTimezone()
{
return 'UTC';
}
use Illuminate\Console\Scheduling\Schedule;
protected function schedule(Schedule $schedule)
{
$schedule->command('your:command')->daily();
}
protected function scheduleTimezone()
{
return 'UTC';
}
変更後の例:
php
protected function schedule($schedule)
{
$schedule->command('your:command')->daily();protected function schedule($schedule)
{
$schedule->command('your:command')->daily();
config/app.php の確認
Laravel 11のデフォルト設定と比較し、独自の変更点や不足している設定がないか確認してください。
ミドルウェアとサービスプロバイダの確認
app/Http/Kernel.php
app/Providers/
配下の各Service Provider
一部のミドルウェアやプロバイダは非推奨または未対応の可能性があるため、再確認をおすすめします。
⑥ルート構成の見直し
Laravel 11では、routes/api.php
はデフォルトで使用されなくなっています。APIルートは routes/web.php
へ移動するなど、プロジェクトに合った構成に整理してください。
⑦マイグレーションとデータベース更新
データベースに変更がある場合、以下のコマンドでマイグレーションを適用してください。
bash
php artisan migrate
⑧アプリケーションの動作確認
アップグレードが完了したら、アプリケーションが正常に動作するか確認します。
bash
php artisan serve
php artisan serve
エラーが発生した場合は、storage/logs
ディレクトリ内のログファイルをご確認ください。
注意事項
ステップ⑤および⑥の作業を省略しても、アプリケーション自体は動作する場合があります。しかし、以下の理由から実施を強く推奨いたします:
- タイムゾーンなどの設定を適切に行うため
- Laravel 11の標準構成に従い、保守性を向上させるため
- 新機能を最大限に活用するため
- 将来的なアップグレード(Laravel 12、13など)をスムーズに行うため
- 潜在的な不具合の予防のため
まとめ
Laravel 8からLaravel 11へのアップグレードは、作業量がある程度発生しますが、パフォーマンスやセキュリティ、新機能といった面で多くの恩恵があります。手順ごとに変更点を丁寧に確認し、必ず十分なテストを行ったうえで本番環境に適用してください。
不明点がある場合は、Laravel公式ドキュメントの参照をおすすめします。