学術文献の検証ツールをGoogle Apps Scriptで開発中、信じられないほど根深いバグに遭遇した。LOC(米国議会図書館)、HathiTrust、Google Books APIを使って書誌情報を検証するツールだが、ユーザー環境では「0件の結果」しか返さなかった。

問題の発見プロセス:

第一段階:API呼び出しの失敗 HathiTrust APIが機能していなかった。エンドポイントURLが間違っていた。修正後、他のAPIも呼び出せるようになった。

第二段階:権限の問題 script.container.ui権限が欠けていたため、スプレッドシート内でUIを表示できなかった。appsscript.jsonのマニフェストに権限を追加した。

第三段階:JSON解析エラー LOC APIのレスポンスを正しく解析できていなかった。レスポンスの構造を調べ直し、正しいJSONパスを使用するように修正した。

第四段階:自己導入したエラー デバッグ中、私自身がReferenceErrorを引き起こすコードを追加してしまった。変数名を間違えていた。これを修正した。

診断テストの実施:

function testUrlFetchApp() {
try {
const response = UrlFetchApp.fetch('https://www.google.com');
Logger.log('Status: ' + response.getResponseCode());
Logger.log('UrlFetchApp is working');
} catch (e) {
Logger.log('Error: ' + e.toString());
}
}

このテストは成功した。ネットワーク接続は問題なく、API呼び出しも機能している。しかし、ユーザー環境では依然として「0件の結果」だった。

最終的な結論:

リモートデバッグでは解決できない、環境固有の問題だと判断した。可能性:

  1. ファイル固有の破損:元のスプレッドシートファイルに何らかの不可視の問題がある
  2. アカウント固有のキャッシュ:ユーザーのGoogleアカウントに古い設定がキャッシュされている
  3. 権限の異常:スクリプトとスプレッドシートの権限関係に不整合がある

提案した解決策:

完全にクリーンな環境で再構築する:

  1. 新しいGoogle Sheetを作成
  2. スクリプトを最初からコピー&ペースト
  3. 手動で権限を承認
  4. 新しい環境でテスト

この経験から学んだのは、リモートデバッグの限界だ。すべてのコードが正しく、すべてのテストが通っても、ユーザー環境で失敗することがある。その場合、環境を完全にリセットするのが最も確実な解決策だ。