Firebase Functions の前に Firebaseってなに?
Firebase Functions の説明をする前に、FirebaseというGoogleが提供しているサービスの概要を説明します。
Firebase をWebで調べてみると、どうもmBaaS(mobile Backend as a Service)とかいうサービスの種類なんだとか。Mobile Backend とか言っていますが、別にモバイル用途でなくても利用することができます(現に、このシリーズではWebスクレイピングの用途で使おうとしています)。
Firebaseの中には、いろんなサービスがあります。全てではないですが、イメージが付きやすいものを挙げると以下のようなサービスがあります。
サービス名 | 概要 |
Cloud Firestore | データベースを提供する。 MySQLのようなリレーショナルDBではなく、ドキュメントデータベース。つまりNoSQL。 |
Realtime Database | Cloud Firestore の前身。これからはFirestoreを使うことが推奨されているらしい |
Firebase Cloud Storage | ユーザーがアップロードした画像や動画などのファイルを保存することができる |
Firebase Hosting | 静的ファイル(htmlなど)をホスティングできる |
Cloud Functions | Web APIを公開できる |
※上の表にある通り、Firebase Functions とは、Firebaseサービスのうちの一つのサービスというか、機能の名前となります。
参考までに、Firebaseでプロジェクトを作成すると以下のようにWebのコンソール画面でプロジェクトを管理できるようになります。
Firebase の特徴
上記のようにFirebase にはたくさんの機能があるのですが、どこがそんなに特別なのでしょうか?
Firebaseの特徴を見てみましょう。
Firebaseの大きな特徴は、ホスティング環境を自分で用意する必要がないところですね。自分が実装したプログラムファイルは、全てGoogleのホスティング環境に保存されて、Googleのどこかのサーバで実行されるので、サーバーが落ちるなんていう事を心配する必要がなくなります。
そもそも自分でサーバーを立てなくて良いのは楽で良いですね。
もういちいちApacheの設定ファイルいじらなくて良いんです。
PHPやMySQLインストールしなくていいんです。
SSLだってインストールしなくていいです。
いや、これほんと楽ですねー。
なので、サービスを早くリリースしたい時や、個人利用の小さなアプリを公開したいといった用途ならFirebaseを使うのは非常に良い選択肢となるでしょう。
ただ、大規模開発に向いていないかと言うと、判断は少し難しいです。
リソース面、例えば大量のリクエストをさばけるかどうかという観点で言えば、おそらく「心配ない」という事になりそうな気がします。何しろGoogleがホスティングしているのですから。同時にHDDの容量なども気にする必要はありません。ただし、CPUもHDDも、使った分だけ課金されることは肝に銘じておきましょう。
次に、システムの可用性というか、柔軟性という観点で考えると、こちらは少し難がありそうです。正直、自分でサーバを立てるような場合に比べると、色んなところで制限を受ける場合がありそうな予感がしています。例えば特殊なプログラムをバッチで走らせるとか、普通ならシェルで呼び出せるところが、そう簡単にはできそうにないような気がしています。まあ、これはあくまでも私個人の印象ですが、、、
Firebase の料金
2020年11月現在、FirebaseにはSparkプランとBlazeプランが存在しています(*)。Sparkプランは無料だが利用制限があり、Blazeプランは従量課金制のプランとなります。
この二つのプランは、プロジェクトを立ち上げた後にいつでも相互に切り替えることができます。
で、無料のSparkプランと従量課金のBlazeプランではどちらが良いの?という話になります。
先に結論を言うと、「Blazeプランの一択」となります。その主な理由は以下です。
- Sparkプランでは外部リクエストを投げることができない
- SparkプランではNode.js 10が使えない
- Blazeプランを採用しても、従量課金制なのでほとんど料金が発生しない
今回はスクレイピングが目的なので、Firebase Functionsを使って外部サイトにHTTPリクエストを投げる必要があります。なので、そもそもBlazeプランでないと、この目的を達成することができません。
また、FirebaseでFirebase Functionsを使う場合、Node.jsを使うことが前提となります。その場合にデフォルトでインストールされるのがNode.js 10となっています。そして、Node.js 10以上を使いたいならBlazeプランにしなさい、という警告が出ます。デフォルトでNode.js 10が選択されるのに、有料のサービスへの登録が強制されるのはちょっと納得できない部分もありますが、仕方ないです。なので、「Firebase Functionsを使うなら必然的に従量課金制のBlazeプランが必須」となることを覚えておきましょう。
ただ、従量課金制なので、あくまでも使った分しか請求されません。しかも、多くの機能では無料枠が用意されているので、個人利用レベルなら実際に請求される額は「思ったより少ない」と思ってもらって良いと思います。まあ、たぶん多くてせいぜい300円/月くらいだと思います。
実際の価格はFirebaseの料金設定から確認することができます。
また、プロジェクトをSparkからBlazeに変更する時に、請求額のアラートメールを設定することができます。例えば、下のように1ドルで設定した場合、課金額が0.5ドル時と0.9ドル時に達した時、警告メールが飛んでくるようになります。
この機能を利用すれば、思った以上に請求されるという事故を防ぐことができます。ただ、これは警告メールが飛んでくるだけなので注意です。メールが飛んで来ても勝手にサービスを止めてくれるようなことはありません。自分でサービスを停止するとか、機能を制限するとかして使用量を減らす必要があります。
で、Firebase Functionsって結局なに?
さて、ここまで何も考えずにFirebaseについて書いてきましたが、この記事の本題はFirebase Functionsだったという事に今気が付きました。
最初の方で少し触れましたが、Firebae FunctionsはFirebaseのサービスのうちの一つの機能に過ぎません。
私の浅い理解によると、Firebase Functionsを使う事で、サーバーサイドのプログラムをサクッと実装することができるようになるのかなと思います。
これに対して、Firebase Hostingでサーバーサイドの実装ができないとかというと、実はそうでもありません(ややこしい)。Firebase Hostingは、基本的には静的なサイトを配置することを目的としていると思います。HTMLベースなので、Javascriptで動きを作ることができます。で、そのJavascriptからバックエンドとの通信を可能にするライブラリがFirebaseから提供されているので、Firebase Hostingからでもサーバーサイドの処理っぽいものを作ることは可能だと思います。
それでもなお、Firebase Functionsを使いたい理由は、何と言ってもNode.jsのモジュールが使える、という点でしょうか。Node.jsでは、世界中のプログラマが便利なモジュール(パッケージともいう)を公開してくれています。それらを効率よく管理するために、NPM(Node Package Manager)という、Node.js用のパッケージを管理するシステムが提供されています。これによって、Node.jsを使った開発の効率が非常に良くなります。
Firebase での開発はコマンドライン操作が必須
Firebaseで開発するにあたって特徴的な点として、コマンドラインでプロジェクトを設定していく、という点があります。私は基本Windowsでしか開発しないので、Macの方はどうなのか分かりませんが、WindowsでFirebaseの開発をするにあたって、色んなツールをPCにインストールするとことから始まります。
そして、Firebaseのプロジェクトを作る時は、Power Shellを立ち上げて、Firebase用のコマンドを入力することでローカルPCにプロジェクトを作成していくことになります。
そして、ローカルで開発が終わったら、最後にこれまたPower Shellでコマンドを入力することによってFirebase環境にプロジェクトをアップロードするような流れになります。なので、従来のようなFTPソフトは必要ありません。その代わりコマンドラインでの操作には慣れておいた方が良いかもしれません。
あとがき
さて、こんなところでFirebaseとFirebase Functionsの説明を終わりたいと思います。主観が入っているので、間違っているところも多くあるかもしれませんが、そんな時は「こんなおかしな考え方するプログラマがいるんやなー」くらいにさらっと流して頂けると幸いです。
コメント