Web

GAE (PHP 7) で Cloud Firestore を使う手順

投稿日:2019年8月27日 更新日:

1. はじめに

Google App Engine で Cloud Firestore を使う手順について説明します。

※ Cloud Firestore は、Google が提供している NoSQL クラウドデータベースです。

※ 予め、「課金の有効化」を行う必要があります。以下のドキュメントを参照してください。

2. シンプルなGAE アプリを作成して公開する

(1) GCP 上でプロジェクトを追加します

[IAMと管理] – [リソースの管理] を開きます
[プロジェクトの作成] をクリックします
[プロジェクト名] を入力して [作成]ボタンを押します

(2) そのプロジェクトに対して GAEアプリを追加します

[App Engine] – [ダッシュボード] を開きます
プロジェクトを選択してアプリケーションを作成します
Region には「asia-northeast1 (東京リージョン)」を指定します
「PHP」と「標準」を選択して [次へ] を押します
アプリが作成されました

(3) ローカルに Cloud SDK を導入します

[Cloud SDK をダウンロード] ボタンを押して、Cloud SDK をダウンロード・インストールします。

以下の記事を参考にしてください。

Google App Engine

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする

2019.05.16

(4) ローカルに簡単なウェブアプリを用意します

プロジェクトディレクトリを作成して、そこに移動します。

cd path/to/project

app.yamlindex.php ファイルを、プロジェクトディレクトリ直下に作成します。

app.yaml

runtime: php72

index.php

<?php
echo 'Hello, GAE!';

(5) App Engine にアプリをデプロイします

まず、SDK を初期化します。

$ gcloud init

実行例は以下です。

$ gcloud init
(省略)
Pick configuration to use:
[1] xxxxxxx
[2] Create a new configuration  ← これを指定します
[3] xxxxxxx
(省略)
Please enter your numeric choice:  2
(省略)

Enter configuration name. Names start with a lower case letter and
contain only lower case letters a-z, digits 0-9, and hyphens '-': xxxxxxxxxx ← 設定の名前を入力します(プロジェクト名でもよいです)
Your current configuration has been set to: [xxxxxxxxxx]
(省略)

Choose the account you would like to use to perform operations for
this configuration:
[1] foo@example.com
[2] bar@example.com
[3] Log in with a new account
Please enter your numeric choice:  1  ← ログインするメールアドレスを指定します

You are logged in as: [foo@example.com].

Pick cloud project to use:
[1] xxxxxxxxx
[2] yyyyyyyyy
[3] zzzzzzzzz
[4] Create a new project
Please enter numeric choice or text value (must exactly match list
item):  1  ← プロジェクトを指定します

(省略)

この時点で、一旦デプロイします。

$ gcloud app deploy
アプリのURLは、App Engine のダッシュボード上に書いてあります

3a. Firestore (ネイティブ モード) を利用する

(1) GCP の [Datastore] ページを開きます

[Firestore にアップグレード] ボタンを押してアップグレードします。

ネイティブモード を選択します。

ネイティブモードを選択します

(2) データを作成しておきます

[Firestore] – [データ] ページを開き、[コレクションを開始]ボタンを押します。

適当なデータを追加します。以下は一例です。

(3) 認証情報を作成します。

GCP の [API とサービス] ページを開き、以下の手順に従います。

  1. [認証情報を作成]ボタンを押すとプルダウンメニューが表示されるので、その中から「サービス アカウント キー」を選択する。
  2. 「App Engine default service account」を選択する。
  3. キーのタイプとして「JSON」を選択する。
  4. [作成]ボタンを押す。
  5. xxxx-yyyy.json ファイルがダウンロードされる。
  6. このファイルを credentials.json にリネームしてプロジェクトディレクトリ直下に配置する(プログラム内からこのファイルパスを環境変数に設定します)。

他の認証方法でもよいのですが、サービスアカウントキーを使うのがラクです。

(4) PHP で使うための準備を行います

Composer を導入します。

composer init -q

必要なパッケージ(ライブラリ)を導入します。

composer require google/cloud-firestore

プロジェクトディレクトリ直下に php.ini ファイルを生成します。内容は以下です。(これがないと Firestore の操作ができません)

extension=grpc.so

PHPのファイル内では、認証情報が記述されたファイルパスを環境変数に設定します。

putenv('GOOGLE_APPLICATION_CREDENTIALS=credentials.json');

(5) PHP のコードを記述します

プロジェクト直下の index.php に以下を記述します(あくまで一例です)。

ここでは、先程作成したデータを取得して表示しています。

<?php
require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\Firestore\FirestoreClient;

// 認証用に環境変数をセットする
putenv('GOOGLE_APPLICATION_CREDENTIALS=credentials.json');

// HTMLエスケープ用関数
function e($html) {
    return htmlspecialchars($html, ENT_NOQUOTES);
}

// (1) Firestore クラスのインスタンスを生成する
$projectId = 'xxxxxxx';
$firestore = new FirestoreClient(['projectId' => $projectId]);

// (2) データの取得と表示
$collectionReference = $firestore->collection('users');
$query = $collectionReference->where('last', '=', '鈴木');
$snapshot = $query->documents();
foreach ($snapshot as $user) {
    printf('%s: %s<br>', e($user['last']), e($user['first']));
}

(6) このアプリを App Engine にデプロイします

$ gcloud app deploly

(7) ブラウザでアプリにアクセスします

3b. Firestore (Datastore モード) を利用する

(1) GCP の [Datastore] ページを開きます

[Firestore にアップグレード] ボタンを押してアップグレードします。

Datastore モードを選択します。

(2) データを作成しておきます

(3) 認証情報を作成します

GCP の [API とサービス] ページを開き、以下の手順に従います。

  1. [認証情報を作成]ボタンを押すとプルダウンメニューが表示されるので、その中から「サービス アカウント キー」を選択する。
  2. 「App Engine default service account」を選択する。
  3. キーのタイプとして「JSON」を選択する。
  4. [作成]ボタンを押す。
  5. xxxx-yyyy.json ファイルがダウンロードされる。
  6. このファイルを credentials.json にリネームしてプロジェクトディレクトリ直下に配置する。

他の認証方法でもよいのですが、サービスアカウントキーを使うのがラクです。

(4) PHP で使うための準備を行います

Composer を導入します。

composer init -q

必要なパッケージ(ライブラリ)を導入します。

composer require google/cloud-datastore

プロジェクトディレクトリ直下に php.ini ファイルを生成します。内容は以下です。(これがないと Datastore の操作ができません)

extension=grpc.so

PHPのファイル内では、認証情報が記述されたファイルパスを環境変数に設定します。

putenv('GOOGLE_APPLICATION_CREDENTIALS=credentials.json');

(5) PHP のコードを記述します

プロジェクト直下の index.php に記述する場合を想定したコードサンプルを以下に記載します。

<?php
require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\Datastore\DatastoreClient;

// 認証用に環境変数をセットする
putenv('GOOGLE_APPLICATION_CREDENTIALS=credentials.json');

// HTMLエスケープ用関数
function e($html) {
    return htmlspecialchars($html, ENT_NOQUOTES);
}

// (1) Datastore クラスのインスタンスを生成する
$projectId = 'xxxxxxx';
$datastore = new DatastoreClient(['projectId' => $projectId]);

// (2) データの取得と表示
$query = $datastore->query()
    ->kind('Task')
    ->order('created');
$result = $datastore->runQuery($query);
foreach ($result as $entity) {
    echo sprintf('%s: %s, %s',
        e($entity['description']),
        e($entity['created']->format('Y-m-d H:i:s')),
        e(($entity['done']) ? '済' : '未')
    ) . '<br>';
}

(6) このアプリを App Engine にデプロイします

$ gcloud app deploly

(7) ブラウザでアプリにアクセスします

4. おわりに

GAE, Cloud Firestore のどちらも無料枠がそれなりに大きく手軽で便利ですので、 ちょっとしたウェブアプリ(ウェブサイト)を運営するのにオススメです。是非参考にしてみてください。

5. 関連

Google App Engine

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする

2019.05.16
Google App Engine

普通のPHPサイトをGAE(php72)上で実現する方法

2019.07.30

📂-Web

執筆者:labo


comment

メールアドレスが公開されることはありません。

関連記事

WebAssembly を試してみた

2018年10月における WebAssembly の状況を記録するために、現時点での WebAssembly を試してみることにしました。 目次1. WebAssembly とは?WebAssembl …

Web Programming

Import maps の使い方

Import maps の使い方について説明します。

CSS

overflow:hidden が指定された領域内に、幅の大きい table (表) を記述する

目次1. はじめに2. 対応策3. おわりに 1. はじめに 本ウェブサイトは、スマートフォンのサイズだと 1カラムのレイアウトになるのですが、その際、画面全体を表す HTML要素のスタイルに、「ov …

Web

Webサイトに使用されている色のコントラストをチェックする

目次1. はじめに2. Webコンテンツで推奨されるコントラスト比3. コントラスト比をチェックすることができるサービス4. コントラスト比の問題を自動的に検知する 1. はじめに 本ページでは、We …

Chrome

Google Chrome 68 で、HTTPS非対応のマークが変わりました

目次1. Chrome 68 がリリース2. 以前のマーク3. Chrome 68 以降のマーク4. ついでに、https にしてアクセスしてみる5. おわりに 1. Chrome 68 がリリース …