GAS学習note:Day8 ログ管理で“動きを見える化”〜AIと一緒にトラブルを減らすGAS運用〜
はじめに
Day7で「通知機能(メール/Slack)」を追加し、
GASが自動で“報告”まで行ってくれるようになりました。
でも自動化が進むほど、気になるのが次の問題👇
✅ 「ちゃんと動いてる?」
✅ 「いつエラーが出た?」
✅ 「何件処理した?」
そこでDay8では、ログ管理(Logging) に注目します。
1️⃣ ログとは?
ログとは、GASの動作履歴やエラー内容を記録する仕組みです。
プログラムがバックグラウンドで動くようになった今、
ログは「見えない裏側の記録ノート」です。
2️⃣ 基本のログ出力:Logger.log()
GASには、標準で「Logger」というオブジェクトがあります。
function dueAlert() {
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("タスク管理");
const last = sh.getLastRow();
const today = new Date();
today.setHours(0, 0, 0, 0);
Logger.log("処理開始:" + today);
for (let r = 2; r <= last; r++) {
const due = sh.getRange(r, 6).getValue();
const status = sh.getRange(r, 7).getValue();
if (!(due instanceof Date)) continue;
if (due < today && status === false) {
sh.getRange(r, 8).setValue("期限切れ");
Logger.log(`期限切れ検出 → 行:${r}, 期限:${due}`);
}
}
Logger.log("処理完了");
}
📘 確認方法
スクリプトエディタ上で実行後、
メニュー → 表示 → ログ で記録内容を確認できます。
3️⃣ 実務向けログ保存:スプレッドシートに出力
定期的に動くトリガー処理は、Loggerでは見逃すことも。
そこで、ログ専用シートを用意して残しておくと安心です👇
function writeLog(message) {
const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LOG");
const time = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss");
logSheet.appendRow([time, message]);
}
これを既存コードに組み込むだけ。
function dueAlertWithLog() {
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("タスク管理");
const last = sh.getLastRow();
const today = new Date();
today.setHours(0, 0, 0, 0);
writeLog("処理開始");
for (let r = 2; r <= last; r++) {
const due = sh.getRange(r, 6).getValue();
const status = sh.getRange(r, 7).getValue();
if (!(due instanceof Date)) continue;
if (due < today && status === false) {
sh.getRange(r, 8).setValue("期限切れ");
writeLog(`期限切れ検出:行${r}`);
}
}
writeLog("処理完了");
}
📊 結果イメージ(LOGシート)
日時メッセージ2025/10/10 08:00:00処理開始2025/10/10 08:00:02期限切れ検出:行52025/10/10 08:00:03処理完了
4️⃣ エラーをキャッチしてログに残す
トリガー実行時は「エラーが出ても気づかない」のが落とし穴。
そこで try...catch を使って安全にログを残します👇
function safeDueAlert() {
try {
dueAlertWithLog();
} catch (e) {
writeLog("⚠ エラー発生:" + e.message);
MailApp.sendEmail("you@example.com", "【GASエラー通知】", e.stack);
}
}
💡 ポイント
try ブロックで通常処理を実行
catch ブロックでエラーを検知
ログ+メール通知で 「失敗も見逃さない」仕組み
5️⃣ ChatGPTと一緒にログを分析してみよう
自動化が増えると、ログも溜まります。
でも「エラーが出た時だけ抽出したい」「処理時間が長い日を見つけたい」など、
データを読み解くのはちょっと大変。
そこでChatGPTに質問👇
💬 実際のやり取り
📘 あなた
LOGシートに「エラー発生」「処理完了」などが記録されています。
ChatGPT、このデータから最近エラーが多い日を教えてもらえますか?
🤖 ChatGPT
もちろんです!
日付ごとに「⚠ エラー発生」が何件あったか数える関数を作りましょう👇
=QUERY(LOG!A:B, "select A, count(B) where B contains 'エラー' group by A label count(B) '件数'")
📘 あなた
すごい!スプレッドシート上で可視化できました✨
ChatGPTに聞いたらログ分析まで自動化できるなんて…!
💡 AIを活かすポイント
ChatGPTは「ログの読み方」まで提案できる
SQLライクなQUERY関数や正規表現をサクッと生成してくれる
「何を知りたいか」を伝えると、最適な式・コードを出してくれる
6️⃣ GAS × ChatGPT で「止まらない自動化」を実現

まとめ:Day8で身についた力
Day8では、「動かす」から「見守る」へ。
GASが自動で動き続ける仕組みを、AIと一緒に“安全運転化” しました。
習得したスキル
Logger.log()で開発時の確認ができる
LOGシートで履歴を残すことで、後から状況を追える
try...catchでエラーを検知し、メールで通知
ChatGPTにログを分析してもらうことで、改善点を発見できる
💡 GAS × AI × ログ管理 =「止まらない自動化」
次回予告(Day9)
Day9では、「入力補助と自動入力」をテーマにします。
ユーザーがスプレッドシートを編集したときに、
ChatGPTが提案した値を自動入力する“賢い補助ツール”を作っていきます。
