# プロジェクト概要
昔作られてあまりメンテナンスされていなかったコードのリプレイス
# 目的、課題
ホテル向けに提供しているシステム内で利用されている、集計の実行結果をcsvに書き込み作成することをメインに行うLaravelで作成されたバッチ処理ですが、1つのコントローラー内にに2万行以上のコードがありました。コードが古いPHPで書かれている部分も多く、DBに存在しない謎の数字を割り当てて使用したりしていた。またループ処理の中でループを回してキーを足していく部分が多く見通しも悪く何が行われているのかわかりづらい。そのため、前任の担当者が退職するとメンテナンスが難しい状態に。
また、集計結果が間違えていることも分かったため、今後のことを考えて抜本的に作り直す必要がありました。
# 利用した技術
Laravel9
PHP
# 詳細
Laravelでcsvを作成するバッチ処理用のCommand開発。まずは、2万行以上の中にあるRouteで呼び出しているメソッドとそれ以外に分解。Routeで呼び出されていた主要なコントローラー内のメソッドはそれぞれ一つずつのコマンドに分解しました。
その他の繰り返し利用されている冗長的なコードを分解したり、不要なメソッドは削除した後、共通化できるメソッドはService内に配置しました。また、元のコードはLaravelのリレーションなどをつかっておらず、SQLで書かれていたので可能なものはモデルを作成し、管理しやすいものに修正。
集計処理に時間がかかりすぎてタイムアウトするものもありました。そういったものに関しては新たにテーブルを作成し、新たなバッチ処理で集計を行い、DBに保存。DBから直接呼び出す様に変更することでタイムアウトの問題も無くなりました。
# 苦労した点
初めて見るコードで、データベースの構造もわからなかった。また、2万行のコードを、きれいに誰が見ても分かりやすいよう分解する必要がありましたが、元コードからデータベースの構造ややっていることを理解することに非常に苦労しました。
最終的に主に利用するCommandは7つ作成し、それぞれ読みやすく、1000行程度に収まるように修正しました。