このチュートリアルでは、App Engine でセッションを処理する方法を示します。
多くのアプリには、認証設定とユーザー設定用のセッション処理が必要です。PHP には、この機能を実行するためのメモリベースの実装が付属しています。ただし、記録されるセッションがインスタンス間で異なる場合があるため、この実装は複数のインスタンスにサービスを提供できるアプリには適しません。
目標
- アプリを作成する。
- アプリをローカルで実行する。
- App Engine にアプリをデプロイする。
費用
このドキュメントでは、課金対象である次の コンポーネントを使用します Google Cloud:
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- アカウントにログインします Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init - 新しい Google Cloud プロジェクトを使用するように gcloud CLI を構成します。
# Configure gcloud for your project gcloud config set project PROJECT_ID
PROJECT_IDを以前に作成または選択した Google Cloud プロジェクト ID に置き換えます。
プロジェクトの設定
ターミナル ウィンドウで、選択したディレクトリに移動し、
sessionsという名前の新しいディレクトリを作成します。このチュートリアルのコードはすべて、sessionsディレクトリ内にあります。sessionsディレクトリに移動します。cd sessions依存関係をインストールします。
composer require google/cloud-firestore
このチュートリアルの最後では、最終的なファイル構造が次のようになります。
sessions
├── app.yaml
└── composer.json
├── index.php
アプリを作成する
ターミナル ウィンドウで、次の内容の
index.phpという名前のファイルを作成します。
このアプリは、ユーザーごとに異なる言語で挨拶を表示します。リピーターは常に同じ言語で挨拶されます。
アプリでユーザーの設定を保存するには、現在のユーザーに関する情報をセッションに保存する方法が必要です。このサンプルアプリは、Firestore を使用してセッション データを保存します。
PHP セッション用に Firestore を使用するには、Firestore session handler を使用します。
次の図は、Firestore が App Engine アプリ用のセッションを処理する方法を示しています。
session_set_save_handler を設定すると、セッションにアクセスするために使用可能な $_SESSION グローバル変数がすべてのリクエストに含まれます。セッション データは Firestore に保存されます。
ローカルでの実行
組み込みの PHP ウェブサーバーを起動します。
php -S localhost:8080ウェブブラウザでアプリを表示します。
Cloud Shell
Cloud Shell ツールバーの [ウェブでプレビュー]
アイコンをクリックし、[ポート 8080 でプレビュー] を選択します。ローカルマシン
ブラウザで、
http://localhost:8080にアクセスします。「Hello World」、「Hallo Welt」、「Hola mundo」、「Salut le Monde」、「Ciao Mondo」の 5 つの挨拶のいずれかが表示されます。別のブラウザまたはシークレット モードでページを開くと、別の言語で表示されます。セッション データは Google Cloud コンソールで表示して編集できます。

HTTP サーバーを停止するには、ターミナル ウィンドウで
Control+Cを押します。
App Engine でのデプロイと実行
App Engine スタンダード環境を使用すると、高い負荷の下で大量のデータを使用して正常に動作するアプリをビルドしてデプロイできます。
このチュートリアルでは、App Engine スタンダード環境を使用してサーバーをデプロイします。
ターミナル ウィンドウで
app.yamlファイルを作成し、以下をコピーします。App Engine にアプリをデプロイします。
gcloud app deployライブのアプリを表示するには、次の URL を入力します。
https://PROJECT_ID.REGION_ID.r.appspot.com次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト IDREGION_ID: App Engine がアプリに割り当てるコード
これで、App Engine インスタンスで実行しているウェブサーバーから挨拶が配信されます。
セッションの削除
PHP は、セッションのガベージ コレクション(GC)を実行します。これにより、php.ini 設定に従って、古いセッションと期限切れのセッションが削除されます。デフォルトでは、Firestore セッション
ハンドラはセッションをクリーンアップしません。ただし、セッション ハンドラの作成時に gcLimit
オプションを渡すことによって、クリーンアップするように構成できます。
セッションは、確率ベースのセッション GC を使用して削除されます。または、session_gc 関数を明示的に呼び出した場合に削除されます。
アプリのデバッグ
App Engine アプリに接続できない場合は、次の点を確認してください。
gcloudデプロイ コマンドが正常に終了して、エラーを出力しなかったことを確認します。エラー(たとえば、message=Build failed)が発生した場合は、それらを修正してから、もう一度、 App Engine アプリをデプロイします。コンソールで、[ログ エクスプローラ] ページに移動します。 Google Cloud
[最近選択したリソース] プルダウン リストで、[App Engine アプリケーション] をクリックしてから、[All module_id] をクリックします。アプリにアクセスした以降のリクエストのリストが表示されます。リクエストのリストが表示されない場合は、プルダウン リストで [All module_id] が選択されていることを確認します。 エラー メッセージが Google Cloud コンソールに出力された場合は、アプリのコードが ウェブアプリの作成に関するセクション内のコードと一致することを確認します。
Firestore API が有効になっていることを確認します。
クリーンアップ
プロジェクトを削除する
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
App Engine インスタンスの削除
- コンソールで、App Engine の [**バージョン**] ページに移動します。 Google Cloud
- デフォルト以外で削除するアプリのバージョンのチェックボックスをオンにします。 削除します。
- アプリのバージョンを削除するには、 [Delete] をクリックします。