Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@masatomix

FirebaseとGoogle Cloud Platform をさわれる環境を構築する

More than 1 year has passed since last update.

絶賛 Firebase 調査中です。そのさい、Qiitaの記事を書くときに毎回環境というかプロジェクトを構築する手順を書くのが面倒なので、この記事に環境構築手順を整理しておきます。必要に応じて適宜追加していくかもしれません。。

前提環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.3
BuildVersion:   18D42

$ node --version
v10.14.2    <-ホントはFunctionsとかのバージョンに合わせるべきなんだけどいったん気にしない :-)

$ brew --version (GCPのCLIをインストールするときに使用)
Homebrew 2.0.0
Homebrew/homebrew-core (git revision 175af; last commit 2019-02-02)
Homebrew/homebrew-cask (git revision 05a8; last commit 2019-02-02)
$

firebase-toolsのインストール

まずはfirebaseのコマンドライン。

$ npm install -g firebase-tools
$ source ~/.bash_profile
$ firebase --version
6.3.0

Firebaseにログイン

$ firebase login
? Allow Firebase to collect anonymous CLI usage and error reporting information?
 No

Visit this URL on any device to log in:
https://accounts.google.com/o/oauth2/auth?client_id=...   // OAuthでアクセスの認可まち

Waiting for authentication...

✔  Success! Logged in as masatomix@example.com

ためしにFunctionsをふくんだプロジェクト作成

$ mkdir fb_function_samples && cd $_
$ firebase init functions

     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########

You're about to initialize a Firebase project in this directory:
  /tmp/fb_function_samples
=== Project Setup

First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add,
but for now we'll just set up a default project.

? Select a default Firebase project for this directory: xxxxxx-xxxx (xxxxxx) ← 使用するプロジェクト選択
? What language would you like to use to write Cloud Functions? TypeScript   ← TypeScriptをえらんでみた
? Do you want to use TSLint to catch probable bugs and enforce style? Yes    ← Yesをえらぶ
? Do you want to install dependencies with npm now? Yes


✔  Firebase initialization complete!
$

ディレクトリ構成は以下のようになりました。

$ tree -a 
.
├── .firebaserc
├── .gitignore
├── firebase.json
└── functions
    ├── .gitignore
    ├── package-lock.json
    ├── package.json
    ├── src
    │   └── index.ts
    ├── tsconfig.json
    └── tslint.json

ちなみに Select a default Firebase project ってなに

ちなみに Select a default Firebase project for this directory で選択した情報は、

.firebaserc
{
  "projects": {
    "default": "xxxxxx-xxxx"
  }
}

と .firebaserc に書き込まれ、プロジェクトをデプロイするときに使用する下記のコマンドで

$ firebase deploy --only functions --project default

というように --projectオプションでデプロイ先のプロジェクトを指定するエイリアスとして使用できます。

プロジェクトのエイリアスは以下のコマンドで.firebaserc に追加することができるので

$ firebase use --add
? Which project do you want to add? yyyyyy-yyyyyyy
? What alias do you want to use for this project? (e.g. staging) test_env

Created alias test_env for yyyyyy-yyyyyyy.
Now using alias test_env (yyyyyy-yyyyyyy)
$ cat .firebaserc
{
  "projects": {
    "default": "xxxxxx-xxxx",
    "test_env": "yyyyyy-yyyyyyy"
  }
}
$

以下のように --project でエイリアスを明示的に指定することで、

$ firebase deploy --only functions --project test_env

デプロイ先を選択可能です。

ちなみに、エイリアスが複数あるときに --project 未指定のときのデプロイ先は、

$ firebase use
Active Project: test_env (yyyyyy-yyyyyyy)

Project aliases for /tmp/fb_function_samples:

  default (xxxxxx-xxxx)
* test_env (yyyyyy-yyyyyyy)

Run firebase use --add to define a new project alias.

で確認できます。またそのデフォルトの変更方法は以下。

$ firebase use default
Now using alias default (xxxxxx-xxxx)

$ firebase use
Active Project: default (xxxxxx-xxxx)

Project aliases for /tmp/fb_function_samples:

* default (xxxxxx-xxxx)
  test_env (yyyyyy-yyyyyyy)

Run firebase use --add to define a new project alias.

参考:

これで、あるGoogleアカウントにひもづいたFirebase環境に対して、Firebaseのプロジェクトを作成することができました。

Google Cloud Platform のCLIのインストール

Firebaseで作成されたプロジェクト、上記だと「xxxxxx-xxxx」「yyyyyy-yyyyyyy」とか書いてるヤツですが、これらは Google Cloud Platform (以下GCP) と共通化(?)されているようで、Firebaseにプロジェクトを作成すると、GCP側にもおなじプロジェクトが表示されます。

共通化ってはなしだと他にも、FirebaseのFunctionsは GCPがわのCloud Functionsと実質同じモノみたいだし、MySQLをつかおうとしてGCP側で課金をOnにしたら、同時にFirebase側の対応するプロジェクトも無料の Spark プラン から従量のBlazeプランに変更されたりしてました、、。

さてFirebaseをやってると、GCPの操作をしたいときもあり、なのでGCPを操作するCLIツール「google-cloud-sdk」も入れておきましょう。ちなみに直近GCPを操作するケースとして、Cloud Functions for FirebaseのPub/Subトリガーをつかおうとして、GCPのSDKからPublishコマンドを発行するケースがあったりしました。

ああ、あとFirebaseのFunctionsにはAWS LambdaのようなCron機能がないっぽく、2019/02/03時点ではβ版のCloud Scheduler ベータ版 を使用する事になりそうです。この操作もGCPのコマンドラインをつかうことになります。

さてインストールはMacのばあいですがHomebrewをつかいます

$ brew cask install google-cloud-sdk
$ gcloud init       ← OAuth認可画面で、アカウントを選択する
$ gcloud components install beta     ←β版機能を使うのに必要?

上記でアカウントとプロジェクトまで指定することになります。

あとはたとえば、

$ gcloud pubsub topics publish hogeTopic --message '{"name":"Xenia"}'

などとコマンドラインからPubSubへ(hogeTopicへ) Publishしたり、また

$ gcloud beta scheduler jobs list
ID         LOCATION     SCHEDULE (TZ)           TARGET_TYPE  STATE
test       us-central1  * * * * * (Asia/Tokyo)  HTTP         ENABLED
topicTest  us-central1  * * * * * (Asia/Tokyo)  Pub/Sub      ENABLED
$

などと、Cloud Schedulerの確認ができたりします。

--2019/09/21追記--
Google Cloud SDK のインストール/アンインストールメモ(公式バージョン)brew caskじゃない公式のインストール方法を整理しました。また2019/09/21時点スケジューラがベータじゃなくなってるようで、beta componentsの追加インストールなどは不要です。
--2019/09/21追記 以上--

参考):

まとめ

Firebase のコマンドラインツールと、Google Cloud Platform のコマンドラインツール をつかえる環境を構築する手順の整理でした。
この辺を整理したそもそもの目的は、Cloud Functions for Firebase にCrontab、、ようするにスケジュール設定をしようと調べてたら Google Cloud Platform のスケジューラ経由で Pub/Subでやるのがよさげ、、って結論になったからでした。。

FirebaseのFunctionsをスケジュール起動する方法は Cloud Functions for Firebase の関数をスケジューラから定期的に呼び出す に整理しました。

おつかれさまでした。

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
masatomix
JavaEEの開発やリッチクライアント開発のアーキテクトが専門でしたが、最近はRPAとAIがメイン。。。RPAはUiPathとOrchestratorの構築が中心です。 FirebaseとかOAuth/OIDCなど新しいモノ、あと数学もすき。 最近は UiPath Friends っていうユーザコミュニティにも関わってます。 あ、UiPath Japan MVP 2019,2020 す。
primebrains
プライム・ブレインズは、マネジメントスキルだけでなく、最新のITスキルを兼ね備えた技術者がお客様の立場でお客様と共に、成功に向けてプロジェクトを推進します。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?