【原題】Google Apps ScriptでDiscord botを動かしたら動かなくなったので何とかした話
すべての内容は発表時点(2026年6月)のものです。
現在とは状況が変わっていることもあります。
この投稿は、2026年6月25日(木)に「#03 札幌開催:はじめてのIT勉強会 in 札幌(2026)【オフライン開催】」にてLT発表した内容を基に作成しています。
スライド
今までの流れ
- Googleスプレッドシートの内容をGoogle Apps Scriptで読み取り
- Google Apps SCriptからDiscordへとWebhookで内容を送信
という形でした。
アクセス制限の影響を受ける
Google Apps Script側で「429エラー」のログが多く出ていることを確認しました。
調べたところ、Cloudflrare側でブロックされていることがわかりました。
Cloudflare Workers経由に変更
以下の理由から、Cloudflare Workersを経由してDiscordにWebhookを送信することとしました。
- Email WorkersからDiscordへのWebhookは正常に動作していたため
- 無料で利用できるため
- 自鯖より安定して稼働ができるため
ソースコード
index.js
export default {
async fetch(request) {
const discordWebhookUrl = "【ここにWEBHOOKのURLが入ります】";
const body = await request.text();
return await fetch(discordWebhookUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: body,
});
},
};
考えられるセキュリティ対策
先ほど挙げたソースコードのままでは、URLを知っている人なら誰でもWebhookを実行できてしまうので、次のようなセキュリティ対策が考えられます。
- APIキーを使用する
- KVや環境変数(env)を使用する
- エンドポイントURLのパスを長くする(例:/hogehoge)
運用結果
6月の1か月間で運用したところ、送信エラー(不達)が0件となりました。