こんにちは。クルーズ株式会社CTOの鈴木です。
今回も前回に引き続きリファクタリングネタです。
前回の投稿「リファクタリングの第一歩として不要ソースを削除して論理LOCを15%削減した話 」の背景の部分でも触れましたが、SHOPLISTで使用しているフレームワークはSHOPLISTがクルーズ株式会社から分社化する以前より共通で使用していたVenusという自社開発の独自フレームワーク上で実装されています。
なんで今このご時世に独自フレームワークなんて使っているんだ!!という指摘はごもっともなのですが、だからと言って今から独自フレームワーク上で動作しているすべての処理をすべて書き換えるというのはあまりにも非現実的な話なので、まずはSHOPLISTの運営に不要な共通共通処理の排除をできる限りの保守性の向上を今回のレガシーシステム脱却の一連の活動の中で実施しました。
実際の作業は不要コードの削除と合わせて進めているので行っている内容に一部重複もあります。
実際に行ったこと
SHOPLISTで使用していないコードの削除
これは前回の投稿「リファクタリングの第一歩として不要ソースを削除して論理LOCを15%削減した話」で触れているので割愛します。
公式コンテンツ固有の処理コードの削除
元々公式コンテンツを作成するのに使っていたフレームワークだったため、共通処理の中に公式コンテンツ固有のものが入っています。
分かりやすい例でいうと「uid=NULLDOCOMO」でdocomoの公式IDを取得する。ガラケーの場合、キャリアに応じてContent-Typeを変更するヘッダーを送るなどです。
そもそもキャリア決済は行っていても、公式コンテンツではないので完全に無駄な処理でかつ無駄にデータを格納してしまっていたので共通処理から削除しました。
旧計測システム用の独自アクセスログ出力処理の削除
当時のCROOZにはCompassという独自の簡易的な集計システムがあり、そのシステムに渡すためのログを生成してファイルに吐き出す処理やログファイル上でユーザを一位に特定するためのユニークキーを生成する処理などが残っていたため、共通処理から一式削除しました。
重複メソッドの親クラスへの移動
もうこれは、当たり前の話なので割愛します。
クラスの各メソッド、メンバ変数の公開レベルの見直し
これももう当たり前なので割愛します。
プライベートメソッド、メンバ変数の名称の修正
明らかにやっている処理がメソッド名称から判断できないものがあり、このようなものについては今回一式直してしまいした。影響範囲がそのクラス内のみで、呼び出し元に迷惑をかけないからです。
フレームワークのディレクトリ構成を定義するdefineの見直し
そもそもそれ定数定義する必要あるの?みたいなもの、例えばフレームワークが指定する何かのライブラリディレクトリが定数で定義され、その定数は3つの定数とディレクトリセパレータで構築されている。そして今回参照された3つの定数はほかのどこでも参照されていないようなものがいくつかありました。もうそういったものは参照元の3つの定数を削除して直接パスを文字列で指定するようにしました。
ソース中のToDo, WIPコメントのある個所は全部確認して対応する
このようなコメントの周りは変数定義されて代入されているんだけどその変数がどこにも使われていないなど意味のない処理があり、内容を精査し不要なものはToDo、WIPというコメント含め削除、使っているものはコメントを書き直して保存するように修正しました。
メンテナンス画面のHTTPレスポンスコードとHTTPバージョンの修正
「メンテナンス中に表示するページのレスポンスヘッダを修正した話」として次回投稿します。
Frame、Controller内で呼び出される共通関数の粒度の統一
適切な表現が浮かばないのであいまいな言い方にはなってしまうのですが、処理の中で呼ばれる関数の粒度が異なり、処理の流れが非常に読みづらくなっていたのでメソッドアウトすべきものについては出して可読性がよくなるようソースの改修を行いました。
その他、細かい改修はいくつか行ったのですが大きな部分でいうと以上が行った内容です。
まずはできることから
今回は自分のできる部分として、自分が昔開発にかかわっていた自社独自フレームワークのリファクタリング作業をおこないましたが、今後はサービス側、管理画面側も含め、直せるものを直していこうと思います。
-------------------------------------------------------------------------------------------------
※2020年の内容を記事にしており、2020年11月以降PHP7サポート切れをはじめとした脆弱性リスクへの対処は完了しております。