Google Apps Scriptで作成したスクリプトが、予期せぬエラーで途中停止してしまった経験はありませんか。特に、複数のシートを扱う処理や外部API連携では、エラーが発生すると後続の処理が全て止まってしまいます。この記事では、try・catch・finallyを使った例外処理の方法を解説します。エラーを適切に捕捉し、スクリプトを安全に復帰させる方法が身につきます。
【要点】Apps Scriptのtry-catch-finallyでエラーを捕捉し、スクリプトの停止を防ぎましょう
- tryブロック: エラーが発生する可能性のある処理を記述します。エラーが起きてもスクリプトは中断しません。
- catchブロック: tryブロックで発生したエラーを捕捉し、エラーログの記録や代替処理を実行します。
- finallyブロック: エラーの有無に関わらず必ず実行される後片付け処理を記述します。
ADVERTISEMENT
目次
なぜ例外処理が必要なのか
Google Apps Scriptでは、実行中にエラーが発生すると、その時点でスクリプト全体が停止してしまいます。例えば、スプレッドシートにアクセスできない場合、数値の割り算で0除算が起きた場合などです。例外処理を使わないと、エラー個所以降の重要な処理(データ保存や通知など)が実行されません。try-catch-finallyを利用すれば、エラーを安全に捕捉して、スクリプトの継続や適切な後処理が可能になります。これは、本番環境で動かすスクリプトには必須のテクニックです。
try-catch-finallyの基本的な書き方
まずは最も基本的な構文から解説します。以下のコードをApps Scriptのエディタに貼り付けて試してみてください。
- tryブロックを記述する
エラーが発生しうる処理をtry { ... }の中に書きます。例えば、存在しないシートを参照するコードを入れます。 - catchブロックでエラーを捕捉する
catch(e) { ... }の部分で、エラーオブジェクトeを受け取ります。e.messageでエラーの内容を表示できます。 - finallyブロックで後片付けをする(省略可)
finally { ... }はエラーの有無に関わらず必ず実行されます。ファイルのクローズやログ出力に使います。
具体的なコード例を見てみましょう。
function exampleTryCatchFinally() {
try {
// エラーが起きる可能性のある処理
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('存在しないシート');
var data = sheet.getDataRange().getValues();
Logger.log('データ取得成功');
} catch (e) {
// エラー時の処理
Logger.log('エラー発生: ' + e.message);
// エラーをユーザーに通知するなど
} finally {
// 必ず実行される処理
Logger.log('後片付け完了');
}
}
応用パターン:エラーに応じた処理の切り替え
catchブロック内でエラーの種類に応じて処理を変えることもできます。例えば、ネットワークエラーとデータ形式エラーで異なるメッセージを表示する場合です。
- エラーの種類を判定する
エラーオブジェクトeのnameプロパティでエラーの種類を取得できます。TypeError、ReferenceErrorなどがあります。 - 条件分岐で処理を変える
if文でエラー名をチェックして、適切な処理を実行します。 - デフォルトの処理を用意する
想定外のエラーにも対応するため、else節で一般的なエラーハンドリングを記述します。
function handleErrorByType() {
try {
// なんらかの処理
var value = undefinedVariable; // ReferenceErrorが発生
} catch (e) {
if (e.name === 'ReferenceError') {
Logger.log('変数が定義されていません: ' + e.message);
} else if (e.name === 'TypeError') {
Logger.log('型が間違っています: ' + e.message);
} else {
Logger.log('予期しないエラー: ' + e.message);
}
} finally {
Logger.log('エラーハンドリング完了');
}
}
ADVERTISEMENT
例外処理の注意点とよくある失敗
catchブロック内でエラーが発生するケース
catchブロックの中で別の処理を書いているとき、そこでエラーが発生すると、finallyは実行されますが、エラーは上位に伝播します。catchブロック内も注意深くコードを書く必要があります。必要に応じて入れ子のtry-catchを使いましょう。
finallyブロックは本当に必ず実行されるのか
ほとんどの場合、finallyブロックは実行されます。ただし、スクリプトが強制終了された場合や、無限ループなどでタイムアウトした場合は実行されないこともあります。絶対に実行が必要な処理はfinallyに書かない方が安全です。
throw文で自分でエラーを発生させる
特定の条件で自らエラーを発生させることもできます。例えば、入力値が不正な場合に throw new Error('不正な値です'); と書きます。これにより、catchブロックでそのエラーを捕捉して適切な処理ができます。
try-catch-finallyの各ブロックの比較
| ブロック | 役割 | 必須/任意 | 実行タイミング |
|---|---|---|---|
| try | エラーが発生する可能性のある処理を記述 | 必須 | 常に実行される |
| catch | エラーを捕捉し、エラー時の処理を記述 | 任意(ただしtryと併用) | エラー発生時のみ実行 |
| finally | エラーの有無に関わらず必ず実行される後処理 | 任意 | try/catchの後、常に実行 |
まとめ
この記事では、Google Apps Scriptにおけるtry-catch-finallyを使った例外処理の基本と応用を解説しました。エラーを適切に捕捉することで、スクリプトの安定性が大きく向上します。まずは簡単な処理からtry-catchを導入してみましょう。次に、カスタムエラーをthrowしてエラー情報を明確にしたり、finallyでリソース解放を徹底することをおすすめします。これらのテクニックを活用して、堅牢なスクリプトを作成しましょう。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
