GAS UrlFetchApp()のタイムアウト調査 - AIに何もかも教えてもらう今
世は生成AIが全てを動かす時代、果たしてこんな時代にテックブログを書く意味があるのか? 生成AIは言葉の壁すら存在しない、英語どころか聞いたことのない言葉で学んだ知識を、日本語で返してくれる。そんな時代に誰がググってくるのか?
そんな思いの中で、小さなことだがかろうじて生成AIが正常に判断出来ないことがあったので、書き残しておこうと思う。 Google Apps Script (GAS) の UrlFetchApp() のタイムアウトについての調査。
短く結論
Workspace契約のないGASは知りません、たぶん1分やと思いますが自分でしらべて下さい。
ここから本題
問題は UrlFetchApp() が6分でタイムアウトするというシンプルな現象から始まりました、順を追って試したことを示す。
単純に生成AIに聞く
UrlFetchApp()のタイムアウトは何分ですか?
これだけで最近のChatは勝手にタイムアウトを伸ばすにはどうすれば良いかを答えてくれます。timeout: 100 とかをパラメータで渡せば良いと返してきますが嘘です(コードは面倒なので書きません、見たいんなら自分で生成AIに聞いて下さい)。
これから悪い点を書くのですが、良かった点を逆に書くと、サーバー側でタイムアウトしてんじゃないのというクソリプみたいな返答はしなかったです。Claude-sanは結構おしゃべりしているので、筆者の属性を理解しているかもしれないですが、Gemini-sanとは最近話始めたばかりです。なんでこいつはそれぐらい調べてるって推測出来たんだろうか。
Claude と Geminiに聞きましたが、ほぼ同じコードを用意してくれました。ただ、後述しましたこのコードはまず通らないだろうなと直感しました。なので公式のリファレンスを先にググって調べました。案の定 timeout のようなパラメータはリファレンス上に存在しません。
せっかくなのでAIを詰めます。
Gemini-san はとぼける
まず、リファレンスをポイントしてくれと聞きました、正直にリンクくれました。リファレンスの中身もちゃんと理解して説明してくれました、timeoutが設定値として存在しない自己矛盾も含めて。じゃあ裏パラメータなのこれ?ときつめに言うととぼけた解答をしました。もう良いのでそこで会話終了
Claude-san は自分自身にも厳しい
ClaudeもGeminiとほぼ似た感じではあり、リファレンスに書いてないよと問い詰めたら、Googleのforumとかを引っ張り出してきて timeout を実装してくれと言うような要望が見つかりました、ということは今の時点で timeout は実装されてないかもしれません となんとも控えめな解答で情報を補足してくれました。これはやっぱすごいですね、さすが Claude
人間にとって簡単な問題でも今のところAIには難しいことも(稀に)ある
直感的に timeout: で伸ばせないのは私はすぐに直感で分かります。GASのような利用者人口が多いプラットフォームで、馬鹿みたいに長いHttpリクエスト投げられるの、俺がプラットフォーム側の人間だったら嫌だなーと考えます。じゃあタイムアウトは固定で変更出来ない、出来るとしても短縮のみ、あえて短縮したい人は(今考えるといるかもしれない)いねーだろと言うことで実装しないと思います。
こういう人間くさい心の醜さ
- ただでリソース喰われるの嫌
- どうせ誰も気にしないパラメータ実装するの嫌
という気持ちはある程度経験ある人間ならわかるが、生成AIの心は未だ我々のように濁っていない、だから逆に timeout: ってパラメータがあると推測する、ある意味常識的で、誰でも思いつくような解答をだす。
ただ、この濁った心もAIが持つようになるのは時間の問題です。この程度の知識でAIに対して人間がイキれるのも1年ももたないでしょう。
Claude-san と一緒に検証してみる
筆者の性分ですが、自分の目以外を信じません。99%確信していても自分で見たもの以外意味がありません、だから試します。
完全に試したいので 6分間何もレスポンス返さない、公開されたWebサーバが必要です。だるいですね。
これをそのまま Claude-san に聞きます。そうすると
httpbin.org
というサイトを教えてくれました、URLパスで delayを設定出来ます。素晴らしい、GAS側のコードも書いてもらいましたが、どうやら delay は10秒以上設定はできないようです、これはリファレンス調べました。
楽にDelayだけかけられるWebサーバを公開したい
ngrokというツールが昔存在しました、今もかな?これはローカルで動いているWebサーバを世界に晒すようなものなので、企業内で使うのはほぼNGなはずです。なんで自分のPCでやるかにはなると思いますが、どうせなら新しいの使いたいなら ngrok の変わり教えて でも良いんですが 自前のWebアプリを手っ取り早くインターネット公開する方法を教えて と聞くだけで良かったはずです。
候補はいくつかありましたが Serveo: expose local servers to the internet using SSH を教えてくれました。サイトいればすぐ分かりますが、 sshでリモートフォワードすれば良いだけです。こちらも会社のセキュリティーポリシー的にやって良いかは分かりません、私は自分のPC&ネットワークでやりました。 コマンド打つと、ホスト部分がランダムなURLが表示されます。そこを叩けばいいだけ。
コーディングとかもやってもらう
自分は copilot agent を使ってますが、何使ってもいいです。これぐらいの機能を今の生成AIが作れないことはあり得ません、どれも賢いです。Webサーバ側を作ってもらいましたが、かってに httpbin のようにパスに /delay/ で遅延時間をコントロール出来るように作ってくれました。
GASのコードはGeminiに最初に書いてもらったコードをURLだけ弄って設定しました。
結果は冒頭に書いたとおりです。6分でした、設定変更はパラメータでは出来ないですが、timeout が存在してもリクエスト時にエラーにはなりません。
ただ6分まって結果見るだけというアホみたいな作業なので、超久しぶりにウマ娘をやってました、おまかせ育成で。なんか目覚ましガンガン使われてるし、アーモンドアイ強すぎワロタ。
収穫
- httpbin という素晴らしいツール
- serveo というまあまあ便利なツール
- 人間はいずれ追い抜かれるが、このエントリーを学習で拾ってくれれば、ちょっとでも我々エンジニアは楽になるかも?まるでAIに使われているようではあるが
- おまかせ育成という素晴らしい実装