PHP 5.5 から PHP 7 へのアプリの移行

PHP 5.5 アプリケーションを App Engine スタンダード環境の PHP 7 ランタイムに移行する方法について説明します。

PHP 5.5 と PHP 7 の互換性に関する問題

公式の PHP ドキュメントで PHP の各バージョンからの移行に関する情報が提供されています。

app.yaml ファイルを移行する

アプリケーションのすべてのルーティングを処理するフロント コントローラを配置する必要があります。詳細については、アプリケーションの起動をご覧ください。

PHP 7 ランタイムでは、script ハンドラ要素をカスタマイズできません。すべてのトラフィックが entrypoint コマンドを使用して提供されるため、唯一の有効な値は auto です。静的でない URL のすべてのハンドラで script: auto を指定しないとデプロイは成功しません。

app.yaml 構成ファイルの一部の要素の動作が変更されました。

要素変更タイプ説明
entrypoint追加必要に応じて、このフィールドでアプリの起動時に実行されるコマンドを指定します
threadsafe非推奨すべてのアプリケーションがスレッドセーフ(つまり、インスタンスが複数のリクエストを同時に処理できる)とみなされます。
api_version非推奨以前は必須でしたが、PHP 7 ランタイムでは必要ありません。
application_readable非推奨
builtins非推奨
libraries非推奨composer.json メタデータ ファイルを使用して、サードパーティの任意の依存関係をインストールできます。
handlers修正
  • script フィールドは省略可能で、指定できる値は auto だけです。ウェブ フレームワーク(LaravelSymfonySlim など)とアプリ内ルーティングを使用して、リクエストが特定のルートを取ったときにスクリプトを実行します。
  • login」フィールドはサポートされていません。ユーザー管理には Identity and Access Management(IAM)を使用します。

非推奨のフィールドのいずれかを使用すると、アプリのデプロイ時にエラーが発生します。

詳細については、app.yaml リファレンスをご覧ください。

緩和されたランタイムの制限

PHP 7 ランタイムは、PHP 5.5 ランタイムに比べて制限が少なくなっています。

詳細については、PHP 7 ランタイム環境のドキュメントをご覧ください。

App Engine の PHP SDK から移行する

PHP 7 ランタイムは、App Engine 固有の API をサポートしていません。これらの API が提供するほとんどの機能は、Cloud SDK クライアント ライブラリで提供されるようになりました。

  • App Engine の Blobstore API サポートは提供されていません。Cloud Storage を利用するには google/cloud-storage クライアント ライブラリを使用します。ご利用にあたっては、Cloud Storage クライアント ライブラリのページをご覧ください。
  • Datastore にアクセスするには、google/cloud-datastore クライアント ライブラリを使用します。ご利用にあたっては、Datastore クライアント ライブラリのページをご覧ください。
  • App Engine の Images API サポートは提供されていません。画像の操作と処理には、imgix をおすすめします。 無料枠が必要な場合は、Rethumb を使用します。

    画像の保存と配信には、google/cloud-storage クライアント ライブラリを介して Cloud Storage を使用します。ご利用にあたっては、Cloud Storage クライアント ライブラリのページをご覧ください。

  • App Engine の Mail API サポートは提供されていません。メールを送信するには、SendGridMailgunMailjet などのサードパーティのメール プロバイダを使用します。これらのサービスはいずれも、アプリケーションからメールを送信するための API を提供しています。

  • App Engine Memcache サポートは提供されていません。代わりに、Memorystore for Redis を使用します

  • App Engine Modules API には google/apiclient ライブラリを使用してアクセスできますが、公式 SDK には含まれなくなりました。環境変数と App Engine Admin API を使用して情報を取得し、アプリケーションで実行中のサービスを変更します。

    サービスに関する情報 アクセス方法
    現在のサービス名 GAE_SERVICE 環境変数
    現在のサービス バージョン GAE_VERSION 環境変数
    現在のインスタンス ID GAE_INSTANCE 環境変数
    デフォルトのホスト名 Admin API の apps.get メソッド
    サービスのリスト Admin API の apps.services.list メソッド
    特定のサービスのバージョンのリスト Admin API の apps.services.versions.list メソッド
    特定のサービスのデフォルト バージョン(トラフィック分割を含む) Admin API の apps.services.get メソッド
    特定のバージョンで実行中インスタンスのリスト Admin API の apps.services.versions.instances.list メソッド
  • App Engine の Search API サポートは提供されていません。Compute Engine 上で ElasticSearch のような全文検索データベースをホストし、サービスからアクセスできます。

  • App Engine の Task Queue APICloud Tasks に置き換えられます。Cloud Tasks REST API、RPC API、または PHP クライアント ライブラリを使用して、アプリからタスクをキューに登録できます。push ターゲットは、PHP 7 ランタイムのアプリにすることができます。push キューのみサポートされています。

  • Users API サポートは提供されていません。

アプリケーションをローカルで実行する

dev_appserver.py は PHP 7 ランタイムではサポートされていません。アプリケーションをテストしてローカルで実行するには、PHP 7 ランタイムでサポートされているバージョンの PHP をインストールし、ウェブサーバーを設定します。

たとえば、次のコマンドを実行して HTTP サーバーを起動します。

php -S localhost:8080

その後、ウェブブラウザで http://localhost:8080 にアクセスしてアプリケーションを表示します。