Google Cloud Datastoreの使い方(PHP, 2017年版)

by sixl

サマリ

Googleの提供するクラウドサービス、GAEでホームページを作成しました。記事の格納にDatastoreを使ってみたので、やり方などをメモしておきます。色々と調べないとわからないところもありました。

Datastoreとは?

Googleの提供するデータベースサービスです。MySQLやPostgreSQLなどのリレーショナルデータベースとは異なる、NoSQLです。あまり複雑な使い方をしなければ従来のデータベースと同様に使えます。私は初めてDatastoreを使い、このホームページの記事を保存させましたが、慣れれば簡単でした。

覚えておくべきDatastore用語

この記事でもよく使う、覚えておくべきDatastore用語です。

Datastore用語→データベース用語

  • 種類→テーブル名
  • エンティティ→レコード
  • プロパティ→フィールド

環境構築

以下手順でPHPでDatastoreを使う環境を構築します。詳細は箇条書きの後で。尚、macOS Sierra上で実施しました。

  1. Datastoreを利用するパッケージ導入するため、composerをインストール
  2. composerでDatastoreパッケージをインストール(後述)
  3. プロジェクト作成の作成
  4. Datastore APIの有効化
  5. APIを利用するためのJSONファイルをダウンロード

composerでDatastoreパッケージをインストールするために、composer.jsonというテキストファイルをプロジェクトフォルダに作成し、以下を記載します。

{
"require": {
"google/cloud-datastore": "^1.0"
}
}

composerがうまくインストールされていれば以下コマンドでDatastoreを利用するパッケージがインストールされます。

composer update

APIを利用するためのJSONファイルダウンロードは以下のようにやります。ひとまずプロジェクトフォルダ直下に置いておくと良いでしょう。

使ってみる

以上で準備は完了です。実際に使ってみましょう。以下が一番シンプルなphpのコードになります。データストアのtable1という種類(テーブル)に、1つエンティティ(レコード)を追加するものです。エンティティの中身は、numとnameというプロパティ(フィールド)があり、それぞれ1、sixlという値を格納します。

# ダウンロードしたjsonファイルの場所を書きましょう
putenv("GOOGLE_APPLICATION_CREDENTIALS=./[hoge].json");

# ライブラリをロード
require "./vendor/autoload.php";

# Google Cloud clientライブラリをロード
use Google\Cloud\Datastore\DatastoreClient;

# Datastoreのインスタンスを作成、プロジェクトIDを指定する必要があります
$datastore = new DatastoreClient(["projectId" => "[project-id]" ]);

# データを挿入
$key = $datastore->key("table1", "1");
$name = $datastore->entity($key, [
"number" => "1",
"name" => "sixl",
]);
$datastore->upsert($name);

Googleクラウドコンソールに行って、データが格納されていれば成功です。

使ってみる2

以下は私のメモです。データの挿入以外に、以下を使えれば、基本的なことはできると思います。

# upsert - 上書き更新
$key = $datastore->key("", );
$task = $datastore->entity($key, [
"" => ""
]);
$datastore->upsert($task);


# lookup
$key = $datastore->key("",);
$entity = $datastore->lookup($key);


# delete
$key = $datastore->key("",);
$datastore->delete($key);


# batch
$keys = [
$datastore->key("", ""),
$datastore->key("", "")
];
$entities = [
$datastore->entity($keys[0], ["" => "", "" => ""] ),
$datastore->entity($keys[1], ["" => "", "" => ""] )
];
$datastore->upsertBatch($entities);

クエリや、クエリからのデータ取得方法などもそのうち追記したいと思います。