Google Apps Scriptを書いたけれど、思うように動かない、あるいはまったく実行されない経験はありませんか。スクリプトエディタで実行ボタンを押しても何も起こらない、トリガーを設定したのに自動実行されない、そんなトラブルはよく発生します。原因は権限不足やスクリプトの文法ミス、実行制限など多岐にわたります。この記事では、Apps Scriptが動かないときの代表的な原因と、一つずつ確認すべきチェックポイントを詳しく解説します。この記事を読めば、自分で問題を特定し、解決する手段を身につけることができます。
【要点】Apps Scriptが動かない時のチェックポイント
- 権限の承認と再承認: スクリプト実行に必要な権限が正しく付与されているか確認し、必要なら再承認を行います。
- トリガーの設定確認: 設定したトリガーが有効で、実行条件が正しいか、時間やイベントが適切かを見直します。
- エラーログの活用: スクリプトエディタの「表示」→「ログ」や「Stackdriver Logging」でエラーメッセージを確認し、原因を特定します。
ADVERTISEMENT
目次
Apps Scriptが動かない主な原因
Apps Scriptが正常に動作しない原因は、大きく分けて権限・トリガー・スクリプトエラー・実行制限の四つです。まずはそれぞれの仕組みを理解することが重要です。権限はスクリプトがスプレッドシートや他のGoogleサービスにアクセスするための許可です。トリガーは指定した条件でスクリプトを自動実行する仕組みです。スクリプトエラーはコードの文法ミスや論理ミスで発生します。実行制限は1日の実行時間や呼び出し回数の上限です。これらのどこかに問題があると、スクリプトは動かないか、途中で止まります。
チェックポイント1: 権限の確認と再承認
スクリプトを初めて実行するとき、またはコードを変更した後は、権限の承認が必要です。権限が不足していると、スクリプトはエラーも出さずに何もしないことがあります。
- スクリプトエディタで「実行」ボタンをクリック
初回実行時には承認ダイアログが表示されます。「許可を確認」をクリックし、必要なアクセス権を承認してください。承認後にダイアログが表示されないときは、ブラウザのポップアップブロックが原因かもしれません。 - スクリプトの再承認を行う
スクリプトを編集した後、特に新しいサービス(Gmailやカレンダーなど)を追加した場合は、再度承認が必要です。スクリプトエディタの「実行」メニューから任意の関数を実行し、再度承認を促すダイアログを表示させてください。 - プロジェクトの設定で権限を確認する
スクリプトエディタの「プロジェクトの設定」から、使用しているスコープ(権限)を確認できます。不要なスコープは削除し、必要最小限の権限にするとセキュリティ上も安心です。
チェックポイント2: トリガーの設定を再確認
トリガーが設定してあるのにスクリプトが自動実行されないケースはよくあります。トリガーの有効性と条件を確認してください。
- スクリプトエディタで「トリガー」を開く
左側のメニューから時計アイコン(トリガー)をクリックします。現在設定されているすべてのトリガーが一覧表示されます。各トリガーの「状態」が「有効」になっているか確認してください。 - トリガーの条件を見直す
「時間主導型」のトリガーは、開始日時や頻度が正しいか確認します。例えば「毎日午前9〜10時」と設定しても、実際に実行されるのはその時間帯のランダムな時刻です。即時実行が必要ならテスト用に一時的に「1分ごと」のトリガーを追加して動作確認するとよいでしょう。 - 誤ったイベントを指定していないか確認する
「スプレッドシートから」のトリガーで「変更時」や「編集時」を選んでいる場合、セルの値が変わったときだけ実行されます。書式変更やフィルタ操作では反応しません。また、編集トリガーは1分間に何度も実行されることがあるため、大量実行を避ける仕組みを入れる必要があります。 - トリガーを削除して再作成する
設定が正しいのに動かない場合、一度トリガーを削除して再度同じ条件で作成し直します。これで不整合が解消されることがあります。
ADVERTISEMENT
チェックポイント3: エラーログを確認する
スクリプトが途中で止まる、あるいはエラーが出る場合は、ログを確認することで原因がわかります。Apps Scriptにはいくつかのログ確認方法があります。
- スクリプトエディタの「表示」→「ログ」を開く
スクリプトに「Logger.log()」を仕込んでおくと、実行時にその内容がログに出力されます。実行後、この画面でメッセージを確認できます。エラーがある場合は赤字で表示され、行番号も示されます。 - Stackdriver Logging(旧称)を利用する
より詳細なログを確認するには、Google Cloud Platformのログエクスプローラを使います。スクリプトエディタの「表示」→「Stackdriver Logging」からリンクを開きます。ただし、ログの保存には追加設定が必要な場合もあります。 - 「実行状況」画面でエラーを確認する
スクリプトエディタの「実行状況」アイコン(稲妻マーク)をクリックすると、最近の実行履歴が表示されます。各実行のステータス(成功・失敗)と所要時間がわかります。失敗したものの「詳細」をクリックすると、エラーメッセージが表示されます。
その他の注意点:よくあるトラブルと対処法
権限の承認画面が表示されない
ブラウザがポップアップをブロックしている可能性があります。URLバーのポップアップブロックアイコンをクリックして許可するか、シークレットウィンドウで試してみてください。また、Google Workspaceアカウントの場合、管理者が外部スクリプトの実行を制限していることもあります。その場合は管理者に問い合わせてください。
トリガーがランダムな時間にしか実行されない
時間主導型トリガーは正確な時刻ではなく、設定した時間帯内のランダムなタイミングで実行されます。分単位の精度が必要な場合は、毎分トリガーを使うか、`ScriptApp.newTrigger(‘関数名’).timeBased().everyMinutes(1).create();` のように1分ごとのトリガーをプログラムで作成するとよいでしょう。ただし、短い間隔のトリガーは実行制限に達しやすいため注意が必要です。
スクリプトの実行制限(クォータ)に達した
Apps Scriptには1日あたりの実行時間やトリガー起動回数に上限があります。無料アカウントの場合は、1日の総実行時間が90分、トリガー起動回数が2万回などです。制限に達するとそれ以上スクリプトは実行されません。制限は翌日にリセットされます。回避策として、処理を分割して複数日にまたがるようにするか、Google Workspaceアカウントにアップグレードする方法があります。現在の使用量は「プロジェクトの設定」→「現在のクォータ使用量」で確認できます。
スクリプトの文法エラーや型の不一致
コードにシンタックスエラーがあると、保存時にエディタが警告を出してくれます。しかし、ロジックエラーは警告されません。よくあるのは、文字列と数値を誤って結合しているケースです。例えば、`cell.getValue()` で取得した値が文字列なのに数値として計算しようとするとエラーになります。`Number()` 関数で変換するか、`isNaN()` でチェックしてください。また、スプレッドシートの範囲が正しく指定されていないと、`null` や `undefined` のエラーが発生します。`getRange()` で指定する行・列番号がシートの範囲内か確認しましょう。
エラー別の対処方法一覧
| エラー症状 | 主な原因 | 対処法 |
|---|---|---|
| 実行ボタンを押しても何も起こらない | 権限未承認・ポップアップブロック | 再承認・ポップアップ許可 |
| トリガーが実行されない | トリガー無効・条件ミス・クォータ超過 | トリガー再作成・条件見直し・翌日まで待つ |
| エラー表示「Exception: …」 | スクリプトの文法ミス・型エラー | ログから該当行を確認し修正 |
| スクリプトが途中で止まる | 実行時間制限(6分/回)超過 | 処理を分割して複数トリガーで実行 |
まとめ
Apps Scriptが動かないときは、権限・トリガー・エラーログ・実行制限の四つの観点でチェックすると原因を絞り込めます。まずはスクリプトエディタで手動実行して権限承認の有無を確認し、トリガー設定を再確認しましょう。エラーログは問題解決の決め手になるので、積極的に活用してください。また、クォータ制限に引っかかっている場合は、処理の間隔を空けるか分割を検討するとよいでしょう。これでトラブルシューティングの基本が身につきました。次は応用として、エラーハンドリングをコードに組み込んだり、`try…catch` 文を使うとより堅牢なスクリプトになります。ぜひ挑戦してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
