「GoogleJsonResponseException」という、いかにもJSON関連のエラーっぽいエラーが出ました。過去に動いていたソースコードをそのまま実行したのに、いきなり動かなくなり、HTTPのdoPost関数だったのでデバッグもできずしばらく悩んでしまいました。
原因としては、JSONは全く関係なく、Google Cloud Platform(GCP)とGASを関連付けたことによるエラーでした。
GASでGoogleのAPI(スプレッドシートAPI、Google Maps APIなど)を使うことのある方は、頭の片隅に入れておくといつか役に立つかもしれません。
発生したエラー
以前書いた「GAS×LINEでレシートをOCRする」という内容の記事について、
OCRしたあとの機能を追加しようと思い、編集する前にいったん動くか確認してみることにしました。すると、LINEからレシートを撮影して送信してもうんともすんとも反応がありませんでした。なにも変更してないのに・・・・何故。
原因
すっかり忘れていたのですが、プロジェクトのログを出力できるよう、GCPと紐づけをしていたことが原因でした。
LINEから画像を受け取る際、GAS側ではdoPost関数を使用します。doPost関数内の処理は、デバッグができず、コンソールにログを出力することもできません。そのため、GCPに関連付ける方法でログを監視するように設定をしていたのでした(doPostのログを出力する方法はこちら参照)。
ログ エクスプローラに出力されていたエラーは以下。
GoogleJsonResponseException: 次のエラーが発生し、drive.files.insert の呼び出しに失敗しました: Google Drive API has not been used in project XXXXXXXX before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/drive.googleapis.com/overview?project=XXXXXXXX then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\n at doPost(コード:29:29)
「Google Drive APIは、プロジェクトXXXXXXXX で使用されたことがないか、無効になっています。」という内容でした。
GCPで最初から許可されているGoogleサービス
GCPでデフォルトで許可されているサービスは以下です。
- BigQuery API
- BigQuery Migration API
- BigQuery Storage API
- Cloud Datastore API
- Cloud Debugger API
- Cloud Logging API
- Cloud Monitoring API
- Cloud SQL
- Cloud Storage
- Cloud Storage API
- Cloud Trace API
- Google Cloud APIs
- Google Cloud Storage JSON API
- Service Management API
- Service Usage API
参考:Google Cloud デフォルトで有効になるサービス
個人的には、あまり馴染みのないAPIばかりがデフォルトで有効になってるんだなーという感想です。逆に、Google Drive API、GoogleカレンダーAPI、Gmail API、スプレッドシートAPIなどは有効になっていません。
つまり、GCPと紐づけたGASのプロジェクトでは、Google Drive APIやスプレッドシートAPIなど、多くのAPIは無効となっており、スクリプト実行時にエラーになります。
解決方法
方法1:GCPログに記載のURLから有効化する
GCPログに書かれている、「https://console.developers.google.com/apis/api/drive.googleapis.com/overview?project=XXXXXXXX」にアクセスします。
すると、GCPの画面に遷移します。こちらを有効にして、数分待つとAPIが有効になります。
方法2:あらかじめAPIを有効化しておく
GCPに連携したタイミングで、以下の手順にてAPIを有効化しておいても良いかと思います。
Google Cloud Platform(GCP)を開き、設定したいプロジェクトを選択します。ダッシュボードからAPIの概要へ移動します。現在有効化されているAPIは、画面下部に表示されます。
新しくAPIを有効化させる場合は、「APIとサービスの有効化」を押します。
APIライブラリが開きますので、利用する予定のAPIを有効化します。
いったん有効化したAPIや、デフォルトで有効化しているAPIを無効化にすることもできます。
まとめ
ソースコードを全くいじってないのにいきなり動かなくなると、原因がまったく分からず混乱しますね。
GCPと連携したことをすっかり忘れていたので、「APIを有効化しなきゃ!」なんて1ミリも浮かびませんでした・・・。いっぽうで、GCPと連携していたおかげで、ログ エクスプローラにエラーログが出ていて原因を究明することができました。GCPが原因であり、GCPのおかげで解決するという、なんとも言い難い事態となってしまいました。。
あと、GASの画面上で、GCPと連携している場合はアイコンが出たりしたら分かりやすくていいんだけどな・・・と思いました。
コメント