GAS の落とし穴4つ:日本語の関数名、PHP からの呼び出し、消えたプロジェクト、Safari のフォーム
Google Apps Script(GAS)で当たった4つの落とし穴と直し方。日本語の関数名が google.script.run から呼べない、PHP の CURLOPT_CUSTOMREQUEST で GAS の転送が壊れる(CURLOPT_POST で解決)、消えたプロジェクトの取り戻し方、Safari のフォームの復元で時刻がずれる、の4つです。

GAS(Google Apps Script)が、エラーも出ずにうまく動かない時は、次の4つを疑ってください。関数の名前は英数字にする(日本語の名前は google.script.run から呼べなかった)、PHP の curl では CURLOPT_CUSTOMREQUEST ではなく CURLOPT_POST を使う、消えたプロジェクトはデプロイの ID から探す、Safari のフォームの時刻はサーバーで決める、です。
店舗の業務の仕組みを、Google Apps Script(GAS)で作ってきました。その中で、エラーも出ずにうまく動かない、気づきにくい落とし穴に何度か当たりました。この記事は、そのうちの4つと、どう直したかの記録です。

1. 日本語の名前の関数が、google.script.run から呼べない
GAS の Web アプリでは、画面の JavaScript から google.script.run を使って、サーバー側(GAS)の関数を呼びます。

// × 画面から呼べなかった
function 集計を読む() { /* … */ }
// ○ 英数字の名前にする
function readSummary() { /* … */ }
2. PHP から GAS を呼ぶ時、CURLOPT_CUSTOMREQUEST で転送が壊れた
画面をレンタルサーバーに移したあと、PHP から curl で GAS の Web アプリにデータを送る形にしました。
GAS の Web アプリは、送られたデータを受け取ったあと、結果を別の URL へ転送して返します。curl の CURLOPT_CUSTOMREQUEST は、最初の1回だけでなく、転送先への問い合わせにも同じ方法(この場合は POST)を使います。転送先は、POST ではなく普通に開かれる(GET)ことを前提にしているので、ここで壊れていました。
$ch = curl_init($gasUrl); // GAS の Web アプリの URL は設定から読む
curl_setopt_array($ch, [
CURLOPT_POST => true, // CURLOPT_CUSTOMREQUEST => 'POST' は使わない
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_FOLLOWLOCATION => true, // GAS の転送について行く
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
3. ゴミ箱に入った GAS のプロジェクトを、デプロイの ID から見つけて戻した
ある時、動いているはずの GAS のプロジェクトが、誤ってゴミ箱に入っていたことがありました。

4. Safari のフォームの復元で、記録の時刻がずれた
iPhone の Safari で使うフォームに、記録の時刻を入れる欄がありました。時刻は、フォームの側で入れていました。


まとめ

- google.script.run から呼ぶ関数に、日本語の名前を付けない。コードの名前はすべて英数字にする
- PHP の curl で GAS に送る時は、CURLOPT_CUSTOMREQUEST ではなく CURLOPT_POST を使う
- 外から呼んでいる GAS のデプロイの ID は、プロジェクトを探す手がかりになる
- 記録の時刻は、画面ではなくサーバーの側で決める
この記事は、AI(Claude)の支援を受けて作成し、筆者が内容を確認しています。


