ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptでエラーログを別シートに記録!運用後の追跡を簡素化

【Googleスプレッドシート】Apps Scriptでエラーログを別シートに記録!運用後の追跡を簡素化
🛡️ 超解決

Googleスプレッドシートで業務を自動化する際、Apps Scriptを使うと便利な機能を実装できます。しかし、スクリプトがエラーで止まったときに、その原因を特定するのは意外と手間がかかるものです。特に、複数のスクリプトを運用していると、どこでどのようなエラーが発生したかを追跡するのが難しくなります。この記事では、エラーログを自動的に別シートに記録する方法を紹介します。これにより、運用後の追跡が大幅に簡素化されます。

【要点】エラーログ自動記録の3ステップ

  • Apps Scriptのトリガー設定: スクリプトのエラー時に自動実行される関数を設定します。
  • エラーハンドリングの実装: try…catch構文でエラー情報を取得し、ログシートに書き込みます。
  • ログシートの設計: タイムスタンプ・エラー内容・スクリプト名などを記録する列を用意します。

ADVERTISEMENT

なぜエラーログが必要なのか

Apps Scriptで自動化を構築すると、データの処理やメール送信など定型的な作業を任せられます。しかし、スクリプトが正常に動作しているかどうかは、実際に確認しないとわかりません。特に、夜間のバッチ処理や大量データの処理中にエラーが発生した場合、気づかないまま放置されることもあります。エラーログを自動で記録することで、問題が起きたときにすぐに原因を特定でき、復旧までの時間を短縮できます。また、複数人でスクリプトを共有している場合も、ログを共有することでチーム全体の状況把握が容易になります。

エラーログを記録する基本の手順

ここでは、スクリプト内でエラーが発生したときに、別のシートにログを書き込む方法を解説します。まずは、ログを保存するシートを準備してください。

手順1: ログシートを作成する

  1. スプレッドシートを開く
    エラーを記録したいスプレッドシートを開きます。既存のシートでも構いませんが、専用のシートを追加することをおすすめします。
  2. 新しいシートを追加する
    シート下部の「+」ボタンをクリックして新しいシートを追加します。シート名を「ErrorLog」などに変更します。
  3. 見出し行を設定する
    1行目に以下の列見出しを入力します。
    ・A1: タイムスタンプ
    ・B1: エラーメッセージ
    ・C1: エラー行番号
    ・D1: スクリプト名(または関数名)
    ・E1: その他情報(任意)

手順2: エラーハンドリング関数を実装する

  1. スクリプトエディタを開く
    スプレッドシートのメニューから「拡張機能」→「Apps Script」を選びます。
  2. ログ書き込み用の関数を作成する
    以下のコードをスクリプトエディタに貼り付けます。この関数は、エラー情報を引数で受け取り、ログシートに追記します。
    function writeErrorLog(errorMsg, lineNum, scriptName, extraInfo) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('ErrorLog');
    var lastRow = sheet.getLastRow() + 1;
    sheet.getRange(lastRow, 1).setValue(new Date());
    sheet.getRange(lastRow, 2).setValue(errorMsg);
    sheet.getRange(lastRow, 3).setValue(lineNum);
    sheet.getRange(lastRow, 4).setValue(scriptName);
    if (extraInfo) { sheet.getRange(lastRow, 5).setValue(extraInfo); }
    }
  3. メインの処理にtry…catchを追加する
    既存の関数を修正して、エラー時にwriteErrorLogを呼び出します。例:
    function myFunction() {
    try {
    // 通常の処理を記述
    var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
    // 以下、データ処理など
    } catch (e) {
    writeErrorLog(e.message, e.lineNumber, 'myFunction', '');
    }
    }

手順3: トリガーを設定して自動化する

  1. トリガーを追加する
    スクリプトエディタの左メニューから「トリガー」(時計アイコン)をクリックします。
  2. トリガーを作成する
    右下の「トリガーを追加」をクリックし、次のように設定します。
    ・実行する関数: メインの関数(例: myFunction)
    ・イベントのソース: 時間主導型またはスプレッドシートから選択(例: 時間主導型で1時間おき)
    ・エラー通知設定: 「今すぐ通知を受け取る」をオンにしておくと、エラー時にメールで通知されます。
  3. 権限を承認する
    初回実行時に権限の承認を求められます。内容を確認して「許可」をクリックします。

ログのカスタマイズと応用

基本のログ機能に加えて、以下のようなカスタマイズが可能です。

エラー発生時にメール通知も送る

writeErrorLog関数内でGmailApp.sendEmailを呼び出せば、ログ記録と同時に管理者へメールを送れます。これにより、重大なエラーをリアルタイムで把握できます。

ログシートにフィルタや色を設定する

ログが溜まってくると、特定のエラーを探すのが大変です。スクリプトで自動的にフィルタを適用したり、エラーの種類に応じてセルの背景色を変えたりすることもできます。

別のスプレッドシートにログを保存する

複数のスプレッドシートで同じログシートを共有したい場合は、SpreadsheetApp.openByIdで別のスプレッドシートを指定します。ただし、権限設定に注意が必要です。

ADVERTISEMENT

エラーログ記録の注意点

実装にあたっては、以下の点に注意してください。

ログシートへの書き込み自体がエラーになる可能性

ログシートが存在しない場合や、書き込み権限がない場合は、writeErrorLog内でさらにエラーが発生します。そのため、関数の先頭でシートの有無をチェックし、なければ作成するロジックを追加すると安全です。

トリガーの実行回数制限

Apps Scriptには実行時間や呼び出し回数に制限があります。短時間に大量のエラーが発生すると、ログ書き込みが間に合わない可能性があります。その場合は、ログをまとめてバッチ処理する方法を検討してください。

個人情報の取り扱い

エラーメッセージに氏名やメールアドレスなどの個人情報が含まれる場合は、ログシートのアクセス権限を適切に設定してください。共有範囲を必要最小限に抑えることが大切です。

手動ログと自動ログの比較

項目 手動ログ 自動ログ(Apps Script)
記録のタイミング エラー発生後、手動で記入 エラー発生と同時に自動記録
情報の正確性 人による入力ミスの可能性あり システムが正確に取得
リアルタイム性 低い(気づいた時点で記録) 高い(即座に記録)
運用コスト 高い(人が対応する必要あり) 低い(一度設定すれば自動)
カスタマイズ性 自由に記述可能 スクリプト次第で柔軟に対応

まとめ

今回は、GoogleスプレッドシートのApps Scriptを使ってエラーログを別シートに自動記録する方法を解説しました。try…catch構文とログ書き込み関数を組み合わせるだけで、運用後の追跡が格段に楽になります。また、メール通知やログのカスタマイズを加えることで、さらに強力な監視体制を構築できます。まずは、今回紹介した基本のコードを自分のスクリプトに組み込んでみてください。ログが蓄積されることで、問題の早期発見と迅速な対応が可能になるでしょう。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。