kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

cakephp1.2->2.10への移行

要件としては以下を実施しようと、計画し実行したときの記録です。

  • cakephp1.2 -> cakephp2.10
  • php5.5 -> php7.2.9
  • apache -> nginx

移行へのきっかけ

自身でOKRを取り組もうと決めた時に、プラットフォーム更新が真っ先に思いついた取り組む決意をしました。

あの時の自分にあまかったことを言い続けてあげたい。結果としては、対応したことについては褒めてあげたいが。

会社の方針が適当

適当というのは、悪い意味で適当です。そしてシステムとしての意識は、アプリケーションのみの思考のためバックエンドの更新というのはエンジニアの余暇でやる感じになっており、会社をあげてやろう。という意識はない。

これも一度別の記事を書いてみようかな。(感じている問題点とどう取り組めばよさそうか書いてみたい。)

移行のための調査

cakephp2

cakephp2はチュートリアルを書いてみて、古いバージョンとの違いを確認してから、移行手順を熟読しました。

2.0 移行ガイド - 2.x

2.10に上げるため、とにかく読みました。

View周りについて多くの修正が必要な印象で、Controller周りは一括変換で持っていける感じでした。

あとはなくなったComponentやHelperへの対処が必須なため、やりながら対応をしていこうと判断しました。

このころは移行ツールに期待していましたね。。。あぁ。

php7

もともとPHP7に移行すること自体は、他で行なっていたため2点ほどを気にしながら対応できると判断。

cakephp1系では完全に死んでいたため、cakephp2にあげてからの作業を想定しました。

  • postgres関数 -> pdo
  • 文字列操作系の削除関数への対処 split -> preg_split など

まぁ、余裕だろう。そして早くなることを期待しながら楽しみにしよう。

nginx

これも使っている部分はあったため、実績もあり、いつでも可能だと判断。

PHP7に上げる時に、php-fpmと一緒につかうようにしてしまおう。と期待を膨らませる。

調査はしていないが、confの設定もcakephp2 の説明に載っていたため大丈夫だろう。と判断もしました。

移行のための作業

cakephp2

Updateシェルで1系から2系へ変換。フォルダ構成とかファイル名を主に変換してくれる。

Upgrade シェル - 2.x

index.phpとかapp_controller.phpとかはちゃんと移行されないため、内容を手で反映する。

あとはsedとかgrepを使って一気に文字列を変換しました。

  • componentのstartupとinitializeの引数のパラメータ変更(&をなくす)
  • RequestHandler周りを一括修正
  • $this->data を $this->request->data
  • $this->params を $this->request->data
  • renderElement -> element
  • javascriptヘルパーを削除
  • App::import -> App::uses
  • Formヘルパーの内容が若干変わっているため、Wrapperで対応
  • FlashをSessionからFlashコンポーネントとヘルパーへ
  • IP取得をthis->RequestHandler->getClientIp() から this->request->clientIp(false)
  • Modelのqueryで余計なパラメータがある場合、修正
  • validateのEmpty関数をBlankへ変更
  • authComponentに認可が追加された?と思われる
  • sessionの設定周り
  • cookie周り
  • databaseの種類変更(プラグイン使用)
  • debugツール導入

かなりカスタマイズをしていた部分も修正したので、標準ならいらない修正もあったかもしれないが結構な量を修正しました。

php7

  • 文字列系のsplitをpreg_splitなど修正
  • cakephp2のcryptのcipherのsrandの対応

php7で厳密になった部分(型周り)でちょいちょいエラーが出ているので、修正する

nginx

confの設定で異常に苦労しています。現状も動作が正しいのか不安な状態です。

サブディレクトリへの対応が、ドキュメント通りでうまく動作しなかったのと、asset周りをindex.phpを通さなくてもいいように対応しようとして手間取っている感じです。

try_filesで調整するだけだと思っていましたが、なかなか手こずっています。知見がある人に聞いたらすぐできそうな感じだけど、cakephp2とかサブディレクトリでうまく動いてるプロジェクトってないのかな。

結構調べたけど、どの設定も期待した内容にならないんだけど、webroot配下とかきれいにしてるのかな。参加してるプロジェクトが特殊なのかな。とか思うけど、nginxの設定でできると思っています。

とにかくconfの設定をtry&error状態です。

結果

cakephp2への移行は対応できたと思います。

ただ本番導入時に想定があまかったことを痛感したため、失敗したことも書こうと思います。

移行の件で思うことは、熱量がないと本当にできないと感じました。

やっぱり想定以上のことが起こりすぎて、本当に何度挫折したことか。

やりきるという意志をどれだけ保てるか。どれだけ価値を感じてもらえてるか。会社の方針も影響がありますね。

アプリケーション開発とは別のつらさがありました。

いつの時代も変化を受け入れないと、どこで置いていかれるかわからないし、常に変化を捉えて必要な取り組みをする会社は強い会社だと思います。

若い人をいれることで、最近の変化を感じることもあるし、プラットフォームの更新に取り組んでみたことで感じることも多かったです。

定期的に見直す話し合いができるといいな。とか今回の経験が今後の開発で活かせるようにしたいです。