第8章:初心者が必ずハマるポイント集

この記事の内容について、業務や開発でお困りの場合は個別に対応できます。

「言われた通りにやったのに動かない!」 そんな時にチェックすべきポイントをまとめました。実行権限、実行時間、壊れた時の調査手順などを整理します。

1. 最大の難関:「承認」という名の警備員

GASを初めて実行するとき、必ず 「承認(Authorization)」 を求められます。 画面に英語が出たり、赤い警告マークが出たりして、ここで「怖い!」と思って諦めてしまう人が多いです。 しかし、これは正常な動作です。

突破手順(警備員への通行証提示)

  1. Authorization required という画面が出るので、自分のアカウントを選択。
  2. 「このアプリはGoogleによって確認されていません」 という怖い画面が出ます。
    • これは「Google公式アプリじゃないけどいいの?」と聞かれているだけです。
  3. ここで慌てずに、左下の 「詳細 (Advanced)」 というリンクをクリックします。
  4. さらに下に 「(安全ではないページ)に移動」 というリンクが出るので、これをクリックします。
  5. 最後に 「許可 (Allow)」 をクリックします。

なぜこんな画面が出るの?

これは「あなたが書いたコードが、あなたのメールやドライブを操作しようとしています。本当に許可しますか?」という確認です。 悪意のあるウイルスを防ぐための機能ですが、自分で書いたコードなら安全 なので、堂々と許可してください。

2. 「6分の壁」と「トラック配送の法則」

GASには 「1回の実行は6分まで」 という厳しい制限があります。 (※無料アカウントの場合。有料のGoogle Workspaceなら30分)

これを回避するためのテクニックとして、「トラック配送の法則」 を覚えてください。

❌ 遅い書き方(自転車で1個ずつ運ぶ)

// 1000回、スプレッドシートに書き込む
for (let i = 0; i < 1000; i++) {
  sheet.getRange(i + 1, 1).setValue("データ"); // 毎回通信が発生!
}

これだと、1回書き込むたびにGoogleのサーバーと通信するので、すぐに6分経ってしまいます。 「東京から大阪まで、荷物を1個運んで、また戻ってきて…」を1000回繰り返しているようなものです。

⭕ 速い書き方(トラックに積んで一気に運ぶ)

// データを配列(荷台)にまとめる
let data = [];
for (let i = 0; i < 1000; i++) {
  data.push(["データ"]);
}
// 一回だけ書き込む
sheet.getRange(1, 1, 1000, 1).setValues(data); // 通信は1回だけ!

setValue(単数)ではなく setValues(複数) を使うのがコツです。 これだけで、処理速度が100倍くらい変わります。 「荷物をトラック満載にして、1回で運ぶ」イメージです。

3. Clasp特有のトラブル

Q. clasp push したらエラーが出た!

  • 原因: 同じ名前の関数や変数が、別のファイルにありませんか?
  • 解説: GASは全てのファイルを「1つの巨大なファイル」として結合して実行します。
    • a.jsconst x = 1;
    • b.jsconst x = 2;
    • これがあると、「xが重複している!」と怒られます。
    • 対策: 変数名は被らないようにするか、関数の中で宣言しましょう。

Q. ファイルを消したのに、Google上に残っている!

  • 原因: ローカルでファイルを削除しても、clasp push しただけではGoogle上のファイルは消えません。
  • 対策: これはClaspの仕様です。Google上のファイルも消したい場合は、ブラウザで消すか、少し高度ですが appsscript.json をいじる必要があります。
    • 初心者のうちは「ブラウザで消す」のが一番確実です。

4. デバッグの基本:ログを見よう

動かないときは、とにかく Logger.log() を仕込みましょう。 「どこまで動いていて、どこで止まったか」を特定するのが解決への近道です。

function myFunction() {
  Logger.log("1. 処理開始"); // ここは出るか?
  
  var data = getData();
  Logger.log("2. データ取得完了: " + data); // データは取れているか?
  
  processData(data);
  Logger.log("3. 処理終了"); // ここまで来ているか?
}

エラーメッセージが出たら、それをコピーして CopilotやChatGPTに貼り付けてください。 「このエラーはどういう意味?どう直せばいい?」と聞けば、99%の確率で正解を教えてくれます。

特にVS Code上でCopilotを使っているなら、エラーが出ている行を選択して 「Copilot Chat」 に投げるのが一番早いです。 「Fix this (これを直して)」と言うだけで、修正案を提示してくれます。 AI Agentは、あなたの最強のデバッグパートナーです。


よくある質問 (Q&A)

Q. 承認画面で「安全ではないページ」を押すのが怖いです。

A. 自分で書いたコードなら100%安全です。 Googleは「中身を知らないコード」に対して一律で警告を出しているだけです。 あなたが書いた(あるいはコピペした)コードに悪意がないなら、自信を持って許可してください。

Q. 6分の壁を超えたい場合はどうすればいいですか?

A. 有料版にするか、処理を分割します。 Google Workspace(有料版)なら30分まで伸びます。 無料版のままやるなら、「今日は1〜1000行目まで」「明日は1001行目から」のように、スクリプトが自分で進捗を記録しながら少しずつ進むような工夫(分割実行)が必要です。


理解度チェックテスト

Q1. 初回実行時に出る「承認画面」で、最初にクリックすべき隠しリンクは? 答え: 詳細 (Advanced)
Q2. GAS(無料版)の実行時間の制限は何分? 答え: 6分
Q3. 処理を高速化するための「トラック配送の法則」とは? 答え: データを1件ずつ書き込むのではなく、配列にまとめて一気に書き込むこと

>> 次の章:第9章 次にやるべきこと

連載目次

連載目次

ZIDOOKA!

この記事の内容について、対応できます

この記事に関連する技術トラブルや開発上の問題について個別対応を行っています。

個別対応は3,000円〜 内容・工数により事前にお見積りします
最後までお読みいただきありがとうございました

5 thoughts on “第8章:初心者が必ずハマるポイント集

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AI活用に関するポリシー

当サイトでは、記事の執筆補助にAIを活用する場合がありますが、全面的な委任は行いません。