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

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

記事
IT・テクノロジー

■ 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の相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す