1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【やらかし記】回答が溜まったGoogleフォームをトリガ付きのスプレッドシートに紐づけたら、トリガが暴発した💥

Last updated at Posted at 2025-03-17

はじめに

世の中は「まぜるな危険」で溢れている。

今日、Googleフォームと、トリガ付きスプレッドシートを混ぜたら、爆発しました。💣💥

要約

Googleフォームの「回答の送信先を選択」で、「フォーム送信時」のトリガ付きのスプレッドシートを紐付けると、スプレッドシートの処理が回答の数だけ走ります。1

顛末

登場するもの

  • Googleフォーム
  • 旧スプレッドシート
    • フォーム送信時にメールを送るGoogle Apps Script付き
  • 新スプレッドシート
    • 旧スプレッドシートからプロジェクトを移植

image.png

したこと

Googleフォームに紐づいていた旧スプレッドシートを新スプレッドシートに引っ越ししようとした。回答が溜まり、列も乱れていたため。

  • 旧スプレッドシートをコピー、新スプレッドシートを作成
  • 新スプレッドシートにApps Scriptおよびトリガーをセットアップ。(⚠️これが火種)
  • Googleフォームを新スプレッドシートに紐付け
  • 溜まっていた回答の数だけ、トリガが発火💥

先にトリガーを設定したのが、将棋で言うところの手順前後でした。

再現手順(Step to Reproduce)

1. 適当なGoogleフォームを作成

image.png

2. 回答を溜める

image.png

3. スプレッドシートを作成する

image.png

4. Apps Scriptを作成

以下のように、フォーム提出時の処理とトリガー作成関数を追加。

function onFormSubmit(e) {
  console.warn("Adieu, World!")
}

function setTrigger() {
  ScriptApp
    .newTrigger("onFormSubmit")
    .forSpreadsheet(SpreadsheetApp.getActive())
    .onFormSubmit()
    .create()
}

5. トリガを実装

setTriggerを実行。以下のようにトリガが生成される。

image.png

6. フォームをシートに紐付け

Googleフォームに戻り、シートを紐付け。
image.png

「既存のスプレッドシートを選択」
image.png

image.png

紐付けされました。
image.png

7. Apps Scriptを確認

ここでApps Scriptの実行ログを確認します...

image.png

回答分の3回、トリガ処理が走っています☺️

「フォーム送信時」とは...

これは仕様...?

個人的にはこれは予期しない動きだったのですが、仕様なのでしょうか。

インストール可能なフォーム送信トリガーは、ユーザーがフォームに回答したときに実行されます。フォーム送信トリガーには、Google フォーム自体用と、フォームがスプレッドシートに送信される場合のスプレッドシート用の 2 つのバージョンがあります。

フォームがスプレッドシートに送信される場合に「回答の送信先を選択」したことが当てはまるかというと、まぁ当てはまらないとも言えないか...

内部実装に想いを馳せると、回答時にフォームからスプレッドシートに回答を送るのも、既存の回答を新規スプレッドシートに送るのも一緒!、と、おもんぱかることもできそうです。いや、おもんぱかれないでしょ。アルパカ🦙🦙🦙

Stackoverflowも探しましたが、関連情報はありませんでした。

おわりに

筆者のケースでは実行数Quotaのおかげで途中からエラーになりましたが、それなりの物的・心的な被害を被りました。

Googleフォームの紐付け先を変える際は、

  • 引っ越し前にフォームの回答をアーカイブ、回答を消しておく
  • スプレッドシートのトリガーはフォームを紐づけてから付ける

のどちらかをしておくのが安心です。

と、ここに他山の石を残し、擱筆とします。

おまけ:生成AIの意見

gpt-4o + Web Search
発火しない。
image.png

Claude 3.7 Sonnet
発火しない。
image.png

Gemini 2.0 Pro
発火しない 訂正:Geminiは正解でした。お家芸。「2. スプレッドシートの再リンク」が今回の事例ですね。回答の冒頭と矛盾している気もする。
image.png

  1. この記事は2025年3月17日時点の動作を元にしています。今後、挙動が変わることがあります。(変わってほしい)

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?