
Symfony5.4 + kreait/firebase-bundleでFirebase emulatorを使ってみた
PHPでFirebase emulatorが使えない問題で頭を抱えていた方も多いかと思います。
ただそれは kreait/firebase-php
のバージョンが6.2までの話です。
なんと気づいたら 6.3からはFirebase emulatorがサポートされていました。
(※全部コードリーディングしてませんが、少なくともAuth関連は対応していました。)
ということでSymfony5.4 + kreait/firebase-bundle + docker composeの対応をしてみたので、その作業ログを書きたいと思います。
最新のkreait/firebase-bundleに更新する
すでにfirebase-bundleが入っている場合は composerの w
オプションつけて更新しましょう。
|
|
Dockerfileを用意する
- ./docker/firebase/dockerfile
- ./docker/filrebase/firebase.json
を用意します
|
|
|
|
今回はAuthしか使いませんが、必要な機能に応じてfirebase.jsonを変更すればいいかなと思います。
docker-compose.yamlの修正
|
|
Symfony側でエミュレータに接続する
これは環境変数で切り替える事ができます。nodeのadmin sdkと同じです。
|
|
で切り替えらえられるかと思います。
注意点
自分もドハマリしました。
コンテナ内から接続してるFirebase emulatorとコンテナ外から接続するFirebase emulatorが違ってる謎...解決できない。。。
— ポリドッグ@PartyHard Inc. (@polidog) May 10, 2022
kreait/firebase-bundleはcredentials.json(サービスアカウントの秘密鍵)が必要になります。
なのでFirebaseでプロジェクトを作る必要があるのと、そのプロジェクト名と firebase emulators:start
時に指定するプロジェクトIDを一致させる必要があります。
phpのランタイムをdockerで動かしている場合にemulatorか実際のFirebaseかを切り替える方法
自分の場合はenv_fileを指定して、環境変数を設定できるようにしています。
|
|
.env.docker側に以下のように書いています。
|
|
これで作業するメンバーごとにエミュレータ or 実際のFirebaseに接続するかを簡単に切り替えることができます。
ただし値が反映されるタイミングがコンテナ起動時なので、.env.dockerの設定を変えたらコンテナを再起動する必要があります。
最後に
ついにPHPでもFirebase emulatorが使えるようになりました。
ぜひ皆さん試してみてください。