目次
1. はじめに
Google App Engine で Cloud Firestore を使う手順について説明します。
※ Cloud Firestore は、Google が提供している NoSQL クラウドデータベースです。
※ 予め、「課金の有効化」を行う必要があります。以下のドキュメントを参照してください。
2. シンプルなGAE アプリを作成して公開する
(1) GCP 上でプロジェクトを追加します
(2) そのプロジェクトに対して GAEアプリを追加します
(3) ローカルに Cloud SDK を導入します
[Cloud SDK をダウンロード] ボタンを押して、Cloud SDK をダウンロード・インストールします。
以下の記事を参考にしてください。
(4) ローカルに簡単なウェブアプリを用意します
プロジェクトディレクトリを作成して、そこに移動します。
cd path/to/project
app.yaml
と index.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
3a. Firestore (ネイティブ モード) を利用する
(1) GCP の [Datastore] ページを開きます
[Firestore にアップグレード] ボタンを押してアップグレードします。
ネイティブモード を選択します。
(2) データを作成しておきます
[Firestore] – [データ] ページを開き、[コレクションを開始]ボタンを押します。
適当なデータを追加します。以下は一例です。
(3) 認証情報を作成します。
GCP の [API とサービス] ページを開き、以下の手順に従います。
- [認証情報を作成]ボタンを押すとプルダウンメニューが表示されるので、その中から「サービス アカウント キー」を選択する。
- 「App Engine default service account」を選択する。
- キーのタイプとして「JSON」を選択する。
- [作成]ボタンを押す。
- xxxx-yyyy.json ファイルがダウンロードされる。
- このファイルを 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 とサービス] ページを開き、以下の手順に従います。
- [認証情報を作成]ボタンを押すとプルダウンメニューが表示されるので、その中から「サービス アカウント キー」を選択する。
- 「App Engine default service account」を選択する。
- キーのタイプとして「JSON」を選択する。
- [作成]ボタンを押す。
- xxxx-yyyy.json ファイルがダウンロードされる。
- このファイルを 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 のどちらも無料枠がそれなりに大きく手軽で便利ですので、 ちょっとしたウェブアプリ(ウェブサイト)を運営するのにオススメです。是非参考にしてみてください。