はじめに
こんにちは!今回は、業務システムの PHP 7.4 → 8.2、Laravel 6.x → 9.x のバージョンアップを 10 日間で 完了させた話を共有します。
業務システムのバージョンアップといえば 「工数がかかる」「影響範囲が広い」「テストが大変」 というイメージですが、ChatGPT の活用、シェルスクリプトの自動化、効率的なテスト によって、短期間での移行を実現しました! 🎉
1. バージョンアップの目的
- PHP 7.4 の EOL(サポート終了)対応
- Laravel 6.x の LTS 期間終了に伴う移行
- 最新のセキュリティ対策とパフォーマンス改善
- 開発効率の向上(PHP 8.2 の新機能活用、型安全性の向上)
2. 移行プロセス(10 日間のスケジュール)
🗓 1~2日目:移行計画の策定
-
影響範囲を洗い出し
- コードベースの調査
- 使用しているライブラリのバージョン確認(
composer outdated
) - PHP 8.2 / Laravel 9.x で非推奨・変更された機能のリストアップ
-
移行方針を決定
- モデル・ファクトリ・テストコードの変換をスクリプト化
- Laravel 9.x で推奨される書き方に統一
- 影響範囲が大きい部分は段階的に適用
- ChatGPT を活用し、Laravel 9.x の新しい仕様に即した変換ルールを整理
🗓 3~5日目:コード変換
🛠 ChatGPT を活用しながら、シェルスクリプトで変換作業を効率化!
✅ database/factories
の変換
Laravel 6.x のファクトリ(クラスベースでない)を Laravel 9.x の新しいファクトリに変換。
- database/factories の convert 用のシェルスクリプトの実装と実行
✅ ModelClass
の変換
-
fillables
やcasts
の整理 hasOne
に複数の外部キー制約を適用-
awobaz/compoships
の導入により 複合キーのリレーションを簡単に管理 - ModelClass の convert 用のシェルスクリプトの実装と実行
✅ TestClass
の変換
assertDeleted
の仕様変更- 型宣言の強化(
int
→float
など) - PHP 8.2 の新しい型チェックの適用
- TestClass の syntaxChange 用のシェルスクリプトの実装と実行
🗓 6~7日目:リファクタリング
📌 メソッドの引数・返却値の型を厳格化
// 変更前(Laravel 6.x)
public function calculatePrice($amount) {
return $amount * 1.1;
}
// 変更後(Laravel 9.x)
public function calculatePrice(float $amount): float {
return $amount * 1.1;
}
→ テスト時のエラーを未然に防ぎ、コードの安全性を向上!
📌 ChatGPT を活用
whereHas
&with
の組み合わせ最適化- Eloquent リレーションの変更点を整理
- データベースファクトリの
afterCreating
とafterMaking
の挙動確認 - メソッドの引数順序の変更が必要な箇所をリストアップ
🗓 8~9日目:テスト & デバッグ
📌 ChatGPT でエラーの原因を特定
-
assertDeleted
が テスト環境で正しく動作しない問題 を修正 -
whereHas
の仕様変更に対応し、条件付きリレーションの取得方法を整理
🗓 10日目:最終確認
📌 主要な修正点
- ファクトリの
setConnection()
の適用 - データベースファクトリの
afterCreating
とafterMaking
の修正 - リレーションの修正(
hasOne
の複合キー対応) whereHas
&with
の組み合わせ最適化
3. ChatGPT の活用ポイント
- Laravel 6.x → 9.x の非互換リストを整理し、修正方針を策定
- シェルスクリプトの変換ルールを定義し、自動化を効率化
- Eloquent のリレーション設定を見直し、パフォーマンス最適化
- テストエラーの原因特定 & 修正方法のアドバイスを取得
- 最終的なコードレビューのポイントを整理し、修正の優先度を決定
4. 最終的なコミット一覧
- 設定ファイルの変更
- ModelClass の convert 用のシェルスクリプトの実装
- ModelClass の convert 用のシェルスクリプトの実行
- 複数カラムの値の組み合わせに対して IN 句を使用できる機能を実装
- ファクトリの名前解決を行う拡張機能の追加
- database/factories の convert 用のシェルスクリプトの実装
- database/factories の convert 用の修正
- database/factories の convert 用のシェルスクリプトの実行
- TestClass の syntaxChange 用のシェルスクリプトの実装
- TestClass の syntaxChange 用のシェルスクリプトの実行
- テストエラーの修正(UT/FT)
- メソッドの型チェックとリレーション最適化
- convert 用のシェルスクリプトの削除
👉 結果、Laravel 6.x から Laravel 9.x への移行が完了!
5. 最後に
業務システムの Laravel のバージョンアップは 工数がかかる作業 ですが、ChatGPT の活用、スクリプトの自動化(対象コードの8割が自動変換)、段階的な適用 によって、10日間で移行完了 することができました!
もし、Laravel のバージョンアップを検討している方は、ぜひこの手法を参考にしてみてください! 🚀🔥
この記事が役に立ったら、ぜひ「LGTM」してくれると嬉しいです! 💖
では、また次回の記事でお会いしましょう👋