n8n-debugging について
n8n ワークフローの保守担当者向けに、パラメーター、接続、データコンテキスト、ロジックの問題を順に調べるスキルです。実行記録やバージョン差を確認してから、バグかどうかを判断します。
主な機能
- 01原因を可能性の高い順に確認
- 02実行データとエラーの調査
- 03ノード設定と接続の検証
- 04データ消失やアイテムコンテキスト喪失の特定
- 05バージョン差とソースコードの確認
活用シーン
- 01ノード設定ミスの特定
- 02ワークフロー接続や分岐の診断
- 03欠落フィールドやアイテム紐付けの追跡
- 04バージョン差と実際の不具合の切り分け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ n8n-io/ skills --skill n8n-debuggingインストール後、Claude Code で/n8n-debuggingを入力して読み込まれたか確認します。
同梱ファイルreferences/FETCHING_N8N_SOURCE.mdreferences/PARAMETER_VERIFICATION.md
詳細
n8n のデバッグ
問題が発生した場合、原因はほぼ常に次のいずれかです。
- パラメーターの設定ミス(値や型が間違っている、フィールドが不足している)。
- 古い前提(覚えているものとはバージョンや動作が異なる)。
- パスの設定ミスや誤接続(出力インデックスが間違っている、Merge の入力が間違っている、接続が不足している、IF/Switch が間違った分岐に接続されている)。
- 上流データの消失(中間ノードが
$jsonを独自の出力で置き換えたため、下流の$json.xが、そこにあるはずなのに null として解決される)。修正方法:安定した上流ノードを名前で参照します($('Earlier Node').item.json.x)。 - アイテムコンテキストの喪失(Aggregate、Execute Once、または Split Out のフロー後に、n8n が
.itemの参照先を確定できず、「The expression is referencing... multiple matching items」のようなエラーが発生する)。修正方法:Merge ノードでコンテキストを再確立する、明示的な検索に$input.all().find(...)を使う、またはアイテムの対応関係が安定するように設計し直す(たとえば、ステートレスなサブワークフローに分割する)。 - 論理エラー(接続もパラメーターも正しいのに、ワークフローが期待どおりに動作しない。コードのロジックバグと同じです)。
- 実際のバグ(まれですが、存在します)。
体系的に診断してください。まず簡単な確認を行い、それで解決しない場合に限り、詳しく調査します。
絶対に守ること
ユーザーの話を信じてください。「動きません」という言葉は、症状の説明が正確でなくても、期待どおりに動作していないことを意味します。「動くはずです」や「本当に X をしていますか?」といった返答で片付けないでください。まず調査します。何が起きるべきかについてはユーザーの話が、実際に何が起きているかについては実行データとソースが真実です。原因を特定できない場合は、もっともらしい作り話をするよりも、「まだわかりません」と答えるほうが適切です。
優先して確認する項目(原因と簡単な確認方法)
原因と簡単な確認方法を、可能性の高い順に対応させます。
-
パラメーターの設定ミス →
get_node_typesで再取得し、get_workflow_detailsと照合して、型、値、フィールドの不足による不一致を探します。問題のノードに対してのみvalidate_node_configを実行すると、パラメーターごとのエラーが直接返されます。ネストが深い、または条件付きの構造を持つノードでは、差分を目視で確認するよりも高速です。 -
古い前提 → n8n のバージョンを尋ね、ユーザーが最後にスキルプラグインを更新した時期を尋ねます。動作がスキルの説明と矛盾する場合は、仕様の変化を疑います。
-
パスの設定ミスや誤接続 →
get_workflow_detailsでconnectionsオブジェクトを確認します。Merge の入力が一致しない場合は、n8n-node-configurationのreferences/MERGE_NODE.mdを参照してください。 -
上流データの消失 →
$json.xの参照をチェーンに沿ってたどり、json を独自の出力で置き換えているノードがないか確認します。よくある原因は、Aggregate、HTTP-binary、Extract from File、"Run for All Items" モードの Code、分岐した Merge です。これらに限りません。出力の形状に上流フィールドが含まれていない場合、どのノードでもこの問題が起きる可能性があります。 -
アイテムコンテキストの喪失 → Aggregate/Execute Once/Split Out の後に
.itemの参照がないか確認し、$input.all().find(...)または Merge のアンカーに切り替えます。 -
論理エラー →
get_executionでデータをステップごとに追跡し、各ノードの出力を期待される結果と比較します。 -
実際のバグ → まず n8n のソースを読み、次に GitHub の Issue を確認し、その後に回避策を探します。
外部 API の問題については、上流サービスの API ドキュメントが(n8n のラッパーではなく)正しい情報源です。必要に応じて、API ドキュメントと n8n のソースコードを取得してデバッグしてください。
手順を追った確認
上記の簡単な確認ですぐに原因を特定できない場合は、次の手順を順番に進めてください。
Step 1: 症状を確認する
次の点を尋ねます。
- 何を期待していましたか?
- 実際には何が起きましたか?
- エラーメッセージの文面は何ですか?
- 最後に正常に動作したのはいつですか?それ以降に何が変わりましたか?
曖昧な説明(「壊れています」)でも、具体的な内容(「メールが間違ったアドレスに送信される」や「ワークフローが空の本文で 500 を返す」)を尋ねれば、対処できるようになります。
Step 2: 実行を確認する
get_execution({ executionId: <execution_id>, workflowId: <workflow_id>, includeData: true })
次の点を確認します。
- どのノードで失敗しましたか?
- そのノードにはどのような入力がありましたか?
- エラーメッセージは何ですか? 注意深く読んでください。通常、原因を示しています。
実行 ID がない場合は、ユーザーに再実行を依頼してください。
ステップ 3:ワークフローを再取得する
get_workflow_details({ workflowId: <workflow_id> })
実際の現在の状態を確認します。ユーザーは別のワークフローを見ているか、古いバージョンを覚えている可能性があります。
次の点を比較します。
- ノードとユーザーの想定。
- 接続と意図:
get_workflow_detailsで取得し、connectionsオブジェクトを SDK コードと比較します。 - 認証情報と想定(
n8n-credentials-and-securityに従います)。 - 上流データ除去のリスク: データソースと下流の
$json.xコンシューマーの間に、独自の出力で json を置き換えるノードがないか確認します。よくある該当例は HTTP-binary、Extract from File、Aggregate、「Run for All Items」モードの Code、分岐を含む Merge ですが、出力の形状に上流フィールドが含まれていなければ、どのノードでも発生する可能性があります。コンシューマーでは$jsonではなく、ソースノードを名前で参照する必要があります($('Source Node').item.json.x)。そうしないと、フィールドが気づかないうちに null として解決されます。 - アイテムコンテキストのリスク: Aggregate/Execute Once/Split Out の後に、下流の
.item参照がないか確認します。n8n ではアイテムを決定的にペアリングできない場合があります。過去の実行で「The expression is referencing... multiple matching items」を探します。
ステップ 4:ノードタイプを再取得する
get_node_types([{ name: '<failed-node>', resource: '...', operation: '...' }])
実際のパラメーターの形状と設定を比較します。よくある不一致は次のとおりです。
- 必須パラメーターがない。
- 型が異なる(文字列と数値など)。
- n8n の UI の型ドロップダウンでは、
objectとarrayは別の型です(Set、IF、Switch、Filter など、UI で型を選択する場所)。objectを選択しても配列値は受け付けられず、その逆も同様です。式自体の中では通常の JS なので(配列もオブジェクトです)、この違いが影響するのは UI で型を選択する箇所だけです。={{ ... }}式が、型指定されたスロットに誤ったコンテナーの形状を返す場合は注意します。 - 親が設定されていない依存パラメーター(例:
authentication !== 'none'でないのにcredentialsが設定されている、またはoperation === 'executeQuery'でないのにqueryが設定されている)。適切な判別値を渡してget_node_typesで再取得します。
手動で形状と設定の差分を比較するのが面倒な場合(深いパラメーター、AI ツールのサブノード、多数の条件分岐など)は、validate_node_config を直接実行します。失敗ごとに { path, message } を返します。ツールのサブノードでは isToolNode: true を設定します。
ステップ 5:ピン留めデータでテストする
prepare_test_pin_data({ workflowId: '<id>' })
test_workflow({ workflowId: '<id>' })
制御された入力を使うと、「ワークフローが壊れているのか」と「入力がおかしいのか」を切り分けられます。ピン留めデータでは動作し、実際の入力では失敗する場合、問題は実際の入力の処理にあります。
ピン留めデータでも誤った出力が生成される場合は、ロジックエラーの可能性が高いです。各ノードの出力を、想定した内容と照らし合わせて追跡します。テスト実行で get_execution を使うと、各ステップで実際に出力されたデータを確認できます。各ノードが何をしたかを判断する際は、このデータが正となります。
ステップ 6:n8n のソースコードを読む
すべて確認しても、動作がおかしいと思われる場合は、次を確認します。
github.com/n8n-io/n8n
- 組み込みノードは
packages/nodes-base/nodes/<NodeName>。 - 実行ロジックは
packages/cli/src/...。 - ワークフローのランタイムは
packages/core/src/...。
コードの動作が事実です。
references/FETCHING_N8N_SOURCE.md を参照してください。
ステップ 7:どちらかのバージョンのずれを疑う
ステップ 1〜6をすべて確認しても動作が期待どおりでない場合、残る原因として最も可能性が高いのはバージョンのずれです。次の2つは、それぞれ独立してずれていきます。
- **相手の n8n インスタンスのバージョン。**確認してください。(UI:
Settings → About、またはGET /rest/settings。)古いインスタンスでは、このスキルが想定するパラメーターやツールが存在しない場合があります。非常に新しいインスタンスでは、パラメーターの形式やツール名が変わっている場合があります。最新の n8n リリースへの更新を提案してください。修正のうわさがある場合や、問題が最近発生した場合は、最新のベータ版への更新を提案してください。 - **このスキルプラグインのバージョン。**これらのスキルは、時間の経過とともに n8n との間にずれが生じます。ユーザーがしばらく前にプラグインをインストールしていた場合は、スキルのリポジトリで
git pull(またはプラグインマネージャーの更新コマンド)を実行するよう提案してください。README の「Drift」セクションを参照してください。
ずれは、get_node_types におけるパラメーター形式の不一致、存在しない、または新しいパラメーターを持つ MCP ツール、スキルの説明と矛盾するツールの説明、スキルの主張と異なる動作として表面化します。こうした問題を見つけたら、ずれの可能性を明確にユーザーに伝えてください。「お使いの n8n のバージョンと、これらのスキルの間にずれがある可能性があります。n8n のバージョンと、スキルを最後に更新した時期を教えていただけますか?」
両方を更新しても問題が解決しない場合は、ステップ 8 に進んでください。
ステップ 8:報告するか、回避策を講じる
バグが確認された場合:
- https://community.n8n.io に質問を投稿するようユーザーに案内します。
- 再現手順を明確にしてユーザーに提示します。
- n8n の GitHub の Issue を確認します。すでに報告されている可能性があります。
- 作業を妨げる場合は、別のノードや方法で回避し、ワークフローのメモに記載します。
- 修正が進行中の場合は、回避策に `` のマークを付けます。
参照ファイル
| ファイル | 確認するタイミング |
|---|---|
references/PARAMETER_VERIFICATION.md | パラメーターの設定に問題がある可能性があり、体系的に再確認する必要がある場合 |
references/FETCHING_N8N_SOURCE.md | n8n の動作がドキュメントと矛盾し、実際のコードを読む必要がある場合 |
アンチパターン
| アンチパターン | 問題点 | 対処法 |
|---|---|---|
| 「動くはずです。X を実行しているか確認してもらえますか?」 | ユーザーの報告を退け、実際の問題を見逃します | ユーザーの話を信頼し、調査してください。 |
| 実行内容を確認せずに再実行する | 同じ失敗を繰り返すだけで、新しい情報が得られません | 失敗した実行で get_execution を実行し、エラーを確認してください |
| 動作が矛盾しているのに、ドキュメントが正確だと思い込む | 誤ったメンタルモデルを受け入れてしまいます | ソースを読んでください。動作が真実です |
| 設定済みのノードが失敗したときに、Code ノードでロジックを再実装する | バグを隠すだけで、根本原因を解決できません | まず原因を特定し、バグが確認された場合にのみ回避策を講じてください |
| ノードを手当たり次第に削除して二分探索する | 時間を無駄にします | get_execution を順に確認し、失敗したノードを直接特定してください |
| MCP で確認せず、ユーザーに再度スクリーンショットを依頼する | 時間がかかり、エラーが発生しやすくなります | get_workflow_details と get_execution を使用してください |
| バグの原因を理解せずに回避しただけなのに、「修正済み」とする | 少し異なる形でバグが再発します | 原因を記録してください。回避策を講じる場合は、`` のマークを付けてください |
| ユーザーの n8n のバージョンや、スキルを最後に更新した時期を尋ねずに「バグ」と断定する | 実際の原因はバージョンのずれであることが多く、ユーザーが更新すれば「バグ」が解消します | 報告する前に、両方のバージョンを確認してください。ステップ 7 を参照してください。 |