なんかいろいろあって 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 かというと話なんだけど、そこまでやらないといけないってのもちょっとなぁという感じ。
require する側が自由に名前を決められるのがメリットなんだと思ってた。 ↩