webとモバイルアプリの逆転

webアプリとモバイルアプリの開発に関する話や本・ゲームなどの趣味の話を雑多にしていきたい

Typescriptからトランスパイルして生成した関数をGCPのCloud Functionsにローカルからデプロイする際に関数が見つからないとエラーが出されたときに対処したこと

Typescriptで記述した関数をトランスパイルして用いてCloud Functionsで動作させようとした際に、 対象の関数が見つからず以下のようなエラーが吐かれることがありました。

OperationError: code=3, message=Function failed on loading user code. Error message: File index.js that is expected to define function doesn't exist.

ローカルエミュレーターでは問題なく動いていたので関数は存在しているのですが、見つからないと言われてしまった状況です。 そのとき確認したことをメモ。

原因

原因としては、.gcloudignoreの設定のせいでindex.jsがアップロードされなかったためでした。 なぜこうなってしまったのかとその対処を記述していきたいと思う。

対処

gcloudコマンドからデプロイしようとした際に.gcloudignoreが自動生成されました。 そのファイルには、デフォルトで.gitと.gitignore、node_modulesをデプロイ対象から外すように設定されていました。 通常なら問題なさそうなのですが、今回はTypescriptで記述していたためビルドで生成されるjsファイルも.gitignoreに記載していました。 そのため、jsファイルがデプロイされず、対象の関数が見つからないというエラーが発生していました。

対処としては単純に、今回は以下の記述を.gcloudignoreに加えることでビルドで生成されるjsファイルもデプロイできるようにしました。

!include:.gitignore

jsファイルがアップロードできたことで、Cloud Functionsで関数を動かすことが無事にできました。 自動生成された設定ファイルが何をしているのかをちゃんと理解しておくことが重要だな…と反省しました。

ちなみに今回は.gitignoreの設定が反映されてしまったためが原因でしたが、他にもpackage.jsonの設定が間違っているせいで関数がみつからないこともあるみたいです。 同じようなエラーが出た際にはそちらの設定も見てみると良いみたいです。