GASのtry-catch入門|元データを守るエラー処理とログの実装例

GASのtry-catch入門|元データを守るエラー処理とログの実装例

Gasおじ|GoogleアカウントをAIエージェント化

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公認の商品ではありません。


あなたも記事の投稿・販売を
始めてみませんか?

Tipsなら簡単に記事を販売できます!
登録無料で始められます!

Tipsなら、無料ですぐに記事の販売をはじめることができます Tipsの詳細はこちら
 

この記事のライター

Gasおじ|GoogleアカウントをAIエージェント化

おう、Gasおじだ。 AIツールとSaaSに散々突っ込んで遠回りした結果、最後に強かったのは「今あるGoogleアカウント」だった。 今ではAIエージェントであらゆるタスクを自動化して無双してるぞ。 GAS、スプレッドシート、フォーム、Gmail、AIエージェントを組み合わせれば、個人でも小さな会社でも、手作業だらけの業務はかなり自動化できる。 ここでは机上のAI論じゃなく、現場で動くテンプレ、コード、手順だけを置いていくぞ。 高いツールを増やす前に、まずお前さんのGoogleアカウントを仕事するエージェントに変えようじゃないか。

このライターが書いた他の記事

  • Gasおじ式 X投稿キュー自動実行GAS Pro|危ない時だけ止まる

    ¥2,980
    1 %獲得
    (29 円相当)
  • 個人クリエイター公開準備チェックGAS Pro

    ¥2,980
    1 %獲得
    (29 円相当)
  • 毎朝のToDoを区分・優先度・期限つきでまとめる Morning ToDo Mail Pro

    ¥2,980
    1 %獲得
    (29 円相当)

関連のおすすめ記事

  • USBメモリで持ち運べるLinux Mint 22.1と永続的な書き込み領域の作成法【Rufus だけで作成する方法を初心者向けに徹底解説】

    ¥500
    1 %獲得
    (5 円相当)
    SmartSenior

    SmartSenior

  •  Let's noteにChromeOS 135を搭載!内蔵メモリ8GBのChromebookを構築 Windows10との共存環境

    ¥500
    1 %獲得
    (5 円相当)
    SmartSenior

    SmartSenior

  • AI時代のX運用 基礎設計マニュアル|1日15分で回すアカウント運用の土台づくり

    ¥980
    1 %獲得
    (9 円相当)
    OfficeBuddy

    OfficeBuddy