PHP スタートガイド

このチュートリアルは、初めてクラウドでアプリを構築する方々を対象にしています。エンジニアやウェブ デベロッパーなどが、Google Cloud に適用できるアプリ開発の重要なコンセプトを学習する場合に役立ちます。

目標

費用

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

このチュートリアルでは、Google Cloud の Always Free 枠の上限内でリソースの使用が維持されるよう設計されています。 料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  6. Firestore データベースをネイティブ モードで作成するには、次の手順に沿って操作してください。
    1. Cloud Console の Firestore Viewer ページに移動します。
      Firestore Viewer に移動
    2. [Cloud Firestore モードの選択] 画面から [ネイティブ モードを選択] をクリックします。
    3. Firestore データベースのロケーションを選択します。このロケーション設定は、Cloud プロジェクトのデフォルトの Google Cloud リソースのロケーションです。このロケーションは、ロケーション設定を必要とする Cloud プロジェクト内の Google Cloud サービス(特にデフォルトの Cloud Storage バケットおよび App Engine アプリ)で使用されます。
    4. [データベースを作成] をクリックします。
  7. App Engine Admin, Cloud Storage, Cloud Logging, and Error Reporting API を有効にします。

    API を有効にする

  8. Cloud Shell で、アプリのソースコードを開きます。
    Cloud Shell に移動

    Cloud Shell を使用すると、ブラウザからコマンドラインで直接 Google Cloud リソースにアクセスできます。

  9. サンプルコードをダウンロードしてアプリのディレクトリに移動するには、[続行] をクリックします。
  10. Cloud Shell で、gcloud ツールを構成して新しい Google Cloud プロジェクトを使用します。

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、Cloud Console を使用して作成した Google Cloud プロジェクト ID に置き換えます。

    gcloudコマンドライン ツールは、コマンドラインから Google Cloud リソースを操作する基本的なツールです。このチュートリアルでは、gcloud ツールを使用してアプリをデプロイおよびモニタリングします。

アプリを実行する

  1. composer を使用してアプリの依存関係をインストールします。

    composer install
    

  2. PHP 組み込みウェブサーバーを実行します。
    GOOGLE_CLOUD_PROJECT=PROJECT_ID php -S localhost:8080
    
    PROJECT_ID は、作成した Google Cloud プロジェクト ID に置き換えます。
  3. Cloud Shell で、[ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択します。新しいウィンドウが開き、実行中のアプリが表示されます。

アプリを App Engine にデプロイする

Google Cloud には、コードを実行する際に使用できるオプションがいくつか用意されています。この例では、App Engine を使用してスケーラブルなアプリを Google Cloud にデプロイします。App Engine では、開発環境の構成もサーバーの管理も不要なため、コーディングに集中できます。また、トラフィック量が急増した場合も App Engine が自動的にスケーリングしてサポートします。

app.yaml ファイルは App Engine にデプロイするメインの構成ファイルです。

runtime: php73

env_variables:
  APP_DEBUG: true
  LOG_CHANNEL: stderr
  APP_STORAGE: /tmp
  1. ターミナル ウィンドウで、gcloud ツールを使用してアプリを App Engine にデプロイします。

    # on the command-line
    gcloud app deploy
    

  2. ウェブブラウザに次のアドレスを入力します。

    https://PROJECT_ID.REGION_ID.r.appspot.com

    以下を置き換えます。

    Bookshelf アプリのホームページ

App Engine へのデプロイの詳細については、PHP 7 ランタイム環境をご参照ください。

Firestore でデータを永続化する

App Engine インスタンスに情報を保存することはできません。これは、インスタンスの再起動時に情報が失われ、新しいインスタンスの作成時にはすでに存在しないためです。そこで、すべてのインスタンスが読み取りおよび書き込みするデータベースを使用します。

Google Cloud にはデータを保存する際に使用できるオプションがいくつか用意されています。この例では、Firestore を使用して各書籍のデータを保存します。Firestore はフルマネージドでサーバーレスの NoSQL ドキュメント データベースで、データを保存および照会できます。Firestore はアプリのニーズを満たすために自動でスケールし、使用しない場合はゼロにスケールします。最初の書籍を追加しましょう。

  1. ウェブブラウザに次のアドレスを入力します。

    https://PROJECT_ID.REGION_ID.r.appspot.com

    以下を置き換えます。

  2. デプロイしたアプリ用の書籍を作成するには、[Add book] をクリックします。

    Bookshelf アプリに書籍を追加する
  3. [Title] 項目に「Moby Dick」と入力します。
  4. [Author] 項目に「Herman Melville」と入力します。
  5. [Save] をクリックします。Bookshelf アプリにエントリが追加されました。

    Moby Dick の Bookshelf アプリのエントリ
  6. Cloud Console で Firestore ページを更新するには、[更新] をクリックします。データが Firestore に表示されます。Bookshelf アプリでは、各書籍が一意の ID とともに Firestore ドキュメントとして、すべて Firestore コレクション内に保存されます。このチュートリアルでは、コレクションを書籍集(books)と呼びます。Firestore ドキュメントの例。

Firestore は Firestore クライアント ライブラリを使用して書籍集を保存します。Firestore ドキュメントを取得する例を次に示します。

// Use the client library to call Firestore
use Google\Cloud\Firestore\FirestoreClient;

$firestore = new FirestoreClient([
    'projectId' => $projectId,
]);
$collection =  $firestore->collection($collectionName);
$bookRef = $collection->document($bookId);
$snapshot = $bookRef->snapshot();

Firestore の使用方法の詳細については、Firestore にデータを追加するをご覧ください。

Cloud Storage にアップロードしたファイルを保存する

書籍を追加したので、書籍の表紙の画像を追加します。ファイルをインスタンスに保存することはできず、データベースは画像ファイルに適していません。そこで Cloud Storage を使用します。

Cloud Storage は Google Cloud 向けのメインの blob ストアです。Cloud Storage を使用して、Google Cloud で共有するアプリのアセットをホストできます。Cloud Storage を使用するには、データを保存する基本的なコンテナである Cloud Storage バケットを作成する必要があります。

  1. Cloud Console の Cloud Storage ブラウザページに移動します。

    Cloud Storage ブラウザページに移動

  2. [バケットを作成] をクリックします。
  3. [バケットの作成] ダイアログで、Google Cloud のプロジェクト ID を文字列 _bucket に付け加えてバケットの名前を入力して、名前を YOUR_PROJECT_ID_bucket のようにします。この名前はバケット名の要件を満たしている必要があります。他のすべての項目はデフォルト値のままにします。
  4. [作成] をクリックします。
  5. バケットの作成後、ユーザーが閲覧できるようにオブジェクトを一般公開する必要があります。オブジェクトを一般公開するには、データの一般公開をご覧ください。
  6. [Edit book] をクリックして、書籍の表紙としてアップロードする画像を選択します。たとえば、このパブリック ドメインの画像を使用します。
    Moby Dick の書籍の表紙
  7. [Save] をクリックします。Bookshelf アプリのエントリがあるホームページにリダイレクトされます。
    Moby Dick の Bookshelf アプリのエントリ

Bookshelf アプリは、Cloud Storage クライアント ライブラリを使用して、アップロードされたファイルを Cloud Storage に送信します。

// Use the client library to call Cloud Storage
use Google\Cloud\Storage\StorageClient;

$storage = new StorageClient([
    'projectId' => $projectId,
]);
$bucketId = $projectId . '_bucket';
$gcsBucket = $storage->bucket($bucketId);

Cloud Storage の使用方法の詳細については、入門ガイドのリストをご覧ください。

Google Cloud のオペレーション スイートを使用してアプリをモニタリングする

アプリをデプロイし、書籍を作成して変更を加えました。ユーザーのためにこのようなイベントをモニタリングするには、アプリケーション パフォーマンス管理を使用します。

Cloud Logging でログをモニタリングする

Cloud Console

  1. ブラウザで、アプリの /logs URL にアクセスします。

    https://PROJECT_ID.REGION_ID.r.appspot.com/logs

    これにより、Cloud Logging にカスタムのエントリが送信されます。エンティティには、NOTICEログの重大度と、「Hey, you triggered a custom log entry. Good job!」というメッセージが含まれます。

  2. アプリをリアルタイムでモニタリングできるログビューアに移動します。これは、問題が発生した場合に、最初に確認すべき場所です。
    Cloud Logging ログビューア
  3. [リソース] プルダウン リストで、GAE Application を選択します。
  4. [ログ] プルダウン リストで、[すべてのログ] を選択します。

    カスタムのログエントリ用の行があります。

    ログビューアのエントリ

gcloud

  1. ターミナル ウィンドウで、gcloud コマンドライン ツールを使用して、新しいログエントリをリッスンしてアプリのログをモニタリングします。

    gcloud app logs tail

  2. ブラウザで、アプリの /logs URL にアクセスします。

    https://PROJECT_ID.REGION_ID.r.appspot.com/logs

    これにより、Cloud Logging にカスタムのエントリが送信されます。エンティティには、NOTICEログの重大度と、「Hey, you triggered a custom log entry. Good job!」というメッセージが含まれます。

    gcloud コマンドの出力には、新しいログエントリが表示されます。

    Waiting for new log entries...
    2019-03-27 22:17:01 default[20190327t151430]  "Hey, you triggered a custom log entry. Good job!"
    

Error Reporting でエラーをモニタリングする

  1. Cloud Console の [Error Reporting] ページに移動します。
    [Error Reporting] ページに移動
    Error Reporting では、アプリ内のエラーと例外が強調表示され、そのアラートを設定できます。
  2. ブラウザで、アプリの /errors URL にアクセスします。
    https://PROJECT_ID.REGION_ID.r.appspot.com/errors

    これにより、新しいテストの例外が生成され、Google Cloud のオペレーション スイートに送信されます。

  3. Cloud Console の [Error Reporting] ページに戻り、しばらくすると新しいエラーが表示されます。[自動再読み込み] をクリックすると、ページを手動で更新する必要がなくなります。

    Error Reporting のエラー メッセージ。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ