【Firebase】Docker Composeを用いてFirebase CLI環境構築&Hello Worldを行っていく

はじめに

こんにちは、がんがんです。前回の記事でCloud Firestoreの実験を行っていきました。前回の記事は下記を参照ください。
gangannikki.hatenadiary.jp


今回は前回の予告通り、Cloud Functions for FirebaseHello Worldを行っていきます。

使用環境

目的

  • Docker Composeを用いてnode.js + firebase cliの環境を構築する
  • firebase cliにてHello Worldを行う

公式ドキュメント

firebase.google.com

環境構築

docker-compose.yml

version: '3'

services:
  app:
    build: .
    container_name: firebase-test
    ports:
      - 9005:9005
    volumes:
      - ./app:/app
    tty: true
    stdin_open: true
    command: /bin/sh

Dockerfile

Cloud Functions for FirebaseにおけるNode.jsのサポートバージョンは8と10と記載されていました。そんため、今回は10のバージョンを使用しています。

FROM node:10.18-alpine

WORKDIR /app

RUN apk update && \
    npm install -g npm \
    npm install -g firebase-tools \
    && rm -rf /var/lib/apt/lists/*

Dockerの立ち上げおよびfirebaseのログイン

docker-compose exec app shでコンテナ内に入り、プロジェクトの作成を行っていく。プロジェクトはすでに作成済みのプロジェクトに接続していきます。

$ docker-compose build && docker-compose up -d

$ firebase login --no-localhost
#  最初の質問
? Allow Firebase to collect CLI usage and error reporting information? (Y/n)
#  指示1
Visit this URL on any device to log in:  (このリンクにアクセス)
? Paste authorization code here: (ブラウザに表示されたコードを貼り付け)

ログイン時にSuccess!が返ってくればOKです。

firebase functionsのプロジェクトを作成していく

参考サイトを参考にしてプロジェクトを作成していきます。
firebase.google.com

$ firebase init functions

通常の生成時にはStorageやHostingなどの選択が行えますが、今回はfunctionsの実験をしたいので上記のようなコマンドとなりました。
基本的にすべてYを選択していき、言語もJavaScriptを選択しました。

deployしてみる

Hello World用のindex.jsをデプロイしてみます。

$ firebase deploy --only functions

デプロイしようとすると、下記のようなエラーが出ました。

Error: An unexpected error has occurred.

いろいろと調べてみると、下記の方がまとめていましたのでこちらを参考にしました。
qiita.com


しかし、これでも上記のエラー文は解決せずHello WorldのURLは表示されませんでした。
Dockerで使用しているnodeのバージョンは10でした。そのため、package.jsonのenginesのバージョンを変更してみました。

すると、エラー文は消えないもののデプロイは完了しました。Firebaseコンソール経由でURLを特定し、アクセスすると無事に下記の結果となりました。

f:id:gangannikki:20200223021138j:plain
URLのアクセスした結果


無事にアクセスして理想の結果が表示されてよかったです。

メモ1:firebase loginのオプションについて

# firebase login -h
Usage: firebase login [options]

log the CLI into Firebase

Options:
  --no-localhost  copy and paste a code instead of starting a local server for authentication
  --reauth        force reauthentication even if already logged in
  -h, --help      output usage information

エラー1:Error: An unexpected error has occurred.

これについては後ほど改善して記していきたいと思います。

おわりに

今回はFirebase CLIの環境をDockerを用いて構築していきました。割と苦戦もしましたが、これはJSに対する慣れの問題かなと思ってます。
次回はFirebase CLI on Docker環境を用いて、Cloud Functions for FirebaseCloud Firestoreの実験を行っていきます。

[Update 02/25]
次回の更新記事はこちらです。
gangannikki.hatenadiary.jp