GASのtry-catch入門|元データを守るエラー処理とログの実装例
Gasおじ|GoogleアカウントをAIエージェント化
GAS(Google Apps Script)のtry-catchは、エラーを「なかったこと」にする機能ではありません。失敗した場所を記録し、途中停止したときに原因を追いやすくするための仕組みです。
この記事では、元データを直接書き換えず、バックアップ用シートと処理結果用シートを新しく作る最小例を紹介します。コードは無料で、そのままコピーして試せます。
先に押さえたい3つの考え方
- try-catchだけでは、入力ミスや権限不足を防げません。
- 元データを更新する前に、入力検証とバックアップ方法を決めます。
- エラー内容に顧客名やメールアドレスなどの個人情報をそのまま残さないようにします。
今回は「元データ」シートを読み、元データには触れずに次の2シートを作ります。
- バックアップ_日時_識別子
- 処理結果_日時_識別子
シートを準備する
スプレッドシートに「元データ」という名前のシートを作り、1行目を見出しにします。
- A列: item_name
- B列: amount
2行目以降にサンプルデータを入れてください。amountが数値の行だけ、処理結果へ反映します。
コピーして使えるコード
function processDataSafely() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = spreadsheet.getSheetByName('元データ');
if (!sourceSheet) {
throw new Error('「元データ」シートが見つかりません。');
}
const values = sourceSheet.getDataRange().getValues();
if (values.length < 2) {
throw new Error('処理対象のデータ行がありません。');
}
const headers = values[0];
if (headers[0] !== 'item_name' || headers[1] !== 'amount') {
throw new Error('A1をitem_name、B1をamountにしてください。');
}
const timestamp = Utilities.formatDate(
new Date(),
Session.getScriptTimeZone(),
'yyyyMMdd_HHmmss'
);
const suffix = Utilities.getUuid().slice(0, 8);
const backupName = `バックアップ_${timestamp}_${suffix}`;
const resultName = `処理結果_${timestamp}_${suffix}`;
try {
const backupSheet = spreadsheet.insertSheet(backupName);
backupSheet
.getRange(1, 1, values.length, values[0].length)
.setValues(values);
const resultRows = [['item_name', 'amount', 'status', 'processed_at']];
values.slice(1).forEach((row) => {
const itemName = String(row[0] || '').trim();
const amount = Number(row[1]);
if (!itemName || !Number.isFinite(amount)) {
resultRows.push([itemName, row[1], '入力不備', timestamp]);
return;
}
resultRows.push([itemName, amount, '確認済み', timestamp]);
});
const resultSheet = spreadsheet.insertSheet(resultName);
resultSheet
.getRange(1, 1, resultRows.length, resultRows[0].length)
.setValues(resultRows);
console.log(`完了: ${resultName}`);
} catch (error) {
console.error(`${error.name}: ${error.message}`);
throw error;
}
}実行手順
1. 対象のスプレッドシートから「拡張機能」→「Apps Script」を開きます。
2. コードを貼り付けて保存します。
3. スプレッドシートのタイムゾーンを確認します。
4. processDataSafelyを選んで実行します。
5. 初回だけ、表示された権限内容を確認して承認します。
6. 元データが変わっていないこと、バックアップと処理結果の2シートができたことを確認します。
このコードはスプレッドシート内に新しいシートを作成するため、編集権限が必要です。組織のGoogle Workspaceを使っている場合は、管理者のポリシーで実行できないことがあります。
try-catchで見落としやすい点
catchで握りつぶさない
catch内でログだけ出して終了すると、呼び出し元は成功したように見える場合があります。上の例ではログを残したあとにthrow errorで再度エラーを返しています。
バックアップは復元そのものではない
バックアップシートがあっても、自動で元に戻るわけではありません。失敗時は、どのシートまで作成されたかを確認してから手動で整理します。
本番データの前にコピーで試す
最初はスプレッドシートを複製し、サンプル行で実行してください。権限、タイムゾーン、列構成、実行上限は環境によって異なります。
公開前の確認リスト
- 元データを直接clear、delete、overwriteしていない
- 必須列とデータ型を検証している
- ログに個人情報や秘密情報を残していない
- 同名シートが衝突しない名前にしている
- 失敗時の確認手順をREADMEや運用メモに残している
- Apps Scriptの実行時間や利用上限を確認している
まとめ
try-catchは、エラーを隠すためではなく、失敗を見つけて安全に止めるために使います。元データを直接変更しない設計、入力検証、バックアップ、確認可能なログを組み合わせると、原因を追いやすいGASになります。
この記事のように「失敗する前に確認項目を整理する」運用を、デジタル商品の公開準備にも広げたい人向けに、有料Tips「個人クリエイター公開準備チェックGAS Pro」を用意しています。
note、BOOTH、Tips、ココナラ、BASEへ出す前の確認項目を、Googleスプレッドシートで整理するためのGASテンプレートです。
有料Tips「個人クリエイター公開準備チェックGAS Pro」を見る

ほかのGASツールも、GasおじのTips商品一覧から確認できます。
GasおじのTips商品一覧を見る

※この記事のコードは学習・検証用の例です。実データへ適用する前に、コピーしたスプレッドシートで確認してください。Google公式・Google公認の商品ではありません。
