はじめに
以前、[PHP]安定したシステム運用を目指して取り組んだことという記事を書きました。この記事ではPHP7した後のチームの取り組みを紹介しました。
現在、別サービスのPHP7化を進めており再びPHP5と向き合っています。
本記事ではPHP7化のすすめとPHP7化の進め方を共有したいと思います。
PHPの各verのLife cycleはきちんと守ろう
2017年10月時点でのサポート状況。
http://php.net/supported-versions.phpより
PHP5.5以下はSecurity fixesが終わっているため、セキュリティリスクを抱えた状態になっています。早くverを上げるべき。
しかし、現場はverupに取り組みたいと思っていても、上司からなかなか許可がもらえないということがあると思います。
「セキュリティ事故が起きて責任とれるんですか?起きてからでは遅いですよ?」とセキュリティリスクを盾に交渉してみるという手はどうでしょうか?
フレームワークのLife cycleもチェック
フレームワークも古いとセキュリティリスクを抱えます。
(PHP7になるのでそもそも動かない可能性もありますが。。。)
フレームワークもverupしましょう。
私たちのケースですが、サービスがSymfony1.4で作られていました。
・Symfonyの最新verにする
・Laravelなどの別のフレームワークに切り替える
という選択肢がありました。私たちはSymfonyの最新verにする方を選びました。
理由は
・verup後はPHPもフレームワークも最新verを追っていくという方針になった
・Symfonyはサポートのロードマップが明確で、verupのための計画が立てやすそう
という2点です。
ちなみにSymfony3.4はLTS版なので2020年までサポート予定だそうです。
(本当はLaravel使いたかったな。。。)
PHP7にすることの恩恵
これは有名ですね。
PHP7は大幅な改修のおかげでPHP5系の2倍の実行速度を誇るといわれています。
またメモリ使用量も下がります。感謝感謝。
上司からなかなか許可がもらえない場合はこれも交渉のネタになると思います。
「レスポンスが高速化するのでuserに快適なサービスを提供できます」と顧客満足も交渉のネタにどうでしょう?
PHPverupの権利を勝ち取った後は作業の進め方を決める
私たちは下記の手順で進めていきました。
1. 使用していないファイルは事前に削除しておく
2. 修正有無をphp7ccを使ってざっくりチェック
3. 各verで追加された機能や非推奨になったものをチェックする
4. Symfony1.4とSymfony3の違いを把握
5. Road lapの作成
使用していないファイルは事前に削除しておく
リポジトリには昔は使われていたけど今は使われていないファイルが残っていることもあると思います。verupの際は時間に追われる可能性があるので無駄なものはいまのうちに葬っておきましょう。
修正有無をphp7ccを使ってざっくりチェック
世の中には優しい人がいますね。PHP7に対応しているかどうか、チェックしてくれる「php7cc」というツールがあります。
https://github.com/sstalle/php7cc
php7cc /path/to/my/file.php
php7cc /path/to/my/directory/
こんな感じでファイル単位やディレクトリ単位でチェックできエラーがあると、ファイル名と行数、それと理由が表示されます。
まだverupの予定がなくても、今のうちに対応した書き方に作り直しておくと良いかも。
各verで追加された機能や非推奨になったものをチェックする
要はポイントの学習ですね。
PHP7から例外の種類が増えました。Mcryptは7.1で非推奨になりました。
などなど変更になった点が多々あります。
変更点はPHPのマニュアルにしっかり明記されていますので、確認しておきましょう。
http://php.net/manual/ja/appendices.php
調べた内容はチームミーテイングの機会を設けて共有しておくとよいかもですね。
Symfony1.4とSymfony3の違いを把握
これは私たちの場合ですがSymfonyはSymfony2で大改修されたため、
今までの機能を保持するために新しいフレームワークを知る必要がありました。
気になることをリストアップし、Symfony1.4ではどうなっていて、Symfony3ではどの機能を使用することになりそうかの対比表を作りました。
function | Symfony1.4 | Symfony3 |
---|---|---|
batch | Taskで実装 | console commandを使用することになる? |
フィルタリング | filter | Event listenerを使用することになる? |
ルーティング | ymlで管理 | アノテーションでもymlでも管理できる? |
テンプレートエンジン | PHP | twig or PHPどっちでもできそう? |
css, js, imgの設定 | view.yml | asset managerを使うことになりそう? |
... | ... | ... |
Road lapの作成
工数はプロジェクトによって違うと思いますので工数については触れません。
私たちが立てた手順は、
1. サンプルを作成 (Batch -> Web -> Event listener)
2. 独自ライブラリの移植
3. Batchを移植
4. Webを移植
でした。簡単なものから着手していくようにしました。
errorをキャッチアップする仕組みを作る
結構以降の作業は泥臭いです。エラーチェックなどは自動化しておきましょう。
例えばLint処理やエラーキャッチです。
Lintはシェルを作ってもいいですし、hookで検知してもいいと思います。
やりやすい方法でどうぞ。
あとはエラーキャッチですね。
error.logをモニタリングしておけばすぐにエラーをキャッチできると思いますが、
ついつい忘れてしまうこともあります。
その場合はslackに投げるなり、emailを送信するなり周りにも周知させるような仕組みを作りましょう。
誰かが指摘してくれるかもしれません。
ほかのメンバーにもテストを協力してもらう
テストはやはり重要です。
verupは大きなプロジェクトなので周りをどんどん巻き込んでいきましょう。
みんなにお願いして1時間でも30分でも時間をもらい、会議室を確保して黙々とテストをしてもらいましょう。
各々の観点でテストをしてもらうと思わぬバグが見つかることもあります。
終わりに
verup後の取り組みがやはり重要だと思います。
以前、[PHP]安定したシステム運用を目指して取り組んだことという記事を書きましたのでもしよければ参考にしてください。
どのたかのお役に立てれば幸いです。