ローソンデジタルイノベーション テックブログ

ローソンデジタルイノベーション(LDI)の技術ブログです

Cloud Functions と Cloud Firestore の社内利用例のご紹介

ローソンデジタルイノベーション(LDI)のiOS/Android開発マネージャーの阪口です。

今回は、Cloud Functions と Cloud Firestore の社内利用例についてご紹介させていただきます。

はじめに

以前にこちらの記事で、在宅勤務報告システム全体のシステム構成についてご紹介させていただきました。

techblog.ldi.co.jp

今回は、以下のCloud Functions と Cloud Firestore の構成にフォーカスしてシステムを紹介させていただきます。

Cloud Functions で Cloud Firestore のデータを取得する

背景と目的

在宅勤務報告システムでは、データを Cloud Firestore へ保存しています。

開発当初は、Flutter で実装した Webアプリケーションから直接 Cloud Firestore へアクセスしていました。

しかし、

  • 取得データの整形をWebアプリケーション内部ではなく、Webアプリケーション外部に責務を持たせることで柔軟性を上げたい!
  • Cloud Functions の利用にチャレンジしたい!

の声が有り、今回の Cloud Functions 経由で Cloud Firestore のデータを取得する構成で実装することになりました。

対応方法

Cloud Functions の関数は Node.js で実装しました。

Node.js で Cloud Firestore へアクセスして値を取得します。

取得後は、クライアントへ渡すデータ形式に整形し、Cloud Functions の関数の戻り値として返却します。

Node.jsの実装イメージ

index.js

process.env.TZ = "Asia/Tokyo";
const functions = require("firebase-functions");
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)

// 関数定義
const api1 = require('./sample');
exports.sample = api1.onRequest;

sample.js

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const db = admin.firestore();
const minInstancesConfig = 1; // 最小インスタンス数

exports.onRequest = functions.region('asia-northeast1').runWith({
    minInstances: minInstancesConfig,
}).https.onRequest((request, response) => {

    response.set('Access-Control-Allow-Headers', '*');
    response.set("Access-Control-Allow-Origin", "*");

    const json = JSON.parse(request.body);

    // Firestore からデータ取得
    const ref = db.collection('xxx').doc('yyy').collection('zzz');
    
    const returnData = // レスポンスの整形をここで実施する
    
    response.json(returnData)
  });

困ったところ

Cloud Functions で JWTを対応するにはどうしたらいいか工夫が必要でした。

JWT対応については、後日記事を公開予定です。

最後に

私は iOS/Android開発がメインですが、専門領域外でも興味があればチャレンジできるチャンスが LDI にあります。

LDIに興味が出てきた方、または応援いただける方は是非「読者になる」で応援していただけますと嬉しいです!