LoginSignup
20
10

More than 5 years have passed since last update.

Google Cloud Functionsでバベる(Babel)

Last updated at Posted at 2017-03-12

概要

先日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

まとめ

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

20
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
10