🌟

業務システムの PHP と Laravel のバージョンアップの調査・実装を 10 日間でやってみた 🚀

に公開

はじめに

こんにちは!今回は、業務システムの PHP 7.4 → 8.2Laravel 6.x → 9.x のバージョンアップを 10 日間で 完了させた話を共有します。

業務システムのバージョンアップといえば 「工数がかかる」「影響範囲が広い」「テストが大変」 というイメージですが、ChatGPT の活用、シェルスクリプトの自動化、効率的なテスト によって、短期間での移行を実現しました! 🎉

1. バージョンアップの目的

  • PHP 7.4 の EOL(サポート終了)対応
  • Laravel 6.x の LTS 期間終了に伴う移行
  • 最新のセキュリティ対策とパフォーマンス改善
  • 開発効率の向上(PHP 8.2 の新機能活用、型安全性の向上)

2. 移行プロセス(10 日間のスケジュール)

🗓 1~2日目:移行計画の策定

  1. 影響範囲を洗い出し

    • コードベースの調査
    • 使用しているライブラリのバージョン確認(composer outdated
    • PHP 8.2 / Laravel 9.x で非推奨・変更された機能のリストアップ
  2. 移行方針を決定

    • モデル・ファクトリ・テストコードの変換をスクリプト化
    • Laravel 9.x で推奨される書き方に統一
    • 影響範囲が大きい部分は段階的に適用
    • ChatGPT を活用し、Laravel 9.x の新しい仕様に即した変換ルールを整理

🗓 3~5日目:コード変換

🛠 ChatGPT を活用しながら、シェルスクリプトで変換作業を効率化!

database/factories の変換

Laravel 6.x のファクトリ(クラスベースでない)を Laravel 9.x の新しいファクトリに変換

  • database/factories の convert 用のシェルスクリプトの実装と実行

ModelClass の変換

  • fillablescasts の整理
  • hasOne に複数の外部キー制約を適用
  • awobaz/compoships の導入により 複合キーのリレーションを簡単に管理
  • ModelClass の convert 用のシェルスクリプトの実装と実行

TestClass の変換

  • assertDeleted の仕様変更
  • 型宣言の強化(intfloat など)
  • 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 リレーションの変更点を整理
  • データベースファクトリの afterCreatingafterMaking の挙動確認
  • メソッドの引数順序の変更が必要な箇所をリストアップ

🗓 8~9日目:テスト & デバッグ

📌 ChatGPT でエラーの原因を特定

  • assertDeletedテスト環境で正しく動作しない問題 を修正
  • whereHas の仕様変更に対応し、条件付きリレーションの取得方法を整理

🗓 10日目:最終確認

📌 主要な修正点

  • ファクトリの setConnection() の適用
  • データベースファクトリの afterCreatingafterMaking の修正
  • リレーションの修正(hasOne の複合キー対応)
  • whereHas & with の組み合わせ最適化

3. ChatGPT の活用ポイント

  • Laravel 6.x → 9.x の非互換リストを整理し、修正方針を策定
  • シェルスクリプトの変換ルールを定義し、自動化を効率化
  • Eloquent のリレーション設定を見直し、パフォーマンス最適化
  • テストエラーの原因特定 & 修正方法のアドバイスを取得
  • 最終的なコードレビューのポイントを整理し、修正の優先度を決定

4. 最終的なコミット一覧

  1. 設定ファイルの変更
  2. ModelClass の convert 用のシェルスクリプトの実装
  3. ModelClass の convert 用のシェルスクリプトの実行
  4. 複数カラムの値の組み合わせに対して IN 句を使用できる機能を実装
  5. ファクトリの名前解決を行う拡張機能の追加
  6. database/factories の convert 用のシェルスクリプトの実装
  7. database/factories の convert 用の修正
  8. database/factories の convert 用のシェルスクリプトの実行
  9. TestClass の syntaxChange 用のシェルスクリプトの実装
  10. TestClass の syntaxChange 用のシェルスクリプトの実行
  11. テストエラーの修正(UT/FT)
  12. メソッドの型チェックとリレーション最適化
  13. convert 用のシェルスクリプトの削除

👉 結果、Laravel 6.x から Laravel 9.x への移行が完了!

5. 最後に

業務システムの Laravel のバージョンアップは 工数がかかる作業 ですが、ChatGPT の活用、スクリプトの自動化(対象コードの8割が自動変換)、段階的な適用 によって、10日間で移行完了 することができました!

もし、Laravel のバージョンアップを検討している方は、ぜひこの手法を参考にしてみてください! 🚀🔥

この記事が役に立ったら、ぜひ「LGTM」してくれると嬉しいです! 💖
では、また次回の記事でお会いしましょう👋

Discussion