2018-10-09

firebase functionsでサーバレスAPI

JavaScript
Firebase
firebase functions

hello firebase functions

firebase で functions。
functionsfirebaseのサービスの中で、Node.jsによる関数を実行できるすごいやつです。
サーバサイドプログラムを動かすのに自分でサーバを用意する必要がないんです!

いままでherokuなどを使っていましたが、無料の spark 枠でも使えるので、簡単な API を作って動かしてみました。

firebase-tools のインストール

公式サイトに書いてあるとおりです。
npmyarnを使ってグローバルにインストールします。

npm install -g firebase-tools  

functions を使う準備

使いたいプロジェクトで以下を実行。
ウィザードに従って、JavaScript か TypeScript か選べぇ?

firebase init functions  

これで空のfunctionsディレクトリが作成される。

関数の作成

functionsディレクトリが作成されたら、直下にindex.jsを作成。

const functions = require('firebase-functions');  

// 受け取ったメッセージをJSONに詰めて返すだけの関数  
exports.echoMessage = functions.https.onRequest((req, res) => {  
	res.json({echo: req.query.text});  
	res.end(); // Responseオブジェクトを閉じておかないと怒られる  
});  

ローカルテスト

ちんけなプログラムなので、そのままノーテストでデプロイしてもいいけど、一応ローカルで動作確認。

firebase serve --only functions  


=== Serving from '/Users/nekoha/develop/hexo-blog'...  

i  functions: Preparing to emulate functions.  
Warning: You're using Node.js v9.11.2 but Google Cloud Functions only supports v6.11.5.  
✔  functions: echoMessage: http://localhost:5000/[プロジェクト名]/us-central1/echoMessage  
info: User function triggered, starting execution  
info: Execution took 14 ms, user function completed successfully  
info: User function triggered, starting execution  
info: Execution took 1 ms, user function completed successfully  

自作 API の URL が表示されています。
今回だとhttp://localhost:5000/[プロジェクト名]/us-central1/echoMessageで待ち受けていますね。

クエリパラメータを受け取って返す関数なので、curlコマンドから?text=helloworldを付けて実行してみましょう。
[プロジェクト名]のところは自分のプロジェクト名が入っているはずです。

curl http://localhost:5000/[プロジェクト名]/us-central1/echoMessage?text=helloworld  
# {"echo":"helloworld"}  

{"echo":"helloworld"}と表示されれば成功です!

デプロイ

firebase deploy --only functions  

デプロイが成功すると、アクセスするための URL が表示されます。
これをメモっておきましょう。
忘れても大丈夫。プロジェクトコンソールからも確認できます。

動作確認

いよいよ動作確認です。
先程メモった URL をcurlコマンドからリクエストします。
クエリパラメータ?text=helloworldを付けて実行してみましょう。

curl https://us-central1-[プロジェクト名].cloudfunctions.net/echoMessage?text=helloworld  
# {"echo":"helloworld"}  

{"echo":"helloworld"}と表示されれば成功です。
大したこともせずに API を作成することができました!


猫派 / 基本インドア / ガジェット大好き / RDP推進派
コロナ禍の趣味はPC+VRでゲーム。
最近のゲーム:Factorio / BeatSaber / にゃんこ大戦争

→ Policy