この記事はAutoScale Advent Calendar 2018 - Qiitaの11日目です。
2018年7月12日、Google App Engine(GAE) がついに PHP 7.2 に対応しました!
SocialDogや、AutoScaleのウェブサイトなど、ちょっと動的な要素があって、キャッシュが効きそうなページでは、Google App Engine を積極的に活用してきました。*1
いままでGAEではPHP5.5しか対応していなかったので、PHP7.2 への対応で一気に未来にきた感じがあります。 ちなみにPHP5.6, 5.7, 7.1 など間のバージョンには対応していません。GAE でPHPを使う場合は、PHP5.5か7.2の2択です。
この記事では既存のPHP5.5のプロジェクトをPHP7.2で使うための設定を見てみようと思います。
- Google App Engine PHP5.5 とPHP 7.2 の主な違い
- Google App Engine PHP5.5 とPHP 7.2 で変わらない点
- PHP 7.2 に移行できない環境
- app.yaml の仕様変更
- 拡張機能の追加
- ローカルでのテスト
- デプロイ
- まとめ
- 参考資料
Google App Engine PHP5.5 とPHP 7.2 の主な違い
- 自由度が大幅アップ!
- ランタイム環境が第一世代から第二世代(gVisor ベースのコンテナサンドボックス環境)になった
- 拡張の導入が可能に。しかも簡単
- URL取得関数を使わなくても外部ネットワークアクセスが可能に
- ファイルシステムへのアクセス権が付与。
/tmp
にアクセス可能に
- app.yaml の仕様変更
- Compose の自動インストール(
composer.json
をルートに置くだけで自動的にデプロイ可能に)- .gitigonore している場合は無視されるそうなので通常は特段の対応不要?
- App Engine 独自の機能へのアクセスの廃止
- ローカルでのテストコマンド
dev_appserver.py
の廃止
Google App Engine PHP5.5 とPHP 7.2 で変わらない点
- 無料枠の定義
- SLA(ただしPHP7.2 はまだベータなので正式版になったら変わらないはず)
- デプロイコマンド(
gcloud app deploy
)
PHP 7.2 に移行できない環境
App Engine 独自の機能を使っていた場合は、PHP7.2環境への移行はかなり困難そうです。すでに動いているプロジェクトなのであれば今は諦めて、当該の機能が GCP でフルマネージドなサービスが出るまで待つ、というのもありかと思います。
app.yaml の仕様変更
以下のパラメータは廃止予定なので削除します。
threadsafe
, api_version
, application_readable
, builtins
, libraries
runtimeをPHP7.2にします。
runtime: php72
handlers
の子の script
は script: auto
のみ設定できるようになりました。
生のPHPを直接置くよりもフレームワークのエントリーポイントのファイルをひとつだけ指定してルーティングするのが普通なので、この修正は納得感があります。
以下のように指定すると、/images
以下は直接呼びつつ、それ以外は index.php
かpublic/index.php
を勝手に呼んでくれます。
handlers: - url: /images static_dir: static/images - url: /.* script: auto
詳細は以下を参照:
拡張機能の追加
拡張機能を追加したい場合は、php.ini
をおいて、以下のようにします。
extension=memcached.so extension=grpc.so extension=protobuf.so extension=mongodb.so extension=imagick.so extension=opencensus.so extension=redis.so extension=stackdriver_debugger.so
ローカルでのテスト
dev_appserver.py
が廃止されたので、以下のコマンドでテストします。
$ php -S localhost:8080
デプロイ
いままでどおりです。
$ gcloud app deploy --project [Project ID]
まとめ
PHP 7.2 では、PHP5.5 と比べてかなり自由度が高くなっています。
特に拡張が入れられる or 予め入っているというのと、ファイルシステムにアクセスできるあたりは、より柔軟に GAE を活用できるようにしてくれそうです。
一方で、既存の GAE のみの機能が使えなくなっているので、既存の PHP5.5 でそれらを使っていた場合は移行はかなり難しくなりそうです。特に Memcached を使っていた場合はかなりきついのではないでしょうか。
PHP5.5 から PHP7.2 とかなりバージョンアップしているので、パフォーマンス面でも改善しそうです(未検証)。