はじめに
開発チーム全員のベーススキルの平準化・底上げのために社内でLTの試みが始まりました。
折角用意した発表内容を社内だけに留めておくのは勿体無いのでQiitaにも転載します
ゆくゆくはTechBlogを作りたいなという構想もあります。
LTは2018年12月3日に行い資料はその時点での情報となります。
「概要」から下が社内LTに用いた資料となります。
ただ、社内LTという性質上、企業秘密も含まれているため一部資料の修正を行っています。
資料外でも口頭で補足している部分がありますが、当たり前の内容だったり出典が曖昧だったりしているので今回は割愛します。
「知りたいこと」という項目は、次回のLTのネタの提供(LTのネタに困ってたらこれはどう?みたいな)や社内での議論の提起のために設けています。
なので、Qiitaの読者の方には関係ありませんが一応そのままにしています。
LTを行うたびに随時更新していきたいと思います。
第一弾: PHP7移行概要
第二弾: そうだゴルフをしよう⛳
第三弾: 純粋関数
概要
弊システムでは、サーバーサイドの処理を主にPHPで書いています。
新しい商用環境では現行のPHP5.5.xからPHP7.2.xにPHPのバージョンを上げます。
PHPのバージョンアップ自体はyumなどで行なえます。
ただ、新しいPHPのバージョンでは、古いバージョンで使えていた機能が一部利用できなくなったり非推奨になっているのでソースコード側の修正も必要になります。
今回は、以下について話したいと思います。
- PHPのバージョンについて
- PHP7に移行するメリット
- ソースコード側での対応状況
- 移行を便利にするツールの紹介
- 知りたいこと
PHPのバージョン
各環境のバージョン
各環境のバージョンは以下になります。
- 商用環境:5.5.25
- 新商用環境:7.2.11
PHP7までの道のり
小ネタ
PHP7に移行するメリット
処理速度が早い
PHP5に比べて2倍ほど処理が早くなりました5。サポート対象になる
PHP5.5はアクティブサポートとセキュリティサポートの期間が終わっています6。
通常PHPの各バージョンはリリースされてから2年間のアクティブサポートとプラス1年間のセキュリティサポート期間があります。
セキュリティサポート期間をすぎるとセキュリティパッチなどが公開されないバージョンとなります。
ちなみにPHP7.0のサポートは本日(12月3日)終了しました。新しい機能が利用できる
全てを見れていないので一例だけ紹介します。
PHP7.0から宇宙船演算子という演算子が追加されました。
宇宙船演算子は、二つの式を比較するために使うものです。$a
が$b
より大きい場合は 1、$a
と$b
が等しい場合は 0、$a
が$b
より小さい場合は -1 をそれぞれ返します7 8。
例)
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
ソースコード側での対応状況
判明分(対処済み)
- Excelが出力できない
Excel出力に用いているPHPExcelというライブラリにPHP7に対応していない箇所があった9。 PHP7.0からはcontinue(break)をループとswitch文以外で使用すると構文エラーになります。 そもそも不要な処理なので削除することで対応しました。
判明分(未対処)
- 暗号化処理
mcrypt_encrypt()を用いているがPHP7.1.0で非推奨になり、7.2.0では削除されました。 - 設定値を取得する処理
PDOクラスのgetAttribute()関数とPDOクラスを継承したクラスにあるgetAttribute()関数で引数の数が違うためにWarningが出ている。 ただ、getAttribute()関数自体はPHP5.1.0からあるみたいなので10、PHPのどこかのバージョンでタイミングで引数が違う場合Warningを出す仕様になったと思われます。
移行を便利にするツールの紹介
php7cc
php7cc11 12というツールを用いれば、ソースコードを解析してPHP7に対応しているか判定してくれます。
注意点として、PHP7.0までは判定してくれますがPHP7.1とPHP7.2についてはこの方法が使えません。
あとPHP7.0についても全て網羅している保証はありません。
全ファイルについては試していませんが、PHP4のコンストラクタ宣言13などPHP7で非推奨になったものを使用している箇所がありました。
知りたいこと
- PHPの新機能
- バージョンのアップデート ライブラリにしてもそうだが、どれくらいの頻度でアップデートするのが最適なのか。