1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-03-17

はじめに

こんにちは!今回は、業務システムの 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」してくれると嬉しいです! 💖
では、また次回の記事でお会いしましょう👋

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?