3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASでWebアプリ実現するときにGET通信でハマったこと

Last updated at Posted at 2024-01-29

背景

GoogleAppsScript(GAS)を使用して在庫管理のWebアプリを作ります。
以下のようにGoogleサービスで構成を組むことで、お金をかけずにWebアプリを組んでしまおうと考えてます。

Google Site <-----> GAS <---> Googleスプレッドシート

ハマったこと

GASへのGETが通らずCORSエラーが発生する。
(POSTも同様と思います)

結論

  • GASのdoGet関数内にエラーがないか確認。
  • アクセスできるユーザーを「全員」にしてデプロイする。

詳細

Javascript(jQuery)からGASへGETで通信を試みるが、
CORSエラーが出続けているのでサーバー(GAS)からのAccess-Control-Allow-Origin設定が悪いのか?!とヘッダ付与方法をずっと探していました。

Developer Console
Access to XMLHttpRequest at 'https://script.google.com/macros/s/xxxxxxxxxxxxxx/dev?func=allget' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

ハマりポイント1

CORSエラーはCORSエラーではなかった。

要は、GASのdoGet関数内でエラーが発生する状況になっていました。
以下コードでcreateTextOutputsetHeadersをメソッドチェーンで繋げていますが、こんな関数は存在しません()
ここでエラーし、失敗の返却ヘッダにAccess-Control-Allow-OriginがないことでブラウザではCORSエラーとして認識したようです。詳細は[1]の記事を参考ください。

doGet
function doGet(request) {
  let func = request.parameter.func;
  //中略
  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON)
    .setHeaders({'Access-Control-Allow-Origin': '*'});
}

ハマりポイント2

「デプロイをテスト」は外部から呼び出せない
GASを他ドメインからWEBアプリとして実行するには以下画像のようにデプロイ時にアクセスできるユーザーを「全員」にする必要があります。URLの末尾は「デプロイをテスト」では/devですが、デプロイでは/execです。

スクリーンショット 2024-01-29 22.39.56.png

参考

[1] https://www.bugbugnow.net/2019/06/gasweb.html
[2] https://zenn.dev/iwatos/books/752824c25d84fc4e1d2f/viewer/make-debug-settings

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?