この記事はLancers(ランサーズ) Advent Calendar 2020 11日目のエントリーです。
はじめに
ランサーズ株式会社に21卒入社予定でインターンをしている川原です。
現在、Lancersの管理画面のバージョンアップ作業を行っています。
CakePHP2.8→4のバージョンアップのための書き換えを行っているのですが、実際にソースコードを書き換えていく際に意識している(していこうと思う)点について書きます。
こちらの記事でCakePHP2→4バージョンアップについて紹介されています。
移行
旧実装にひきずられないようにする
コピペして終了、とならないのが移行作業です。実際にどのような手順を踏むかは以下です。
旧実装の仕様把握
バージョンアップ作業において、最初に認識するべきことは旧実装の仕様です。仕様を把握しないとそもそも書くことができません。
そのため、CakePHP2で書かれているORMがどのようなクエリを発行しているのかを直接みる必要があります。
MySQLの場合、以下のように設定して
SET GLOBAL general_log = 'ON';
MySQLを起動すると実行されるクエリのログの流れを見られるようになります。
tail -f /var/mysql/mysql.log
具体的な記法、文法等の差について
CakePHP2→3で大幅な変更があり、3→4の差はそれほどでもないようです。
CakePHP2では使用されていて、4では非推奨とされているライブラリ、関数等があります。
リファクタリング
旧実装のコードは数年単位で前に書かれたものだったりします。故に当時の開発環境によって現在の開発環境ではCIが通さないようなコードも存在しています。開発環境が整備されたことにより既存の変数、関数等の責務を考え直すきっかけになります。
例えば
return ($this->Users->someMethod() || $this->someMethod() || $this->Hoge->someMethod() || $this->Fuga->someMethod()) ? true : false;
上記のようなコードが旧実装の中に存在していましたが、同じような書き方だとPHPMDにより複雑性の指摘がされるということがあり以下のように修正する感じです。
if ($this->Users->someMethod()) {
return true
};
if ($this->someMethod()) {
return true
};
if ($this->Hoges->Method()) {
return true
};
if ($this->Fuga->someMethod()) {
return true
};
return false;
旧管理画面の仕様もそのまま流用するだけではなく、UIや機能の修正も行います。
所感
全体として、コードの差分しかないなという感じです。基本的にコードの流用などはほとんどなく、だいたい一からの作り直しという形です。
そのため、移行作業は多くの知識が要求されることから、個人的に良い学習のきっかけにもなっていると思っています。