# Google Cloud Functionsをローカル環境でエミュレータを使い開発、デバッグする

Google Cloud Functionsをローカルで開発、デバッグできるようにする。 まずはGoogle Cloud Functionsをローカルで開発できるようエミューレータをインストールし、そのあとにVisual Studio Codeでデバッグできるようにする。

# Google Cloud Functionsをローカルで動かす

Google Cloud Functionsをローカルで動かすために、エミューレータをインストールする。

$ npm install -g @google-cloud/functions-emulator

インストールできていることを確認する。

$ functions --help

確認用の関数を用意する。(ここでexportsしたhelloGET関数をGoogle Cloud Functionsに登録する) index.js

exports.helloGET = (req, res) => {
  console.log('I am a log entry!');
  console.error('I am an error!');
  res.send('Hello World!');
};

エミュレータを起動する。

$ functions start

functions deploy 関数名 トリガーで関数を Google Cloud Functionsに登録する。 HTTPアクセスで関数が動くことを確認するため、トリガーは--trigger-httpを指定する。

$ functions deploy helloGET --trigger-http

デプロイが終わるとURLが表示されるので、そのURLをcurlでたたく。

Resource   │ http://localhost:8010/techblog-111111/asia-northeast1/helloGET

res.sendで指定していたHello World!が返ってきている。

$ curl http://localhost:8010/techblog-111111/asia-northeast1/helloGET
Hello World!

さらに、functions logs readでログを確認する。 関数が起動したことが分かり、infoerrorそれぞれのログが出力されていることを確認できる。

$ functions logs read
2019-04-24T11:53:24.949Z - info: User function triggered, starting execution
2019-04-24T11:53:24.949Z - info: I am a log entry!
2019-04-24T11:53:24.950Z - error: I am an error!
2019-04-24T11:53:24.956Z - info: Execution took 8 ms, user function completed successfully

# Visual Studio CodeでGoogle Cloud Functionsをローカルでデバッグする

functions inspect 関数名によりデバッグでつかうポートが表示される。

$ functions inspect helloGET
Debugger for helloGET listening on port 9229.

Visual Studio Codeを開き、index.jsの行をダブルクリックしてデバッグポイントを追加しておく。 デバッグポイントを追加する

次にデバッグの設定をしていく。
「デバッグ」から「構成を開く」をクリックする。
構成の追加を選択

launch.jsonが開かれるので、次のような値を設定する。

  • type:node
  • request:attach
  • name: 任意の名前
  • protocol: inspector
  • port: 9229(エミュレータで表示されたポート)

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Inspect Function",
      "protocol": "inspector",
      "port": 9229,
    },
  ]
}

サイドナビからデバッグアイコンをクリックする。
デバッグアイコン

デバッグ構成に先ほど追加した「Inspect Function」を選択し、緑色の実行ボタンをクリックする。 追加したデバッグ構成を選択する

デバッグが始まるとVisual Studio Codeの下の方がオレンジ色になり、デバッグ中であることがわかるようになる。
デバッグモード

curlで関数を実行すると、次のようにデバッグポイントで処理が止まり、ローカルのGoogle Cloud Functionsをデバッグすることができる。
デバッグモードでストップしている状態

・参考
https://cloud.google.com/functions/docs/emulator?hl=ja (opens new window)
https://cloud.google.com/functions/docs/monitoring/logging (opens new window)
https://github.com/GoogleCloudPlatform/cloud-functions-emulator/wiki/Debugging-with-Visual-Studio-Code (opens new window)