Googleスプレッドシートで業務を自動化する際、Apps Scriptを使うと便利な機能を実装できます。しかし、スクリプトがエラーで止まったときに、その原因を特定するのは意外と手間がかかるものです。特に、複数のスクリプトを運用していると、どこでどのようなエラーが発生したかを追跡するのが難しくなります。この記事では、エラーログを自動的に別シートに記録する方法を紹介します。これにより、運用後の追跡が大幅に簡素化されます。
【要点】エラーログ自動記録の3ステップ
- Apps Scriptのトリガー設定: スクリプトのエラー時に自動実行される関数を設定します。
- エラーハンドリングの実装: try…catch構文でエラー情報を取得し、ログシートに書き込みます。
- ログシートの設計: タイムスタンプ・エラー内容・スクリプト名などを記録する列を用意します。
ADVERTISEMENT
なぜエラーログが必要なのか
Apps Scriptで自動化を構築すると、データの処理やメール送信など定型的な作業を任せられます。しかし、スクリプトが正常に動作しているかどうかは、実際に確認しないとわかりません。特に、夜間のバッチ処理や大量データの処理中にエラーが発生した場合、気づかないまま放置されることもあります。エラーログを自動で記録することで、問題が起きたときにすぐに原因を特定でき、復旧までの時間を短縮できます。また、複数人でスクリプトを共有している場合も、ログを共有することでチーム全体の状況把握が容易になります。
エラーログを記録する基本の手順
ここでは、スクリプト内でエラーが発生したときに、別のシートにログを書き込む方法を解説します。まずは、ログを保存するシートを準備してください。
手順1: ログシートを作成する
- スプレッドシートを開く
エラーを記録したいスプレッドシートを開きます。既存のシートでも構いませんが、専用のシートを追加することをおすすめします。 - 新しいシートを追加する
シート下部の「+」ボタンをクリックして新しいシートを追加します。シート名を「ErrorLog」などに変更します。 - 見出し行を設定する
1行目に以下の列見出しを入力します。
・A1: タイムスタンプ
・B1: エラーメッセージ
・C1: エラー行番号
・D1: スクリプト名(または関数名)
・E1: その他情報(任意)
手順2: エラーハンドリング関数を実装する
- スクリプトエディタを開く
スプレッドシートのメニューから「拡張機能」→「Apps Script」を選びます。 - ログ書き込み用の関数を作成する
以下のコードをスクリプトエディタに貼り付けます。この関数は、エラー情報を引数で受け取り、ログシートに追記します。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); }
} - メインの処理にtry…catchを追加する
既存の関数を修正して、エラー時にwriteErrorLogを呼び出します。例:function myFunction() {
try {
// 通常の処理を記述
var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
// 以下、データ処理など
} catch (e) {
writeErrorLog(e.message, e.lineNumber, 'myFunction', '');
}
}
手順3: トリガーを設定して自動化する
- トリガーを追加する
スクリプトエディタの左メニューから「トリガー」(時計アイコン)をクリックします。 - トリガーを作成する
右下の「トリガーを追加」をクリックし、次のように設定します。
・実行する関数: メインの関数(例: myFunction)
・イベントのソース: 時間主導型またはスプレッドシートから選択(例: 時間主導型で1時間おき)
・エラー通知設定: 「今すぐ通知を受け取る」をオンにしておくと、エラー時にメールで通知されます。 - 権限を承認する
初回実行時に権限の承認を求められます。内容を確認して「許可」をクリックします。
ログのカスタマイズと応用
基本のログ機能に加えて、以下のようなカスタマイズが可能です。
エラー発生時にメール通知も送る
writeErrorLog関数内でGmailApp.sendEmailを呼び出せば、ログ記録と同時に管理者へメールを送れます。これにより、重大なエラーをリアルタイムで把握できます。
ログシートにフィルタや色を設定する
ログが溜まってくると、特定のエラーを探すのが大変です。スクリプトで自動的にフィルタを適用したり、エラーの種類に応じてセルの背景色を変えたりすることもできます。
別のスプレッドシートにログを保存する
複数のスプレッドシートで同じログシートを共有したい場合は、SpreadsheetApp.openByIdで別のスプレッドシートを指定します。ただし、権限設定に注意が必要です。
ADVERTISEMENT
エラーログ記録の注意点
実装にあたっては、以下の点に注意してください。
ログシートへの書き込み自体がエラーになる可能性
ログシートが存在しない場合や、書き込み権限がない場合は、writeErrorLog内でさらにエラーが発生します。そのため、関数の先頭でシートの有無をチェックし、なければ作成するロジックを追加すると安全です。
トリガーの実行回数制限
Apps Scriptには実行時間や呼び出し回数に制限があります。短時間に大量のエラーが発生すると、ログ書き込みが間に合わない可能性があります。その場合は、ログをまとめてバッチ処理する方法を検討してください。
個人情報の取り扱い
エラーメッセージに氏名やメールアドレスなどの個人情報が含まれる場合は、ログシートのアクセス権限を適切に設定してください。共有範囲を必要最小限に抑えることが大切です。
手動ログと自動ログの比較
| 項目 | 手動ログ | 自動ログ(Apps Script) |
|---|---|---|
| 記録のタイミング | エラー発生後、手動で記入 | エラー発生と同時に自動記録 |
| 情報の正確性 | 人による入力ミスの可能性あり | システムが正確に取得 |
| リアルタイム性 | 低い(気づいた時点で記録) | 高い(即座に記録) |
| 運用コスト | 高い(人が対応する必要あり) | 低い(一度設定すれば自動) |
| カスタマイズ性 | 自由に記述可能 | スクリプト次第で柔軟に対応 |
まとめ
今回は、GoogleスプレッドシートのApps Scriptを使ってエラーログを別シートに自動記録する方法を解説しました。try…catch構文とログ書き込み関数を組み合わせるだけで、運用後の追跡が格段に楽になります。また、メール通知やログのカスタマイズを加えることで、さらに強力な監視体制を構築できます。まずは、今回紹介した基本のコードを自分のスクリプトに組み込んでみてください。ログが蓄積されることで、問題の早期発見と迅速な対応が可能になるでしょう。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
