GASのエラーハンドリング:try-catchでスクリプトを堅牢にする

GASのエラーハンドリングが必要な理由
お疲れさんだ、おじさんだよ。Google Apps Script(以下GAS)を使うと業務がぐっと楽になるけど、エラーが起きるとそこで止まってしまう。中小企業の経営者さんやフリーランスの皆さんにとって、スクリプトが途中で止まるのは時間とコストの無駄だ。
だからこそ、おじさんは「try-catch」を使ったエラーハンドリングを強くおすすめする。これでスクリプトの堅牢性が上がり、失敗しても適切に処理できるようになるんだ。
try-catchで堅牢なスクリプトを書くポイント
GASでエラー処理をするなら、まずは基本のtry-catch構文を押さえよう。
function safeProcess() {
try {
// ここに処理を書く
} catch (e) {
Logger.log('エラー発生: ' + e.message);
}
}
だが、これだけでは不十分。中小企業やフリーランスなら、既存データを誤って消しちゃうリスクは避けたいだろ?だから、データは直接削除しない。代わりに新しい日時付きのシートやファイルへ結果を書き出すのがベターだ。
さらに、入力検証やバックアップ、バッチ処理も必須だ。これで失敗時にロールバックも可能になる。おじさんの経験から言うと、これがコスト削減につながるぞ。
具体的なコード例:入力検証・バッチ書き込み・バックアップ付き
以下は、スプレッドシートのデータを処理し、新しい日時付きシートに結果を書き出す例だ。既存データは一切変更しない。エラーがあればcatchで捕まえ、バックアップも作成する。
function processDataWithBackup() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = ss.getSheetByName('元データ');
if (!sourceSheet) {
Logger.log('元データシートが見つかりません');
return;
}
// 入力検証:データがあるかチェック
const dataRange = sourceSheet.getDataRange();
const data = dataRange.getValues();
if (data.length < 2) {
Logger.log('データが不足しています');
return;
}
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const backupSheetName = 'バックアップ_' + timestamp;
const resultSheetName = '処理結果_' + timestamp;
try {
// バックアップ作成(新しいシートにコピー)
const backupSheet = ss.insertSheet(backupSheetName);
backupSheet.getRange(1, 1, data.length, data[0].length).setValues(data);
// バッチ処理:処理結果を配列で作成
const resultData = [];
// ヘッダー行をコピー
resultData.push(data[0].concat(['処理日時']));
for (let i = 1; i < data.length; i++) {
const row = data[i];
// ここで何らかの処理(例:2列目の数値に10%加算)
const processedValue = typeof row[1] === 'number' ? row[1] * 1.1 : row[1];
resultData.push([row[0], processedValue, timestamp]);
}
// 処理結果用の新規シート作成
const resultSheet = ss.insertSheet(resultSheetName);
resultSheet.getRange(1, 1, resultData.length, resultData[0].length).setValues(resultData);
Logger.log('処理完了。バックアップシートと結果シートを作成しました。');
} catch (e) {
Logger.log('処理中にエラー発生: ' + e.message);
// 必要に応じてメール通知やSlack連携も可能
}
}
この例では、
- 既存の「元データ」シートを直接編集せず、新しいシートにバックアップと結果を保存
- 入力データの有無を検証してから処理開始
- バッチ書き込みで効率的にデータを書き込み
- try-catchでエラーを拾いログ出力
といったポイントを押さえている。これならミスで大事なデータを消すリスクはほぼゼロだ。
初期設定・権限・個人情報の扱いについて
このスクリプトを使うには、Googleスプレッドシートの編集権限が必要だ。初回実行時にGASの認証画面が表示されるので、指示に従って許可を与えてほしい。
また、個人情報や機密データを扱う場合は、
- スクリプトのアクセス権限を最低限に設定
- 共有設定を見直し、信頼できるメンバーのみアクセス可能に
- 定期的にバックアップを取得し、復元手順を用意
を徹底することが重要だ。
installable trigger(時間主導型トリガーなど)を使う場合は、トリガーの設定画面から追加し、同様に権限を承認する必要がある。エラーが起きた場合はログやメール通知で把握し、手動でバックアップシートから復元するといい。
コスト削減の仮定と計算例
おじさん流に簡単に試算してみよう。
- 例えば、手作業でのデータ処理に1件あたり3分かかるとする
- 月間処理件数が200件なら、合計600分=10時間の工数
- 時給3,000円換算で、月間3万円の人件費
- GASの自動処理を導入して工数を70%削減できた場合、節約時間は7時間、節約金額は約21,000円/月
- これが年間で約25万円のコストカットになる計算だ
もちろん、GASはGoogleアカウントの利用枠内で動くため、追加の専用SaaS料金は不要。ただし、Apps Scriptの実行時間やAPI呼び出し数にはquota・実行上限があるので使いすぎには注意しよう。
まとめ
スクリプトのエラー処理は堅牢な業務自動化に必須だ。try-catchで例外を拾い、既存データを直接編集せず、新規シートへバックアップと結果を書き出し、入力検証やバッチ処理も実装すれば安心だ。
GASはGoogleアカウントの利用枠内で、追加の専用SaaS料金なしで使える強力なツール。コスト削減効果も大きいので、ぜひ取り入れてほしい。
最後に、おじさんのGASおじラボメンバーシップでは500以上の便利ツールを使い放題で提供中。気になったらこちらからどうぞ。