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

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

MathJax を試してみました。

MathJax は、HTML上で数式を美しく表示するための JavaScriptライブラリです。 基本的な使い方は、 HTMLファイルに以下を記述して MathJax.js を読み込みます。HTMLフ …

Web

インストールが可能になるための最低限のウェブサイト(PWA)を作る

インストールが可能になるための最低限のウェブサイト(PWA)を作る方法について説明します。

Web

Screen Wake Lock API を使って、ディスプレイをスリープさせないWebページを作る

Screen Wake Lock API を使ったサンプルページを作りました。

Google

Google マップの地図をウェブページに埋め込む手順

Google マップの地図を、ウェブページに埋め込む手順について説明します。 手順自体は簡単なのですが、Google マップの仕様が時々変わり、操作手順もその影響を受けることがあるため、現時点(201 …

Chrome

ブロックされた Cookie を確認する方法 (Chrome の場合)

Chrome ブラウザにおいて、ブロックされた Cookie を確認する方法について説明します。