Loading
BLOG 開発者ブログ

2018年8月16日

Cloud Functions for FirebaseでNode.js v8を使ってみる

こんにちは。

クラウドソリューショングループのwatanabe.tです。

7/24-26にサンフランシスコで行われたGoogle Cloud Next ’18では様々な発表がありましたね。

今回はその中でも興味深かった、Cloud FunctionsのNode.js v8サポートについてお話します。


事前準備

Cloud Functions for FirebaseでNode.js v8をサポートする上でいくつか準備して置かなければいけないことがあります。

Node.js v8のインストール

Cloud Functionsを利用してアプリケーションを構築する上で、ローカルでのデバッグは必須です。

そのためにも今回の実行環境であるNode v8.11.1を入れておきましょう。

Windowsを使っている人は公式ページから、macを使っている人はnodebrewを利用すると良いでしょう。

firebase-toolsのインストール

Node.jsをインストールできたら、firebaseの諸々の操作をするためにfirebase-toolsをインストールしておきましょう。

npm install -g firebase-tools

firebase-toolsの細かいセットアップについてはコチラ

プロジェクトのセットアップ

firebase toolsのインストールが完了したら、プロジェクトのセットアップを行います。

firebase init functions


関連付けるプロジェクト、使用言語(今回はJavaScript)、ESLintの使用の有無を選択するとセットアップの完了です。

functionsディレクトリの中にpackage.jsonが生成されていることを確認してください。


Runtimeの変更

プロジェクトのセットアップが完了したら、Node.js v8を利用するための設定を変更します。

といっても、 package.json に以下を追加するだけのシンプルな作業で完了です。

参考 : firebase/firebase-tools

"engines": {
  "node": "8"
}


これだけだと少し分かりづらいので、前後の設定も載せておきます。

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "engines": {
    "node": "8"
  }
}



デプロイしてみる

設定が有効になっているか、実際にデプロイして確認してみましょう。

Node.js v8で使えるようになった機能の一つに、async/awaitがあります。

これを確認するため、index.jsを以下のように書き換えてみました。

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

const sleep = async (time) => {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, time);
  })
}

const greet = async (members) => {
  for (let i = 0; i < members.length; i++) {
    const result = await sleep(5000);
    console.log(`Hello, ${members[i]}`);
  }
}

exports.helloWorld = functions.https.onRequest((request, response) => {
  const members = ['Ken', 'Bob', 'Tom'];

  greet(members);

  response.send("Hello from Firebase!");
});


ここまでできたらfunctionsをデプロイします。

firebase deploy --only functions


デプロイが完了するとFirebaseのコンソールからエンドポイントが確認できます。

そこにcurlなどでリクエストを投げてみると、すぐにレスポンスが返ってきます。

Firebaseコンソールからログを確認すると、下図のようにデバッグログが一定時間を空けて順に表示されていることがわかります。

これでasync/awaitが効いていることが確認できました。




まとめ

やっとCloud FunctionsがGAになっただけでなく、Node.js v8にも対応してくれました。
(ただしGAはNode.js v6のみ、v8はベータ版です……)

これで本格的にCloud Functionsをアプリケーションに利用することができますね。

まだまだ進化するGCPファミリーからまだまだ目が離せません!



watanabe.tのブログ

クラウドソリューショングループ所属

昔はモバイルアプリ開発を、今はGCP, AWS, Firebaseなどのクラウド周りの提案/開発を行っているエンジニアです。

AWS認定ソリューションアーキテクト取得しました!