リージョン ID
REGION_ID
は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r
が App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
PHP バージョン 7.4 または 8.1 を使用して App Engine でアプリを作成する方法を学習します。サンプルアプリでは、ユーザーがお気に入りの書籍のタイトル、著者、説明、出版日、画像をウェブページに投稿できます。このアプリは、テキストデータを Cloud SQL データベースに、画像を Cloud Storage バケットにそれぞれ保存します。
ガイドの構成
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Composer と PHP 依存関係管理ツールをインストールします。Composer は、Linux および Mac OS X システムにグローバルにインストールする必要があります。
サンプルアプリをダウンロードする
GitHub でコードを調べます。
アプリをダウンロードするか、クローンを作成します。
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
または、zip ファイルとしてサンプルをダウンロードし、それを展開します。
getting-started
ディレクトリに移動します。cd php-docs-samples/appengine/standard/getting-started
composer.json で依存関係を指定する
アプリは、フロント コントローラを使用してリクエストをルーティングします。このガイドのサンプルコードでは Slim Framework を使用していますが、任意のウェブ フレームワークを自由に使用できます。
composer.json
ファイルを開いて、すべての直接的な依存関係を確認します。依存関係をインストールして
composer.lock
ファイルを生成するには、次のコマンドを実行します。composer install
composer.lock
ファイルを使用することで、アプリは複数のビルドや環境で使用されるパッケージの同じバージョンを取得できます。
アプリの初期化とフロント コントローラの定義
index.php
ファイルはアプリを初期化し、./src/controllers.php
ファイルで定義されたコントローラにすべてのリクエストを転送します。
リクエスト処理の詳細については、アプリケーションの起動およびリクエストの処理をご覧ください。
Google Cloud サービスとの統合
App Engine では、データ ストレージ用に外部システムと統合するアプリが必要です。サンプルアプリは、Cloud SQL にテキストデータを保存し、Cloud Storage に画像を保存します。
すべての Google Cloud ストレージ オプションについては、ストレージ オプションの選択に関するページをご覧ください。
Cloud SQL の使用
このサンプルアプリでは、ユーザーが書籍をウェブページに投稿します。アプリは Cloud SQL データベースを使用して、書籍のタイトル、著者、出版日、説明を保存します。
アプリのデータベースにコンテンツを追加する前に、Cloud SQL インスタンスを作成する必要があります。
Cloud SQL インスタンスを作成する
gcloud CLI を使用して Cloud SQL インスタンスを作成します。
gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION
たとえば、インスタンスに bookshelf
という名前を付け、米国中部リージョンで db-n1-standard-2
というマシンタイプを使用する場合には、次のコマンドを実行します。
gcloud sql instances create bookshelf --tier=db-n1-standard-2 --region=us-central1
MySQL の root ユーザーの設定
gcloud CLI を使用して、Cloud SQL インスタンスの root ユーザーのパスワードを設定できます。
gcloud sql users set-password USER --host=HOST --instance=INSTANCE_NAME --password=PASSWORD
たとえば、Cloud SQL インスタンス bookshelf
の root ユーザーのパスワードを passw0rd!
に設定する場合は、次のコマンドを実行します。
gcloud sql users set-password root --host=% --instance=bookshelf --password=passw0rd!
Cloud SQL インスタンスでのデータベースの設定
書籍の著者、タイトル、出版日、説明を保存するには、以下のコマンドを実行して MySQL データベースを作成します。
gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME
たとえば、Cloud SQL インスタンス bookshelf
上に book-data
というデータベースを作成する場合は、次のようにします。
gcloud sql databases create book-data --instance=bookshelf
Cloud SQL データベースへの接続
サンプルアプリは、PHP の PDO を使用して MySQL データベースとやり取りします。
これらのパラメータは、このチュートリアルの後続のセクション アプリの構成で環境変数として指定されます。
1 行のクエリ処理
ユーザーが書籍をクリックすると、アプリはデータベースに対してクエリを発行し、書籍のタイトル、著者、出版日、説明を含む 1 行を返します。
Cloud Storage の使用
サンプルアプリでは Cloud Storage を使用して、ユーザーがアップロードした画像(バイナリ ファイル)を保存します。
Cloud Storage バケットの作成
Cloud Storage はバケットを使用して、データへのアクセスの整理と制御を行います。
gcloud CLI を使用して Cloud Storage バケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME/ --location=BUCKET_REGION
たとえば、us-central1
リージョンに picture-storage
というバケットを作成する場合は、次のコマンドを実行します。
gcloud storage buckets create gs://picture-storage/ --location=us-central1
成功すると、次の出力が表示されます。
Creating gs://BUCKET_NAME/
失敗した場合は、次のような出力が表示されます。
ServiceException: 409 Bucket BUCKET_NAME already exists
別のバケット名でもう一度お試しください。
プロジェクトを Cloud Storage バケットに接続する
Cloud Storage を使用するには、Cloud Storage ライブラリを指定する必要があります。
画像の保存
すでに Cloud Storage バケットを作成して接続を設定したので、画像を保存できるようになりました。事前定義されたアクセス制御リスト(ACL)を使用して画像をアップロードし、画像へのアクセスを制御できます。
このサンプルアプリでは、事前定義された ACL public-read
がアップロード画像用に用意されています。公開 URL には、Cloud Storage オブジェクトの mediaLink
プロパティを介してアクセスできます。この URL は、HTML イメージタグで使用できます。
非公開の Cloud Storage オブジェクトを読み取る方法については、オブジェクトのダウンロードに関するページをご覧ください。
画像の削除
ユーザーがアプリから書籍を削除すると、このコードによって Cloud Storage バケットから画像が削除されます。
アプリの構成
アプリケーションのランタイム、環境変数、その他の設定を指定する app.yaml ファイルを使用して、App Engine 上で動作するようにアプリケーションを構成します。
アプリの構成要件を最小限にとどめるには、app.yaml
ファイルに次の 1 行だけを指定します。
PHP 8.1
runtime: php81
PHP 7.4
runtime: php74
必要に応じて、構成オプションとアプリケーション固有の環境変数を app.yaml
構成ファイルに追加できます。
環境変数の追加
app.yaml
ファイルに、アプリの環境構成を指定します。このガイドで使用する本棚の例では、適切な Cloud SQL インスタンスと Cloud Storage バケットに接続する方法を識別する環境変数として構成を設定する必要があります。
アプリをデプロイするには、app.yaml
構成ファイルを次のように編集する必要があります。
GOOGLE_STORAGE_BUCKET
変数を Cloud Storage バケットの名前に設定します。CLOUDSQL_CONNECTION_NAME
変数を app-name:region:instance-name に設定します。必要な詳細を取得するには、次のgcloud
コマンドを使用します。gcloud sql instances describe INSTANCE
Cloud SQL 第 2 世代インスタンスの場合、
CLOUDSQL_CONNECTION_NAME
は次の形式になります。your_project_name:your_region:your_instance
作成したデータベースの名前が
bookshelf
以外の場合は、コメント化解除してCLOUD_SQL_DATABASE_NAME
変数を設定します。この例では、book-data
という名前のデータベースが作成されました。app.yaml
ファイルが次のように設定されていることを確認します。
PHP 8.1
runtime: php81
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
PHP 7.4
runtime: php74
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
アプリケーションのデプロイ
アプリケーションをデプロイするには、
getting-started
ディレクトリに移動し、次のコマンドを実行します。gcloud app deploy
ロケーションのプロンプトが表示されたら、アプリユーザーの近くのロケーションを選択します。App Engine はリージョンの影響を受けます。つまり、アプリを実行するインフラストラクチャは特定の地域に配置されています。たとえば、このチュートリアルでは
us-central1
リージョンを使用して、ストレージ リソースをデプロイしています。同じリージョンにアプリをデプロイすると、レイテンシが減ってパフォーマンスが向上します。通常、ユーザーに近いロケーションを選択するのが好ましいですが、リソースの配置場所の近くにアプリケーションをデプロイすることが推奨される場合もあります。利用可能な App Engine のロケーションとリソースのロケーションについての説明を確認してください。
アプリケーションを表示します。
gcloud app browse
クリーンアップ
プロジェクト内で使用されているリソースに対する課金を停止するには、Google Cloud プロジェクトを削除します。
プロジェクトを削除するには、次のコマンドを使用します。
gcloud projects delete PROJECT_ID
プロジェクトが削除されたことを確認するには、プロジェクトの一覧を表示します。
gcloud projects list
次のステップ
- ユーザーの認証方法を学習する。
- アプリケーション ログの読み取りと書き込みで、アプリケーション ログの作成方法とシステムログの解釈方法を学習する。
- Cloud Tasks を使用して、リクエスト後に非同期的にバックグラウンドで作業を行う方法について学習する。
- リクエストの処理とリクエストのルーティングについて確認する。
- App Engine の機能を詳しく学習する(PHP ランタイム環境を参照)。