5分でサーバレスを体験! Cloud Functions for Firebase を使ってみよう
近日、サーバレスアーキテクチャという言葉を耳にするようになりましたね。
サーバレスアーキテクチャとは、サーバを意識せずともアプリを作成できるアーキテクチャのことであり、サーバーレスコンピューティングサービスによりなりたっていることが多いです。
有名どころだと AWS Lambda や Google Cloud Functions などがあげられますね。
Faas( Function as a Service ) とも呼ばれることがあります。
また、少し似たもので、 Baas( Backend as a service )という提供形態も存在します。
Firebase が有名で、バックエンドをほぼ提供してくれるので、手軽な反面、自由度が低いという課題がありました。
その課題を解決するのが、今回ご紹介する「 Cloud Functions for Firebase 」です。
Firebase を使いたいけど、もう少し自由度も欲しいといった人向けのサービスです。
今回は Cloud Functions for Firebase の Functions を使うところまで見ていきましょう。
Cloud Functions for Firebase ってなに?
データベースへの書き込みやHTTPSリクエストなどのイベントをトリガーにしてコードを実行できる機能です。
サポート言語としては、 Node.js のみとなっています。
サンプルがいくつか用意されておりますので、下記の GitHub から確認できます。
https://github.com/firebase/functions-samples
※ 現在、 Cloud Functions for Firebase は Beta 版となっております。
Cloud Functions for Firebase を使ってみよう
Node.js, npm ともにインストールされており、 Firebase のアカウントを持っていることを前提としています。
Firebase の概要からアカウント作成までは下記の記事を参考に作成してください。
それでは、まず Firebase のプロジェクトを作成しましょう。
今回は、「 cloud-functions 」というプロジェクト名で作成しています。
外部と通信を行うため、プランを Spark から Blaze に変更しておいてください。
次は CUI 上で作業していきます。
お好きなディレクトリにプロジェクトを作りましょう。
mkdir cloud_functions
cd cloud_functions
次にFirebase にログインしましょう。
firebase login
Functions を追加していきます。
firebase init functions
Select a default Firebase project for this directory とでますので、
cloud-functions を選択してください。
すると、 functions というディレクトリが作成されますので、
移動して、 index.js が存在するのを確認します。
index.js を下記のように書き換えて下さい。
// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');
// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// Take the text parameter passed to this HTTP endpoint and insert it into the
// Realtime Database under the path /messages/:pushId/original
exports.addMessage = functions.https.onRequest((req, res) => {
// Grab the text parameter.
const original = req.query.text;
// Push the new message into the Realtime Database using the Firebase Admin SDK.
admin.database().ref('/messages').push({original: original}).then(snapshot => {
// Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
res.redirect(303, snapshot.ref);
});
});
// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
.onWrite(event => {
// Grab the current value of what was written to the Realtime Database.
const original = event.data.val();
console.log('Uppercasing', event.params.pushId, original);
const uppercase = original.toUpperCase();
// You must return a Promise when performing asynchronous tasks inside a Functions such as
// writing to the Firebase Realtime Database.
// Setting an "uppercase" sibling in the Realtime Database returns a Promise.
return event.data.ref.parent.child('uppercase').set(uppercase);
});
ここでは、 addMessage() というリアルタイムデータベースに書き込むためのURLを吐き出してくれる関数と
makeUppercase() というリアルタイムデータベースの書き込みをトリガーして、テキストを大文字に変換する関数を使っています。
実際にデプロイして、処理を見ていきましょう。
firebase deploy --only functions
デプロイが完了すると、URLが吐き出されます。
{URL} + ?text=uppercasemetoo
をブラウザで叩いてみましょう。
その後、 Firebase の管理画面に戻り、 Database を開いてみましょう。
original: “uppercasemetoo” と
大文字になった uppercase: “UPPERCASEMETOO” が保存されているのがわかります。
また、Functions のダッシュボードを確認しても、指定した関数が叩かれているのを確認できます。
少しですが、サーバレスを体験できましたね。
いかがでしたでしょうか?
今回はデータベースへの保存から大文字変換まで行いましたが、他にも、認証イベント、 分析イベントと様々なサンプルが用意されていますので、是非、試してみてください。
-
お問い合わせ
SiTest の導入検討や
他社ツールとの違い・比較について
弊社のプロフェッショナルが
喜んでサポートいたします。 -
コンサルティング
ヒートマップの活用、ABテストの実施や
フォームの改善でお困りの方は、
弊社のプロフェッショナルが
コンサルティングいたします。
今すぐお気軽にご相談ください。
今すぐお気軽に
ご相談ください。
(平日 10:00~19:00)
今すぐお気軽に
ご相談ください。
0120-315-465
(平日 10:00~19:00)
グラッドキューブは
「ISMS認証」を取得しています。
認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業
「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。