🤤

PHPer だって、 Firestore を使いたい!

2022/06/23に公開

はじめに

いや、とうぜん使えるんですが、ほとんどの PHPキッズ たちは Firestore が使えないと思います。日本において、 PHPキッズ たちが気軽に Firestore をつかったら GDP は跳ねる訳です。 日本政府 や Google日本 はその点勉強が足りない訳です。電車に乗ってたらとなりのおじさんがそのように言ってました。さだかではありませんが、では私が一役買いましょう。

Firestore どころじゃない

まずですが、Firebaseに入って、プロジェクトをつくって、Firestoreでコレクションとかドキュメントとかポチポチいじって試してください。NoSQLの世界です。
ここまではいいですか?

Firebaseのプロジェクトの設定で、サービスアカウントに遷移します。
で、ここからGoogle Cloud Platformに移動します。

この経路でなくてもいいです。 Google Cloud Platform がちょい罠なのは、最近のプロジェクトといういらん機能があるせいで、触ったことがないPJTがまるでないかのような挙動をします。

なので、そういう経路で行く方法もあるよってだけですが、これしらんと「あれ?プロジェクトがない?どうやって紐づけるの?ってなります」

で、もう権限周りは設定できていると思うので、IAMはとばしまして、GSCのサービスアカウントに移動します。で、キーがありませんってなってるとおもうんで、「firebase-adminsdk」の方を選択します。で、キーのタブをクリック。ここで鍵を新規に追加して、jsonでダウンロードしてください。1度しか落とせないので、ごちゃついたらキー削除して取り直すしかないので注意してください。

さて、ここまではFirebase Firestore と Google Cloud Platform の物語です。

PHPがだめなのか、キミがダメなのか。

Googleは BigQuery 以上に僕たちに厳しいです。

以前の BigQuery 以上に、おまけのインストールが必要で、「gRPC for PHP」ってものをいれます。

https://cloud.google.com/php/grpc#centos-rhel-7

言われた通りでできましたので、そんなに難易度は高くないですが、ちょっとコマンドの意味が分かりません。

$ composer require google/cloud-firestore --ignore-platform-req=ext-grpc
$ pecl install grpc
# touch /etc/php.d/00-grpc.ini
# vi /etc/php.d/00-grpc.ini
$ cd /composer/no/aru/basho...
$ composer require "grpc/grpc:^1.38"
$ composer require "google/protobuf:^3.17"
# systemctl restart php-fpm
# systemctl restart httpd

こんな感じのコマンドを打たされます。00-grpc.iniは適当に命名しました。中身は

#https://cloud.google.com/php/grpc#centos-rhel-7
extension=grpc.so

とだけ書いてます。さて、次はPHPです。

PHP書いてもいいですか?

参考文献はCloud Firestore for PHP
https://github.com/googleapis/google-cloud-php-firestore

とくにここ
https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/firestore/src/setup_dataset.php

今回は書き込むところまでです。

require '/../../../vendor/autoload.php';
use Google\Cloud\Firestore\FirestoreClient;
putenv("GOOGLE_APPLICATION_CREDENTIALS=/../../../../ダウンロードしたjsonサービスキー.json");

ここで生成できるかどうかが肝です。

$db = new FirestoreClient([
	'projectId' => "Firebaseのプロジェクト",
]);

これが問題なければ、上のgithubサンプルコピペを実行してみてください。

$docRef = $db->collection('samples/php/users')->document('lovelace');
$docRef->set([
	'first' => 'Ada',
	'last' => 'Lovelace',
	'born' => 1815
]);

ね。

Discussion