Google Cloud Functions Emulator動かしてみた

なんかいろいろあって Google Cloud Functions 試そうと思って、まずは Emulator 使ってみようと思ったんだけど、試すというよりは動かすまでで力尽きたのでそのメモ。

–local-pathオプションが消えててハマった

Cloud Functions ローカル エミュレータ  |  Cloud Functions のドキュメント  |  Google Cloud

なんかプロジェクトっぽくディレクトリを切って作業する場合、普通はカレントディレクトリにいきなりコード置かないよね。で、その状態だとどうしても deploy できなくて、いろいろ試した結果、

–local-path という option は beta から消えてる

ことが分かりましたとさ。

1.0.0-beta.1 (#177) · GoogleCloudPlatform/cloud-functions-emulator@04ec0b0

なるほど。deploy できるようになって確認すると、マジで急に local-path という「オプション」だけが消えてて、functions list と打った時に出てくる情報としてはやはり Local path のままなので、明確なポリシーじゃないのかな?

この変更は2月に入ってるのにドキュメントが追いついてないし、2018-06-04 時点でまだ Functios Emulator は世界的にも使われてないのか? option が変わるって割と大きな変更だと思うんだけど、話題を見ない。

とりあえず Google には Feedback しといたので、そのうちドキュメントかコードかどっちか分からないけど直るんじゃないかな。

Functionの名前をexportsしろ

Functions のサンプルコードって、こんななんだけど、

exports.helloHttp = (req, res) => {
  res.send(`Hello ${req.body.name || 'World'}!`);
};

Node.js のコードは基本的に書いてこなかったので、exports で名前を明示するのを見る機会が全然なく、なんだこれと思ったわけ。1

で、試してみると名前を明確に exports しないと

$ ./node_modules/.bin/functions deploy hello --trigger-http
ERROR: Error: Node.js module defined by file index.js is expected to export function named hello

という感じで怒られる。

deploy したい function の名前と exports する名前を合わせておけ

というルールらしい。なるほど。

global installはzshと相性が悪い

これは単純にこういう話

$ which functions
functions: shell built-in command

functions-emulator もあるのでそっちが使えるんだけど、すげー長い。じゃあ alias かというと話なんだけど、そこまでやらないといけないってのもちょっとなぁという感じ。

  1. require する側が自由に名前を決められるのがメリットなんだと思ってた。 

More