毎朝のバックアップとバッチ処理の実行結果を集め、失敗と警告を原因の種類で分類して、当番への連絡文まで作る
夜間に動いたバックアップとバッチ処理の結果を毎朝集め、成功・失敗・警告・結果の未着に分けます。失敗と警告は原因の種類で分類し、担当ごとの連絡文の下書きを付けて当番に渡します。
- 生成AI
- ChatGPT/Claude
- 連携・自動化
- Make/n8n/Power Automate
- 対象業界
- EC/IT・SaaS/製造/金融
- 対象部門
- 情報システム
- 対象業務
- 内容確認・チェック/分類・仕分け
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 分類
- 主な効果
- 対応スピード向上/属人化解消/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- ノーコード連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 当番が出社後に共有メールボックスを開き、前夜の結果メールを件名で流し見る
- メールの来ないジョブについて、サーバーに入ってログファイルの末尾を見る
- ジョブの一覧と見比べ、結果を確かめたジョブに印を付ける
- 失敗と警告のものはログを読み、原因の見当をつける
- 一覧に印の付かなかったジョブ(結果が来ていない)を探し、動いたかどうかを確かめる
- 担当のチームごとに、何が起きたか・何をしてほしいかをSlackに書く
- 自動夜間、n8n の Email Trigger(IMAP)が結果メールを受け取り、ジョブ名・終了の状態・時刻を取り出して Data Table に書く
- 自動毎朝7時に Schedule Trigger が動き、メールを出さないジョブのログファイルを SSH ノードで取りに行く
- 自動ジョブの台帳と照らし、成功・失敗・警告・結果の未着を規則で分ける
- 自動失敗と警告のものだけ、ログの該当箇所を抜き出し、伏せるべき文字列を置き換える
- 自動Text Classifier ノードが、原因の種類(容量・認証・接続など)に分類する
- 自動Basic LLM Chain が、担当のチームごとに連絡文の下書きを作る
- 自動当番に、未着・その他・失敗・警告の順に並べた一覧と下書きを Slack で送る
- 人当番が一覧と下書きを確かめ、直してから担当のチームに送る
- 人担当のチームが、再実行や復旧の要否を決めて対応する
各工程の詳しい説明を読む
- 当番が出社後に共有メールボックスを開き、前夜の結果メールを件名で流し見る
- メールの来ないジョブについて、サーバーに入ってログファイルの末尾を見る
- ジョブの一覧と見比べ、結果を確かめたジョブに印を付ける
- 失敗と警告のものはログを読み、原因の見当をつける
- 一覧に印の付かなかったジョブ(結果が来ていない)を探し、動いたかどうかを確かめる
- 担当のチームごとに、何が起きたか・何をしてほしいかをSlackに書く
(a)結果が2か所に散らばっている。 メールで届くものとログファイルにしか無いものがあり、当番は2つを行き来しながら一覧に印を付けています。 120本を見終わるころには始業から1時間が過ぎています。
(b)ログの読み方が人によって違う。 同じ「警告」でも、毎晩出ていて放っておいてよいものと、容量が詰まりかけている前触れのものがあります。どれを放っておいてよいかは、長く担当している人の頭の中にあります。 当番が新しい人の日は、連絡が増えるか、逆に抜けます。
(c)来なかった結果に気づかない。 失敗のメールは目に付きますが、ジョブがそもそも動かなかったときは、メールが1通少ないだけです。 一覧に印を付けるときに見落とすと、何日もバックアップが取れていなかったことに後から気づきます。
(d)連絡文を書くのに時間がかかる。 ログの該当箇所を貼り、何が起きたかを書き、担当のチームに頼むことを添える。失敗が5本あれば、5通を書くことになります。
- 【自動】 夜間、n8n の Email Trigger(IMAP)が結果メールを受け取り、ジョブ名・終了の状態・時刻を取り出して Data Table に書く
- 【自動】 毎朝7時に Schedule Trigger が動き、メールを出さないジョブのログファイルを SSH ノードで取りに行く
- 【自動】 ジョブの台帳と照らし、成功・失敗・警告・結果の未着を規則で分ける
- 【自動】 失敗と警告のものだけ、ログの該当箇所を抜き出し、伏せるべき文字列を置き換える
- 【自動】 Text Classifier ノードが、原因の種類(容量・認証・接続など)に分類する
- 【自動】 Basic LLM Chain が、担当のチームごとに連絡文の下書きを作る
- 【自動】 当番に、未着・その他・失敗・警告の順に並べた一覧と下書きを Slack で送る
- 【人】 当番が一覧と下書きを確かめ、直してから担当のチームに送る
- 【人】 担当のチームが、再実行や復旧の要否を決めて対応する
3番目が、この設計の分かれ目です。 成功と未着は規則で決まるので、AIに判断させません。AIの判断が入るのは5番目と6番目だけで、そこに渡るのは失敗と警告の数本です。 120本すべてをAIに通す形にすると、成功を失敗と取り違える経路ができます。
8番目で当番が送る形にしているのも意図してのことです。 下書きを自動で担当に流すと、分類の誤りがそのまま別のチームの朝の作業になります。当番が一覧を見る時間は残しますが、読むのはログではなく分類と抜粋です。
02今回想定するシステム構成
【夜間】結果メール(バックアップソフト/ジョブの実行基盤) ▼ Email Trigger(IMAP) n8n ── Code(ジョブ名・状態・時刻の取り出し)── Data Table(夜間の結果) 【トリガー】毎朝 7:00(Schedule Trigger) ▼ n8n ├─ SSH(Download File)── メールを出さないジョブのログファイル ├─ Data Table ── ジョブの台帳と夜間の結果を照らす ├─ Code ── 成功/失敗/警告/未着を規則で分ける・抜粋と伏せ字 ▼ Text Classifier + Anthropic Chat Model ── 原因の種類に分類(その他の出口あり) ▼ Basic LLM Chain + Anthropic Chat Model ── 担当ごとの連絡文の下書き ▼ Slack ── 当番へ一覧と下書き ▼ 【当番が確かめて担当へ送る】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n | Make、Power Automate |
| 生成AI | Claude(n8n の Anthropic Chat Model ノード) | OpenAI API |
| 保管 | n8n の Data Table(ジョブの台帳、夜間の結果、分類の記録) | スプレッドシート |
| 通知 | Slack(n8n の Slack ノード) | Microsoft Teams |
新しく足すのは n8n と台帳だけです。 結果メールを受ける共有メールボックス、サーバーのログ、Slack は今あるものを使います。ジョブの一覧はスプレッドシートから Data Table に写し、ジョブ名・担当のチーム・結果の受け取り方・毎晩動くかの列を持たせます。
n8n を選ぶのは、自分のサーバーに置けるからです。 ログにはサーバー名やファイルのパスが並びます。ワークフローの基盤を社内に置き、外へ出るのはAIに渡す抜粋だけにできます。
分類には Text Classifier ノードを使います。 公式ページでは、区分ごとに名前と説明を持たせ、各入力をモデルに渡してどの区分かを決めるとされています。区分ごとに出口が分かれるので、後ろの処理を区分で変えられます。
03どうやって実装するのか
処理の起点を決める
トリガーは2つに分けます。 結果メールは夜間に1通ずつ届くので、Email Trigger(IMAP)で受け取るたびに Data Table へ書いておきます。 朝の点検は Schedule Trigger で毎朝7時に動かし、夜のうちにたまった結果を読みます。
Email Trigger(IMAP)は、公式ページでは指定したメールボックスからメールを受け取るトリガーで、受け取ったときに既読にするかを選べ、取得するメールを node-imap の検索条件で絞れるとされています。結果メールの送り元で絞り、既読にする設定にします。 当番が共有メールボックスを開いたときに、未読で残っているものは n8n が受け取れなかったものになります。
Schedule Trigger は Days の間隔で、7時0分を指定します。 公式ページでは、Schedule Trigger はワークフローを保存して公開しないと動かないとされ、タイムゾーンはワークフローの設定、無ければインスタンスの設定に従い、自分でサーバーに置く場合の既定は America/New York です。ワークフローの設定で Asia/Tokyo を選びます。
休日も毎朝動かします。 土日の朝の一覧は当番の携帯に届き、未着とその他が無ければ月曜にまとめて見ます。月曜に2晩分を一度に見るより、毎朝の一覧が積み上がっているほうが追いやすくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 結果メール | 送り元、件名、本文(ジョブ名、終了の状態、開始と終了の時刻、エラーの文) | 運用用の共有メールボックス |
| ログファイル | メールを出さないジョブの、前夜の実行分の行 | 各サーバー |
| ジョブの台帳 | ジョブ名、担当のチーム、結果の受け取り方(メール/ログ)、動く曜日、終わるはずの時刻、放っておいてよい警告の文 | Data Table |
| 分類の記録 | 過去の失敗・警告のジョブ名、抜粋、分類、当番が直した分類 | Data Table |
質を決めるのは、ジョブの台帳の「放っておいてよい警告の文」の列です。 毎晩同じ警告を出し、担当も承知しているものがあります。この列が空だと、毎朝同じ警告が一覧に並び、当番は一覧を読まなくなります。 長く担当している人の頭の中にある判断を、ここに書き出します。
「動く曜日」と「終わるはずの時刻」は、未着の判定に使います。 月末だけ動く集計を毎朝「未着」と出すと、本当の未着が埋もれます。
データの取得方法を決める
結果メールは、受け取ったときに Code ノードで項目を取り出します。 件名と本文の書き方は製品ごとに決まっているので、送り元ごとに取り出しの規則を分けます。 取り出すのはジョブ名、終了の状態(成功・警告・失敗)、開始と終了の時刻、本文のエラーの文です。取り出せなかったメールは、状態を「不明」として書きます。
ログファイルは SSH ノードの Download File で取ります。 公式ページでは、SSH ノードには Execute Command・Download File・Upload File の操作があり、Download File はファイル名を含むパスを指定して取得するとされています。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 前夜の結果メールの取り出し結果 | Data Table(夜間の結果) | 状態の判定 |
| ログファイル | SSH の Download File | メールを出さないジョブの状態と抜粋 |
| ジョブの台帳 | Data Table | 未着の判定、担当、放っておいてよい警告 |
| 過去の分類 | Data Table(分類の記録) | 同じジョブの前回の分類を一覧に添える |
SSH の接続には、ログを読むだけの専用の利用者を用意します。 Execute Command の操作も使えますが、この構成ではファイルを取るだけにします。点検のワークフローから、サーバーでコマンドを動かせる経路を作らないためです。 ログの置き場所が日付で変わるジョブは、パスを式で組み立てます。
AIへ渡す前に整形する
- 状態を規則で決める … 結果メールの状態とログの終了コードで、成功・警告・失敗に分けます。ここにAIは使いません
- 未着を洗い出す … ジョブの台帳のうち、前夜に動くはずで、結果が1件も無いものを「未着」とします(Data Table の「If Row Does Not Exist」で照らします)
- 放っておいてよい警告を外す … 台帳の文と一致する警告は「既知」として一覧の末尾に回します
- ログを抜粋する … 失敗と警告のものは、エラーの行と前後数行だけを切り出します。成功の行や進み具合の表示は捨てます
- 伏せ字にする … パスワード、アクセスキー、接続文字列、メールアドレスに見える文字列を置き換えます
- 前回の分類を添える … 同じジョブの直近の分類を一覧に並べます(AIには渡しません)
2番目が、この構成でいちばん効きます。 未着は「何かが無い」ことなので、ログを読むAIには見つけられません。 台帳と照らす規則で拾い、一覧の先頭に出します。
5番目は、AIに渡す前に必ず通します。 バッチのログには、接続のときの引数がそのまま書き出されていることがあります。伏せたかどうかを、抜粋の側に印として残します。
AIに処理させる
させるのは、失敗と警告の抜粋を、決めた原因の種類のどれかに振り分けることです。 Text Classifier ノードの区分に、名前と説明を書きます。公式ページでは、区分の説明はモデルに意味を伝えるもので、意味が自明でないときに大事とされています。
| 区分 | 説明に書くこと |
|---|---|
| 容量不足 | 保存先・ディスク・割り当ての不足。空き容量や上限の語が出る |
| 認証・権限 | パスワードの期限切れ、証明書、アクセス権の拒否 |
| 接続・応答なし | 接続先のサーバー・データベース・外部サービスに届かない、時間内に応答が無い |
| 対象の使用中 | ファイルやテーブルが使用中・ロックされていて処理できない |
| 時間超過・重複 | 終わるはずの時刻を過ぎた、前の回が終わらず重なった |
| 入力データの異常 | 連携先から来たファイルが無い・空・形式が違う |
Allow Multiple Classes To Be True は切ります。 1本のジョブに区分を1つ付け、連絡先を1つに決めるためです。When No Clear Match は「Output on Extra, 'Other' Branch」にします。 公式ページでは、既定の「Discard Item」はどの区分も検出されなかった入力を落とすとされています。既定のままだと、見慣れない失敗ほど一覧から消えます。
連絡文は、分類の後ろに置いた Basic LLM Chain で作ります。 公式ページでは、Basic LLM Chain はプロンプトを決め、出力の形を求めるときは Structured Output Parser などの出力パーサーをつなぐとされています。区分と抜粋、台帳の担当を渡し、担当のチームごとに1通にまとめさせます。
| させないこと | 理由 |
|---|---|
| 成功か失敗かの判定 | 終了の状態と終了コードで決まる。規則で行う |
| 未着の判定 | ログに現れない。台帳との照合で行う |
| 再実行してよいかの判断 | 二重の実行やデータの重複につながる。担当が決める |
| 原因の断定 | 抜粋から言えるのは「種類」まで。断定は担当が調べてから |
指示内容を固定する
Text Classifier の System Prompt Template と、Basic LLM Chain のメッセージに、次のように書きます。
【Text Classifier の System Prompt Template】
あなたは情報システム部の運用担当として、夜間に失敗または警告で終わった
ジョブのログの抜粋を読み、原因の種類を1つだけ選びます。
区分の一覧:
{categories}
- 抜粋に書かれている文だけで判断してください。
- どの区分の説明にもはっきり当てはまらないときは、無理に選ばないでください。
- 複数の区分の語が出ているときは、最初に起きたエラーの行で選んでください。
【Basic LLM Chain のシステムメッセージ】
あなたは運用の当番の代わりに、担当のチームへ送る連絡文の下書きを作ります。
【入力】
- 担当のチーム名
- そのチームのジョブごとの、ジョブ名・状態・区分・ログの抜粋・前回の区分
【書き方】
1. 1つのチームに1通、ジョブごとに箇条書きにしてください。
2. 各ジョブについて「何が起きたか」を抜粋の文に沿って1〜2文で書き、
根拠にしたログの行をそのまま1行写してください。
3. 最後に「確認をお願いしたいこと」を書いてください。
【厳守事項】
- 原因を断定しないでください。「〜の可能性があります」と書き、
抜粋に書かれていないことを補わないでください。
- 再実行してよい、再実行してください、とは書かないでください。
再実行するかは担当のチームが決めます。
- 抜粋の中の伏せ字([MASKED])を推測して戻さないでください。
- ログの行は改変せずに写してください。要約した文と写した行を混ぜないでください。
- 区分が「その他」のジョブは、何が起きたかを書かず、
「抜粋だけでは種類を決められませんでした」と書いてください。
「再実行してくださいと書かない」が最も大事な一文です。 書いておかないと、容量不足や接続の失敗には「空きを作って再実行してください」と添えてきます。バックアップの再実行は保存先をさらに圧迫し、連携のバッチの再実行はデータを二重に送ることがあります。 やるかどうかは担当が決めます。
「最初に起きたエラーの行で選ぶ」も効きます。 接続に失敗した後、後続の処理がファイルの無さで次々に失敗すると、抜粋の大半は「入力データの異常」の語で埋まります。元の原因は、最初の1行にあります。
出力形式を固定する
Basic LLM Chain の出力は、Structured Output Parser で次の形に決めます。
{
"team": "基幹システムチーム",
"jobs": [
{
"job_name": "db-backup-sales",
"status": "failed | warning",
"category": "容量不足 | 認証・権限 | 接続・応答なし | 対象の使用中 | 時間超過・重複 | 入力データの異常 | その他",
"what_happened": "",
"evidence_line": "",
"masked": true
}
],
"request": "",
"message_draft": ""
}
1つ目の理由は、category を Text Classifier の出口から機械で入れられることです。 下書きを作るモデルに区分を書き直させず、分類の出口で決まった値をそのまま入れます。 2つのモデルの判断が食い違う余地を作りません。
2つ目は、evidence_line で当番の確認が速くなることです。 当番はサーバーに入らずに、根拠の1行を読んで分類が妥当かを見られます。
3つ目は、masked で伏せ字の有無が残ることです。 伏せた行を含む連絡は、担当がログの原文を見に行く必要があると分かります。
当番への一覧は、Slack のメッセージ1通に次の順で並べます。
| 順 | 中身 |
|---|---|
| 1 | 未着(ジョブ名、担当、終わるはずだった時刻) |
| 2 | その他(分類できなかった失敗・警告、抜粋) |
| 3 | 失敗(区分、根拠の1行、前回の区分) |
| 4 | 警告(同上) |
| 5 | 既知の警告の件数と、成功の件数 |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 運用用の共有メールボックス | Email Trigger(IMAP) | 結果メールの受け取り |
| 各サーバー | SSH ノードの Download File | ログファイルの取得 |
| Data Table | Data Table ノード | ジョブの台帳、夜間の結果、分類の記録 |
| Anthropic のモデル | Anthropic Chat Model ノード | 分類と下書き |
| Slack | Slack ノード | 当番への一覧と下書き、受け取りの返事 |
Data Table は、n8n の中に構造化されたデータを持ち、ワークフローをまたいで使えます。 公式ページでは、行の追加・更新・取得・削除・Upsert と、「行が存在するか」「存在しないか」で入力を振り分ける操作があるとされています。夜間に書くワークフローと朝に読むワークフローで、同じ表を使います。
当番への一覧は、Slack ノードの「Send and Wait for Response」で送ります。 公式ページでは、この操作はメッセージを送って相手の返事を待ってから続けるもので、承認する人は Slack の中で直接返事ができるとされています。当番が「受けた」を押すまで、一覧は未確認として台帳に残ります。 9時を過ぎても押されていなければ、運用グループのチャンネルにもう一度出します。
Anthropic Chat Model ノードは、分類と下書きで別々に置きます。 公式ページでは、サブノードの式は複数の入力があっても常に最初の1件で解決されるとされています。モデルの設定に入力の値を式で入れると、2本目以降のジョブにも1本目の値が使われるので、モデルの設定には入力に依存する値を書きません。
人が確認する
当番が毎朝、一覧の上から順に確かめます。
- 未着を先に見る … ジョブが動かなかったのか、結果のメールだけが来なかったのかを確かめます。バックアップの未着は、その日のうちに取り直すかを担当に決めてもらいます
- その他を見る … 抜粋を読み、どの区分か、あるいは新しい区分が要るかを決めます
- 失敗の分類と根拠の1行を見る … 分類が根拠の行と合っているかを確かめ、違えば直します
- 下書きを直して担当に送る … 送信は当番が行います
- 直した分類を記録する … 分類の記録に、元の区分と直した区分を残します
1番目を省かないでください。 未着は件数が少なく、目立ちません。バックアップが取れていない日が続いたことに気づくのは、たいてい復元が必要になったときです。
5番目は、区分の説明を育てるために要ります。 同じ種類の誤りが続くなら、区分の説明か、台帳の「放っておいてよい警告」の列が足りていません。目標は、当番の確認が毎朝ならして20分前後に収まることです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 結果メールから項目を取り出せない | 状態を「不明」として書き、一覧の「その他」に出す |
| 共有メールボックスに未読が残る | n8n が受け取れなかったもの。Email Trigger の接続を確かめ、その朝の一覧に件数を出す |
| SSH でログを取れない | そのジョブを「未着」と同じ扱いにし、取れなかった理由を添える |
| ログが長すぎる | エラーの行と前後に絞る。絞れないものは先頭と末尾だけを渡し、その旨を付ける |
| 分類がどの区分にも当てはまらない | Other の出口から「その他」として一覧の2番目に出す |
| 出力が決めた形に合わない | 1回だけやり直し、だめなら下書き無しで抜粋だけを一覧に出す |
| 同じジョブが一晩に2回失敗する | 1本にまとめ、回数を添える |
| 結果メールがまったく来ない夜 | 台帳のほぼ全件が未着になる。 件数が多いときは個別に並べず、「結果メールの経路の異常」として先頭に1行で出す |
| 朝のワークフロー自体が動かない | 7時30分に一覧が届いていなければ、当番が手で点検する(Slack の予定のリマインダーで知らせる) |
8行目は、早いうちに作っておいてください。 メールサーバーの不調で結果メールが届かない夜は、120本が一度に未着になります。一覧が未着で埋まると、当番は本当の失敗を探せません。 未着の件数が台帳の半分を超えたら、経路の異常としてまとめます。
記録を残す
- 毎朝の点検で集めた結果(ジョブ名、状態、時刻、受け取り方)と、未着の一覧
- 失敗と警告のログの抜粋(伏せ字の後)と、伏せたかどうか
- Text Classifier の区分と、Basic LLM Chain の下書き
- 当番が直した区分と下書き、送った日時と送り先のチーム
- 当番が「受けた」を押した時刻
- ジョブごとの失敗・警告の回数と区分の推移
4つ目を残すのは、区分の説明を見直すためです。 「接続・応答なし」から「認証・権限」への直しが続くなら、区分の説明に、認証のエラーで出る語が足りていません。
最後の行は、担当のチームとの話し合いの材料になります。 同じジョブが毎週「時間超過・重複」で失敗しているなら、ジョブの時刻をずらすか、処理を分ける相談ができます。
04実装レベルの3段階
最小構成では、集める手間がそのまま残ります。 確かめるための段階です。 半自動化で、1回75分が40分程度になります。 集めて印を付ける①と未着を探す③はほぼ無くなりますが、ログを読む②と連絡文を書く④が残ります。本格構成で21分になり、この段階が本記事の想定です。 差が大きいのは、失敗のたびにログを読んで書いていた作業が、分類と下書きの確認に置き換わるからです。 段階を飛ばさないでください。 半自動化を1か月回すと、毎朝出る既知の警告と、台帳から漏れていたジョブが見えてきます。台帳を整えてから分類を足すほうが、一覧が読まれ続けます。
05工数削減シミュレーション
導入後 20件 × 21分 ÷ 60 = 7 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 自社のサービスや社内システムのバックアップとバッチ処理が数十〜百数十本あり、結果がメールとサーバー上のログファイルに散らばっている情報システム部門。毎朝の点検を当番が持ち回りで行い、ログの読み方や「この警告は放っておいてよい」という判断が人によって違う場合。結果のメールが来なかったジョブに気づくのが遅れたことがある場合。
- ジョブが10本程度で、監視ツールの画面1枚で結果が見渡せる場合。ジョブ管理の製品が失敗の原因の切り分けと担当への通知まですでに行っている場合。ログに顧客の個人情報や認証情報がそのまま書き出され、外部の生成AIに渡せる形に加工できない場合。なお、再実行するか・復旧をどう進めるかの判断はこの構成では代替できません。
07最小構成で試す方法
- 直近1か月で失敗・警告になったジョブのログを、エラーの行と前後数行に絞って30件集める(伏せ字にしてから)
- そのうち、当番が当時どの原因として担当に伝えたかを書き添える
- 手元の生成AIの画面に、第7章の6区分と説明を貼り、30件の抜粋を1件ずつ貼って区分を選ばせる
- 「どれにも当てはまらなければ『その他』と答える」ことを指示に入れる
- 当時の当番の判断と突き合わせる
30件は必ずやってください。 ワークフローを組む前に、「抜粋だけで種類が決まるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の判断と合い、その他が数件 | n8n で組む段に進む |
| 後続の失敗の語に引きずられる | 「最初のエラーの行で選ぶ」を指示に足す。構成は有効 |
| 区分の取り違えが特定の2区分に集まる | 区分の説明を書き直す。区分を増やす前に説明を直す |
3行目はよく出ます。 たとえば接続の失敗と時間超過は、同じ「timeout」の語から出てきます。区分の説明に、どちらの語がどちらに入るかを書くと収まります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 分類できなかった失敗が一覧から消える | When No Clear Match の既定は Discard Item。Other の出口を作る |
| 結果の来なかったジョブに気づかない | ログを読むAIには見つけられない。台帳と照らす規則で拾う |
| 毎朝同じ警告が並び、一覧が読まれなくなる | 台帳に「放っておいてよい警告の文」を持たせ、末尾に回す |
| 後続の失敗の語で区分を取り違える | 最初のエラーの行で選ぶよう指示する |
| 下書きに「再実行してください」と書かれる | 再実行の判断を禁じる。決めるのは担当のチーム |
| ログの中の認証情報が外へ出る | AIに渡す前に伏せ字にし、伏せたかを記録する |
| 7時に動かない | タイムゾーンの既定は America/New York。Asia/Tokyo にし、ワークフローを公開する |
| 2本目以降のジョブに1本目の値が使われる | サブノードの式は最初の1件で解決される。モデルの設定に入力の値を入れない |
| 結果メールが届かない夜に一覧が未着で埋まる | 未着が台帳の半分を超えたら「経路の異常」として1行にまとめる |
| 月末だけ動くジョブが毎朝未着になる | 台帳に動く曜日・日を持たせる |
| SSH の接続でサーバーを操作できてしまう | ログを読むだけの利用者にし、Download File だけを使う |
| 区分を増やしすぎて取り違えが増える | 区分を増やす前に説明を直す |
上の2行が、この構成の失敗のほとんどです。 どちらも「一覧に出てこない」形で起き、当番は無いものに気づけません。 分類の側では Other の出口を、収集の側では台帳との照合を、最初から入れておきます。
下から2行目も、最初に決めておいてください。 点検のためのワークフローがサーバーに入れる権限を持つと、ワークフローの設定を書き換えられたときに、サーバーの操作の経路になります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: ジョブ名、サーバー名、ファイルのパス、ログの文(エラーの内容)、担当のチーム名です。ログには、接続の引数や利用者名が書き出されていることがあります。
- AIに渡すのは伏せ字にした抜粋だけにする … パスワード、アクセスキー、接続文字列、メールアドレスに見える文字列を置き換えてから渡します。成功したジョブのログは渡しません
- ワークフローの基盤を社内に置く … n8n を自社のサーバーに置き、ログの収集と台帳は社内で完結させます。 外に出るのは抜粋だけです
- SSH の利用者の権限を絞る … ログの置き場所を読むだけの利用者にし、鍵は n8n の資格情報として管理します
- 再実行と復旧の判断をAIにさせない … 下書きに再実行の指示を書かせず、判断は担当のチームが行います
- 下書きを自動で担当に送らない … 当番が確かめてから送ります。分類の誤りが別のチームの朝の作業になるのを防ぎます
誤りが起きた場合のリスクは、失敗や未着が一覧に出ずに見逃されることと、誤った分類のまま担当が見当違いの調査を始めることの2つです。 前者は Other の出口と台帳との照合で、後者は根拠の1行と当番の確認で防ぎます。どちらも、当番が抜粋の原文を見る経路を残しておくことで守ります。
10まず何から始めるか
1週目:ジョブの台帳を整える
約120本のジョブについて、担当のチーム、結果の受け取り方(メール/ログ)、動く曜日、終わるはずの時刻の列をそろえます。長く担当している人に、放っておいてよい警告の文を書き出してもらいます。
2週目:30件で試す
直近1か月の失敗・警告のログを伏せ字にして抜粋し、手元の生成AIの画面で6区分に分類させて、当時の当番の判断と突き合わせます。後続の失敗の語に引きずられていないかを最優先で見ます。
3週目:収集と仕分けをつなぐ
n8n で結果メールを Data Table に書き、毎朝7時に台帳と照らして、成功・失敗・警告・未着の一覧を Slack に送るところまで作ります。タイムゾーンを Asia/Tokyo にし、未着が一覧の先頭に出ることを確かめます。
4週目:ログファイルの取得を足す
メールを出さないジョブのログを SSH で取りに行きます。サーバーの担当と、読むだけの利用者の作成を進めます。
2か月目: Text Classifier と Basic LLM Chain を足し、分類と下書きを一覧に載せます。当番が直した分類を記録します。3か月目以降: 当番の「受けた」の返事を足し、1回75分が何分になったかを実測します。当番が誰の日でも同じ一覧で同じ連絡が出せるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Schedule Trigger の間隔(Days など)と cron。ワークフローを保存して公開する必要があること。タイムゾーンがワークフロー、無ければインスタンスの設定に従い、自分で置く場合の既定が America/New York であること | n8n Docs: Schedule Trigger | 2026-10-14 |
| Email Trigger(IMAP)が指定したメールボックスからメールを受け取り、既読にするかを選べ、node-imap の検索条件で取得するメールを絞れること | n8n Docs: Email Trigger (IMAP) | 2026-10-14 |
| SSH ノードに Execute Command・Download File・Upload File の操作があり、Download File がファイル名を含むパスを指定して取得すること | n8n Docs: SSH | 2026-10-14 |
| Data Table が n8n の中に構造化データを持ちワークフローをまたいで使えること。行の追加・更新・取得・削除・Upsert と、「行が存在するか」「存在しないか」の操作 | n8n Docs: Data Table | 2026-10-14 |
Text Classifier が区分の名前と説明でモデルに分類させること。複数の区分を許すかの設定。When No Clear Match の既定が Discard Item で、Other の出口を作れること。System Prompt Template の {categories}、Auto-Fixing | n8n Docs: Text Classifier | 2026-10-14 |
| Basic LLM Chain がプロンプトを決め、出力の形を求めるときに Structured Output Parser などをつなぐこと。System のメッセージを設定できること | n8n Docs: Basic LLM Chain | 2026-10-14 |
| Anthropic Chat Model が Claude のモデルを使うこと。サブノードの式が常に最初の1件で解決されること | n8n Docs: Anthropic Chat Model | 2026-10-14 |
| Slack ノードの Message の操作に Send と Send and Wait for Response があり、承認する人が Slack の中で直接返事できること | n8n Docs: Slack | 2026-10-14 |
再実行・復旧の判断と、ログの取り扱いの規程は、自社の運用の取り決めに従ってください。 本記事は n8n の公開ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1470)についてのご相談はこちらから。
