Edited at

GAE/SE PHP 5.5環境と7.2環境のapp.yamlの違い

GAE/SE (Google App Engine Standard Environment) のPHP 5.5環境で動いていたアプリケーションを最近発表されたPHP 7.2環境に引っ越そうとしたところ、それまで動いていたapp.yamlの書き方では動かなくなっていた、という話題です。

第一世代のGAE/SE環境では、下記のようなapp.yamlが一般的だったと記憶しています。


app.yaml (GAE/SE第一世代)

runtime: php55

handlers:
- url: /js
static_dir: js
- url: /css
static_dir: css
- url: /
script: php/index.php


第二世代のGAE/SE環境では全リクエストをフロントコントローラで受けるモデルが前提になっており、デフォルト設定では全リクエストをindex.phpで受けるようになっています。

下記のようにentrypointを設定すればフロントコントローラのパスが変更できます。


app.yaml (GAE/SE第二世代)

runtime: php72

entrypoint: serve php/index.php

ところで以前のように静的ファイルのパスをhandlersで指定しようとするとentrypointの設定が無視されてしまって意外とハマります(私はハマりました)。

公式ドキュメント「app.yaml Configuration File」に書いてある通り、下記のように記述すればhandlersentrypointを共存させることができます。


app.yaml (GAE/SE第二世代)

runtime: php72

entrypoint: serve php/index.php

handlers:
- url: /js
static_dir: js
- url: /css
static_dir: css
- url: /
script: auto


補足ですが、php72になってscriptにPHPファイルを指定しても動かなくなったので、php55時代にマルチコントローラで書いていたアプリケーションを移植する場合はルーティングするだけのフロントコントローラを書く必要があります(参考:「PHP 7.2 Runtime Environment」)。