Node.js
babel
GoogleCloudFunctions

Google Cloud Functionsでバベる(Babel)

More than 1 year has passed since last update.


概要

先日Google Cloud FunctionsのBetaがリリースされました。

実行エンジンのNode.jsのバージョンは現在6.9.1(2017/03/12時点)ですが、async/await等の更に新しい構文を使いたい場合はBabelを利用する必要があります。今回はBabelでコンパイルしてデプロイが出来るようにしてみたいと思います。


Babel設定

以下、Babel関連のライブラリと設定ファイルです。


package.json

{

...
"devDependencies": {
"babel-cli": "^6.23.0",
"babel-core": "^6.23.1",
"babel-loader": "^6.3.2",
"babel-preset-es2015": "^6.22.0",
"babel-preset-es2016": "^6.22.0",
"babel-preset-es2017": "^6.22.0",
"babel-register": "^6.23.0"
},
...

.babelrc

{

"presets": [
"es2015",
"es2016",
"es2017"
]
}

ES2015, ES2016, ES2017のPresetが使えるようにしています。

npm installしておきます。

npm install


Functionコード

FunctionのタイプはHTTPをトリガーにしたものとBackgroundで起動するものとありますが、今回はHTTPのものを作成します。ソースコードはsrcディレクトリ以下に配置します。


src/index.js

import uuid from 'uuid'

export const helloBabel = (req, res) => {
res.send(`Hello babel gcf! - ${uuid()}`)
}


依存ライブラリを追加した場合の動作も確認するため、

Handling Dependencies  |  Cloud Functions Documentation  |  Google Cloud Platform

の例に参考にし、uuidを利用しています。

npm install uuid --save


Bucketを用意

デプロイ前に、Functionを配置するためのBucketを用意しておく必要があります。

PROJECT_ID=your-project

BUCKET_NAME=your-bucket

gsutil mb -p $PROJECT_ID gs://$BUCKET_NAME

※gsutilコマンドを使うにはCloud Tools をインストールする必要があります


デプロイ

Google Cloud Functionのデプロイコマンド(gcloud beta functions deploy)では、index.jsファイルが直下に配置されていることを想定しているようです。どのfunctionを起動させるかfunction名を指定することはできるんですが、ファイルパスを指定することは出来無さそうでした(出来るなら知りたいです..)。

※2017/10/02 コメントで指摘頂き修正しました。package.jsonの"main"で対象ファイルパスを指定可能です。

package.jsonのscriptsに以下のスクリプトを登録しておきます。


package.json

{

...,
"scripts": {
"clean": "rm -fr ./dist",
"transpile": "babel src --out-dir dist",
"deploy": "npm run clean && npm run transpile && gcloud beta functions deploy hello-babel-gcf --entry-point helloBabel --stage-bucket hello-cloud-functions --trigger-http"
},
...
}

npm run deploy

でデプロイ実行できます。


Functionの実行

HTTPでリクエストを送ってみると、以下のように結果が返ってくることが確認できます。

$ curl https://us-central1-cloud-function-sandbox.cloudfunctions.net/hello-babel-gcf

Hello babel gcf! - 790c9410-9b2a-4593-b86f-fca40375e8ff


まとめ

ひとまずこれでバベることが出来るようになりました。