AI PR

n8nのn8n_runners_enabledでハマる前に読む設定とエラー対策まとめ

記事内に商品プロモーションを含む場合があります。 記載の情報は調査時点での情報です。最新情報は各公式サイトをご覧ください

n8nをセルフホストで使っていると、ログに「N8N_RUNNERS_ENABLED=trueを設定してください」という警告が出て、何をすればよいのか迷うことがあります。特に「n8n n8n_runners_enabled」と検索している人は、単に環境変数の書き方を知りたいだけでなく、有効化すると何が変わるのか、Dockerやworker構成ではどこに設定するのか、エラーが出たときにどう切り分けるのかまで知りたいはずです。

この記事では、n8n公式ドキュメント、タスクランナー設定、Docker構成、外部ランナー、Python Code node、実際に報告されているクラッシュ例やタイムアウト例をもとに、初心者にもわかるように整理します。なお、提供されている情報にない部分は「一般的には」「おそらく」「推測の域を出ませんが」と断りながら説明します。

この記事のポイント
N8N_RUNNERS_ENABLED=trueの意味と設定場所がわかる
✅ internal modeとexternal modeの違いがわかる
✅ Docker、worker、Python Code nodeで詰まりやすい点がわかる
✅ クラッシュ・タイムアウト・メモリ不足時の見直し方がわかる
本日のセール・タイムセールをまとめてチェックできます。

n8n n8n_runners_enabledの基本理解と最初にやるべき設定

n8n n8n_runners_enabledの基本理解と最初にやるべき設定
  1. n8n n8n_runners_enabledへの答えはN8N_RUNNERS_ENABLED=trueでタスクランナーを有効化すること
  2. n8nとはワークフロー自動化ツールでCode node実行にタスクランナーが関係する
  3. n8n aiやAIエージェント利用でもCode node周辺の実行環境を理解することが重要
  4. n8n 使い方 初心者はまずローカルとDockerで環境変数の置き場所を分けて考えること
  5. n8n dockerではdocker-compose.ymlのenvironmentに設定するのが基本
  6. n8n n8n runners enabled trueで警告が出る理由は将来的な標準有効化への移行
  7. n8n webhook 使い方とCode nodeを同時に使う場合は実行負荷とデータ量を見直すこと

n8n n8n_runners_enabledへの答えはN8N_RUNNERS_ENABLED=trueでタスクランナーを有効化すること

n8n n8n_runners_enabledへの答えはN8N_RUNNERS_ENABLED=trueでタスクランナーを有効化すること

結論から言うと、「n8n n8n_runners_enabled」と検索している人がまず知るべき答えは、N8N_RUNNERS_ENABLED=trueはn8nのタスクランナー機能を有効化するための環境変数だということです。公式ドキュメントでは、N8N_RUNNERS_ENABLEDの初期値はfalseで、タスクランナーを有効にするかどうかを決める設定として説明されています。

タスクランナーとは、n8nの中でも特にCode nodeで書いたJavaScriptやPythonのコードを実行する仕組みです。通常のノード操作だけなら意識しない場面もありますが、JavaScript Code nodeやNative Python Code nodeを使う場合、タスクランナーの有無が実行可否や安定性に関係します。

参考:n8n公式ドキュメントでは、N8N_RUNNERS_ENABLEDは「Are task runners enabled」と説明されています。
https://docs.n8n.io/hosting/configuration/environment-variables/task-runners/

ただし、単純にtrueへ変えればすべて解決する、とは言い切れません。リサーチした事例では、N8N_RUNNERS_ENABLED=trueにしたあと、重いワークフローで「Runner timed out」「Offer expired and no open task slots」「JavaScript heap out of memory」などのエラーが出たケースも報告されています。

つまり、この記事での基本方針はこうです。警告を消すために有効化するだけでなく、実行モード、メモリ、同時実行数、Docker構成、worker構成までセットで確認する。ここを押さえると、設定後のトラブルをかなり減らしやすくなります。

📌 N8N_RUNNERS_ENABLEDの基本整理

項目 内容
変数名 N8N_RUNNERS_ENABLED
主な値 true / false
初期値 false
役割 タスクランナーを有効化する
関係するノード Code node、JavaScript、Python Code node
注意点 有効化後にメモリ・同時実行・runner接続の問題が出る場合がある

📌 最初に見るべきログと意味

ログ・表示 意味
Please set N8N_RUNNERS_ENABLED=true タスクランナー有効化を促す警告
Registered runner "JS Task Runner" JavaScript runnerが登録された状態
Task Broker ready runnerとの仲介役が起動している状態
Runner timed out runnerが時間内に処理できなかった可能性
Offer expired and no open task slots 空きrunner枠が足りない可能性
JavaScript heap out of memory メモリ不足またはメモリリークの疑い

n8nとはワークフロー自動化ツールでCode node実行にタスクランナーが関係する

n8nとはワークフロー自動化ツールでCode node実行にタスクランナーが関係する

n8nとは、さまざまなサービスやAPIをつなぎ、処理を自動化するワークフロー自動化ツールです。たとえばWebhookでデータを受け取り、条件分岐し、外部APIへ送信し、データベースやSlack、メールなどに連携するような処理を組み立てられます。

n8nの魅力は、ノーコード寄りの画面操作だけでなく、必要に応じてCode nodeを使って独自のJavaScriptやPythonを書ける点です。このCode nodeの実行部分に関わるのが、今回の主役であるtask runners、つまりタスクランナーです。

公式ドキュメントでは、タスクランナーは「Code nodeで定義されたコードを実行する」と説明されています。つまり、N8N_RUNNERS_ENABLEDはn8n全体の起動スイッチというより、コード実行の仕組みをどう動かすかに関係する設定と理解したほうがわかりやすいです。

「n8n とは 読み方」「n8n toha」と検索する初心者の場合、最初はワークフロー画面ばかり見がちです。しかしセルフホスト運用を始めると、環境変数、Docker、worker、Redis、PostgreSQLなどの運用設定も避けて通りにくくなります。

特に、Python Code nodeやAI Agent系の処理で独自コードを使う場合、タスクランナーの理解はかなり重要です。n8nを「画面でつなぐだけのツール」と見るより、自動化アプリを動かす実行基盤として見ると、N8N_RUNNERS_ENABLEDの位置づけが理解しやすくなります。

🧭 n8nの全体像

用語 初心者向けの意味
n8n ワークフロー自動化ツール
node 処理の部品
workflow nodeをつないだ自動化の流れ
Code node JavaScriptやPythonを書くノード
task runner Code nodeのコードを実行する仕組み
task broker runnerとn8n本体の間を仲介する仕組み

🧩 N8N_RUNNERS_ENABLEDが関係しやすい場面

場面 関係度
通常のHTTP Request nodeだけ使う 低め
JavaScript Code nodeを使う 高い
Python Native Code nodeを使う 高い
AI Agentで前処理コードを書く 中〜高
大量CSVや大きなJSONを処理する 高い
queue modeでworkerを使う 高い

n8n aiやAIエージェント利用でもCode node周辺の実行環境を理解することが重要

n8n aiやAIエージェント利用でもCode node周辺の実行環境を理解することが重要

近年のn8nでは、AI関連のノードやAI Agent系の使い方に関心が集まっています。「n8n ai」「n8n ai agent」「n8n aiエージェントノード」といった検索をする人は、LLMや外部AIサービスとn8nをつなぎたい人が多いはずです。

AI連携そのものは、必ずしもN8N_RUNNERS_ENABLEDだけで決まるわけではありません。OpenAIや外部APIにリクエストを送るだけなら、通常のノード構成で完結することもあります。ただし、AIに渡すデータを整形したり、レスポンスを分解したり、複雑な条件分岐を作ったりする場合、Code nodeを使う場面が増えます。

このとき、Code nodeの実行がタスクランナーに依存する構成では、N8N_RUNNERS_ENABLED=trueが重要になります。特にPython Native Code nodeを使いたい場合、コミュニティ事例では「N8N_RUNNERS_ENABLED=trueを設定しているのにPython nodeが使えない」という相談も見られました。

リサーチしたZeabur構成の相談では、n8n-main、n8n-worker、n8n-runnerを分けているにもかかわらず、Python Code node側でrunnerが認識されない問題が出ていました。回答では、runnerがn8n本体へ接続するためのN8N_RUNNERS_TASK_BROKER_URIを内部サービス名に合わせる必要があるのではないか、という提案がされています。

つまりAI活用で大事なのは、「AIノードの設定」だけではありません。AIの前後でコードを動かすなら、runner、broker、worker、環境変数のつながりまで見る。これがセルフホストn8nの安定運用ではかなり大事です。

🤖 AI利用時に見落としやすいポイント

検索意図 見るべき設定
n8n ai とは AIノードだけでなく実行基盤も確認
n8n ai 使い方 Code nodeを使うならrunnerも確認
n8n ai agent 使い方 外部API、メモリ、前処理コードを確認
n8n ai 無料 セルフホスト時の運用負荷も確認
n8n aiエージェントノード runner接続とタイムアウトを確認

🧪 AIワークフローでrunner設定が効きやすい例

処理例 runner確認が必要な理由
AIへ渡すJSONを整形する Code nodeを使う可能性がある
大量データを要約前に分割する メモリと同時実行数が関係する
Pythonで前処理する Native Python runnerが関係する
AI Agentのツール出力を加工する JavaScript Code nodeを使う場合がある
CSVを読み込んでAIへ渡す 大きな文字列やメモリ不足に注意

n8n 使い方 初心者はまずローカルとDockerで環境変数の置き場所を分けて考えること

n8n 使い方 初心者はまずローカルとDockerで環境変数の置き場所を分けて考えること

「n8n 使い方 初心者」「n8n 使い方 ローカル」と検索する人がつまずきやすいのは、N8N_RUNNERS_ENABLED=trueどこに書けばよいのかです。環境変数は、n8nの画面上に入力するものではなく、n8nを起動する環境側に設定します。

たとえば、コマンドプロンプトやPowerShellでn8n startしている場合は、そのシェル環境で環境変数を設定してからn8nを起動する必要があります。Dockerで動かしている場合は、docker run-eオプションやdocker-compose.ymlenvironmentに書きます。

コミュニティでも、Windowsのcmdでn8n startしたら「N8N_RUNNERS_ENABLED=trueを設定してください」と表示された、という相談がありました。回答では「必須ではないが、設定するならOSの環境変数として設定する」と案内されています。

ただし、ここで注意したいのは、設定したつもりでもn8nプロセスに渡っていなければ意味がないという点です。Dockerならコンテナ再作成が必要になることがありますし、systemdやPaaSならサービス設定の反映が必要です。Windowsでも、環境変数を設定したあとに新しいターミナルで起動する必要がある場合があります。

初心者は、まず「自分のn8nはどの起動方式か」を確認しましょう。npm起動、Docker起動、Docker Compose、PaaS、queue mode、worker構成では、見る場所が変わります。

🛠 起動方式別の設定場所

起動方式 N8N_RUNNERS_ENABLED=trueの置き場所
npm / ローカル起動 OSまたはシェルの環境変数
Windows cmd set N8N_RUNNERS_ENABLED=true後に起動する形が一般的
PowerShell $env:N8N_RUNNERS_ENABLED="true"後に起動する形が一般的
Docker run -e N8N_RUNNERS_ENABLED=true
Docker Compose environment:配下
PaaS サービスの環境変数設定画面
queue worker worker側にも設定が必要になる場合がある

📋 初心者向けチェックリスト

チェック 内容
n8nの起動方法を確認した
環境変数をn8nプロセスに渡している
設定後に再起動した
ログにRegistered runnerが出るか見た
Code nodeを実行して動作確認した
Dockerの場合は古いコンテナのままになっていないか見た

n8n dockerではdocker-compose.ymlのenvironmentに設定するのが基本

n8n dockerではdocker-compose.ymlのenvironmentに設定するのが基本

「n8n docker」「n8n docker compose」「n8n docker install」と検索している人の場合、N8N_RUNNERS_ENABLED=trueは基本的にdocker-compose.ymlenvironmentに入れます。n8n公式ドキュメントの外部モード例でも、n8nコンテナ側にN8N_RUNNERS_ENABLED=trueを設定しています。

Docker Composeでの基本形は、n8nサービスのenvironmentに以下のような設定を追加するイメージです。実際の構成ではDB、Redis、URL、暗号化キーなども必要になるため、ここではタスクランナーに関係する部分だけを抜き出します。

environment:
  - N8N_RUNNERS_ENABLED=true

ただし、本番運用ではこれだけでは足りない場合があります。公式ドキュメントでは、タスクランナーにはinternalexternalの2つのモードがあり、本番環境ではinternal modeは推奨されていません。本番ではn8n本体とは別のsidecar containerでrunnerを動かすexternal modeが案内されています。

external modeでは、n8n本体側にN8N_RUNNERS_MODE=externalN8N_RUNNERS_AUTH_TOKENN8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0などを設定し、runnerコンテナ側にはN8N_RUNNERS_TASK_BROKER_URIと同じ認証トークンを設定します。

「n8n docker windows」「n8n docker desktop」のような環境でも考え方は同じです。違うのはホスト名やネットワークの見え方です。Docker Compose内のサービス同士なら、一般的にはサービス名で接続します。提供された事例でも、runner側のbroker URIをn8n-mainのような内部サービス名にする提案がありました。

🐳 Dockerで最低限見る変数

コンテナ 変数 役割
n8n本体 N8N_RUNNERS_ENABLED=true runner機能を有効化
n8n本体 N8N_RUNNERS_MODE=external 外部runnerを使う
n8n本体 N8N_RUNNERS_AUTH_TOKEN runner認証用の共有秘密
n8n本体 N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0 他コンテナからbroker接続を受ける
runner N8N_RUNNERS_TASK_BROKER_URI n8n brokerの接続先
runner N8N_RUNNERS_AUTH_TOKEN n8n本体と同じ値にする

🧱 internal modeとexternal modeの違い

モード 動き方 向いている場面
internal n8n本体が子プロセスとしてrunnerを起動 ローカル検証や小規模用途
external 別コンテナ・別プロセスとしてrunnerを起動 本番や分離したい構成
internalの注意点 n8nとrunnerが近い 本番ではセキュリティ面で非推奨
externalの注意点 接続設定が増える broker URIやtokenの整合性が重要

n8n n8n runners enabled trueで警告が出る理由は将来的な標準有効化への移行

n8n n8n runners enabled trueで警告が出る理由は将来的な標準有効化への移行

n8nのログに出る警告では、「task runnersを有効にしてください」「将来のバージョンではデフォルトで有効になる予定」といった内容が示されています。リサーチしたコミュニティ投稿では、n8n 1.80.5や1.123.3付近でこの警告が話題になっていました。

この警告の目的は、おそらく利用者に早めの移行準備を促すことです。Code nodeの実行方式がタスクランナー前提へ寄っていく流れがあるため、セルフホスト環境でも今のうちにrunner構成を整えておいたほうがよい、というメッセージだと考えられます。

ただし、警告が出たからといって、すぐに何も考えず本番環境で有効化するのは少し危険です。実際、N8N_RUNNERS_ENABLED=trueにした後、重いワークフローでクラッシュした事例や、runnerが空き枠不足になった事例が報告されています。

特に重要なのは、軽いワークフローと重いワークフローでは影響が違うことです。小さなJSONを処理するだけなら問題が表面化しないかもしれませんが、大量CSV、巨大文字列、長時間実行、複数同時実行がある環境では、メモリ上限やrunnerの同時実行数が問題になる可能性があります。

警告への向き合い方としては、まず検証環境でN8N_RUNNERS_ENABLED=trueを試し、Code node、Webhook、長時間実行ワークフロー、AI連携などを一通り確認するのが現実的です。本番でいきなり切り替える場合は、ログ監視とロールバック手順を用意しておくと安心です。

⚠️ 警告が出たときの考え方

状況 対応の考え方
ローカル検証中 trueにして試す
小規模Docker運用 internalでも動くが、将来はexternal検討
本番運用 external modeを優先的に検討
queue mode workerごとのrunner構成を確認
大量データ処理あり メモリ・timeout・concurrencyも調整
すでにクラッシュ経験あり すぐ有効化せず原因を分けて検証

📈 移行時に見たい指標

指標 見る理由
runner登録ログ runnerが接続できているか
ワークフロー成功率 有効化後に失敗が増えていないか
メモリ使用量 heap out of memoryを避けるため
実行時間 timeoutに近づいていないか
同時実行数 runnerの空き枠不足を見つけるため
unfinished executions クラッシュ後の未完了実行を確認するため

n8n webhook 使い方とCode nodeを同時に使う場合は実行負荷とデータ量を見直すこと

n8n webhook 使い方とCode nodeを同時に使う場合は実行負荷とデータ量を見直すこと

n8nではWebhook nodeを使って外部からデータを受け取り、その後Code nodeで加工する構成がよくあります。「n8n webhook 使い方」と検索している人にとって、Webhookそのものは入口ですが、実際に重くなるのは入口の後にあるデータ処理です。

リサーチしたGitHub Issueでは、N8N_RUNNERS_ENABLED=trueにしたworkerで、CSV解析のようなメモリを使う処理を実行しているうちに、JavaScript heap out of memoryで落ちたという報告がありました。さらに、再起動後に未完了実行が多数見つかったログも掲載されていました。

また、別のコミュニティ投稿では、巨大な文字列に関係するERR_STRING_TOO_LONGのようなエラーが出て、task runnerが停止する例もありました。報告者は「自分ではそのサイズの文字列を使っていない」と述べており、低レベルな不具合の可能性も示唆されています。

ここから言えるのは、WebhookとCode nodeを組み合わせる場合、受け取ったデータをそのまま巨大な文字列や配列として処理しないことが大切だということです。n8nの一般的な運用では、LoopやSplit in Batchesのような考え方で、処理単位を小さくするほうが安定しやすいです。

もちろん、提供データだけではすべての原因を断定できません。ただし、runner有効化後のクラッシュ事例を見る限り、重いデータ処理をしているワークフローでは、N8N_RUNNERS_MAX_OLD_SPACE_SIZEN8N_RUNNERS_MAX_CONCURRENCYN8N_RUNNERS_TASK_TIMEOUTなどの調整候補も一緒に確認したほうがよいでしょう。

📦 Webhook + Code nodeで注意するデータ

データ 注意点
大量CSV メモリ使用量が増えやすい
巨大JSON 文字列化や配列展開で重くなる
バイナリデータ 直接Code nodeで扱うと負荷が高い場合がある
長時間ループ timeoutにかかる可能性
同時Webhook runner枠が詰まる可能性
AIへの長文入力 前処理でデータ量を絞る必要がある

🔧 見直し候補の環境変数

変数 役割
N8N_RUNNERS_MAX_OLD_SPACE_SIZE runnerのNode.jsメモリ上限を調整
N8N_RUNNERS_MAX_CONCURRENCY runnerが同時に実行するタスク数
N8N_RUNNERS_TASK_TIMEOUT タスクの最大実行時間
N8N_RUNNERS_TASK_REQUEST_TIMEOUT runner空き待ちの最大時間
N8N_RUNNERS_MAX_PAYLOAD brokerとrunner間の最大payload
N8N_RUNNERS_HEARTBEAT_INTERVAL runnerの生存確認間隔
ふるさと納税のポイント付与は2025年10月に廃止になりました。

n8n n8n_runners_enabledの実運用トラブル対策と本番構成

n8n webhook 使い方とCode nodeを同時に使う場合は実行負荷とデータ量を見直すこと
  1. n8n docker composeの本番運用ではexternal modeとsidecar runnerを検討すること
  2. n8n docker imagen8nio/runnersのバージョンは合わせること
  3. n8n docker update時は2.0以降のタスクランナー標準化に備えること
  4. n8n mcpや外部連携を広げる前にCode nodeの許可モジュールを確認すること
  5. n8n cloud 料金とセルフホスト料金を比べるときは運用コストも含めること
  6. n8n セルフホストではworkerごとにrunnerが必要になる場面があること
  7. 総括:n8n n8n_runners_enabledのまとめ

n8n docker composeの本番運用ではexternal modeとsidecar runnerを検討すること

n8n docker composeの本番運用ではexternal modeとsidecar runnerを検討すること

n8n公式ドキュメントでは、タスクランナーにはinternal modeとexternal modeがあると説明されています。internal modeはn8n本体が子プロセスとしてrunnerを起動する方式で、external modeはn8n本体とは別にrunnerを起動する方式です。

特に重要なのは、公式ドキュメントでinternal modeは本番環境では推奨されないと明記されている点です。理由はセキュリティや分離の観点です。Code nodeはユーザーが書いたJavaScriptやPythonを実行するため、n8n本体とrunnerを分けたほうが運用上は整理しやすくなります。

external modeでは、n8n本体がtask brokerとして動き、runnerコンテナがWebSocketで接続します。n8n本体側ではN8N_RUNNERS_MODE=external、runner側ではN8N_RUNNERS_TASK_BROKER_URIを設定します。さらに両者で同じN8N_RUNNERS_AUTH_TOKENを共有します。

Docker Composeの場合、n8n本体とrunnerは同じDockerネットワーク内にいることが多いため、runner側のbroker URIはhttp://n8n-main:5679のようにサービス名を使うのが一般的です。ただし、PaaSや独自ネットワークではホスト名が異なるため、環境に合わせて確認が必要です。

本番構成では、「n8n本体が起動している」「runnerコンテナも起動している」だけでは不十分です。ログにRegistered runnerが出ているか、Code nodeが実際に実行できるか、runnerが一定時間後に落ちて再起動していないかまで確認しましょう。

🏗 external modeの構成イメージ

役割 コンテナ例 主な設定
n8n本体 n8n-main N8N_RUNNERS_ENABLED=true
broker n8n本体内 N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
runner task-runners N8N_RUNNERS_TASK_BROKER_URI=http://n8n-main:5679
認証 両方 N8N_RUNNERS_AUTH_TOKENを一致させる
Python runner runner側 N8N_NATIVE_PYTHON_RUNNER=trueなどを確認

📌 本番向けdocker-composeで見る項目

チェック項目 理由
n8nとrunnerのバージョン 互換性の問題を避ける
brokerのlisten address 別コンテナから接続するため
auth token runner認証に必要
broker URI runnerが接続先を見つけるため
port 5679 broker接続で使われる
ログ runner登録を確認するため

n8n docker imagen8nio/runnersのバージョンは合わせること

n8n docker imageとn8nio/runnersのバージョンは合わせること

n8nのexternal modeでは、n8n本体のDocker imageとrunner imageのバージョンを合わせることが重要です。公式ドキュメントでは、n8nio/n8n:1.111.0n8nio/runners:1.111.0のように同じバージョンの例が示されています。

この理由は、n8n本体とrunnerがtask brokerを通じてやり取りするためです。バージョンが大きくずれていると、プロトコルや設定項目の差によって、runner登録、Python Code node、payload処理などで不具合が出る可能性があります。

「n8n docker image」「n8n dockerhub」「n8n dockerfile」と検索している人は、latestタグを使いがちです。latestは簡単ですが、n8n本体とrunnerの片方だけが想定外に更新されると、原因がわかりにくいトラブルになります。

特に本番では、latestよりも具体的なバージョンを固定するほうが管理しやすいです。たとえば、n8nio/n8n:1.111.0を使うなら、runnerもn8nio/runners:1.111.0に合わせる、という考え方です。

なお、公式ドキュメントでは、extra dependenciesを追加する場合、n8nio/runners imageを拡張する方法も紹介されています。JavaScriptの外部パッケージやPythonの外部ライブラリを使いたい場合は、runner image側に入れたうえで、allowlist設定も必要になります。

🧾 imageバージョン管理の考え方

項目 推奨される考え方
n8n本体 バージョン固定が管理しやすい
runners n8n本体と同じバージョンに合わせる
latest 検証用途なら便利だが本番では注意
update 検証環境で先に確認
custom image 追加依存が必要なときに検討
rollback 前バージョンへ戻す手順を用意

🧩 追加依存を使う場合の注意

種類 必要な作業
Node.js builtin NODE_FUNCTION_ALLOW_BUILTINで許可
外部JS package runner imageに追加しNODE_FUNCTION_ALLOW_EXTERNALで許可
Python標準ライブラリ N8N_RUNNERS_STDLIB_ALLOWで許可
Python外部ライブラリ runner imageに追加しN8N_RUNNERS_EXTERNAL_ALLOWで許可
すべて許可 *指定もあるが本番では慎重に検討
環境変数アクセス Pythonでは標準でブロックされる設定がある

n8n docker update時は2.0以降のタスクランナー標準化に備えること

n8n docker update時は2.0以降のタスクランナー標準化に備えること

リサーチしたコミュニティ投稿では、n8n 2.0の変更として「task runnersがデフォルトで有効化されるのではないか」という相談がありました。投稿では、main instanceではN8N_RUNNERS_ENABLED=false、worker側ではtrueにしているqueue mode構成について質問されています。

このケースで重要なのは、queue modeやworker構成では「main instance」「worker」「runner」の役割が分かれることです。OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=trueにしている場合、手動実行もworkerへ渡す構成になるため、main instance側にrunnerが必要なのかどうかが議論になっていました。

回答では、警告を満たすためにmain instanceにもN8N_RUNNERS_ENABLED=trueを設定してよいのではないか、ただし実際にはmanual executionをworkerへoffloadしているならmain側runnerは使われないかもしれない、という趣旨の説明がされています。これはコミュニティ上の見解であり、公式な断定ではない点に注意が必要です。

また、別のGitHub Issueでは、n8n 2.6.3などでN8N_RUNNERS_ENABLED=falseにしているにもかかわらずtask runnerが起動し、zombie processが増えるという報告もありました。このissueは掲載情報上ではclosedとなっていますが、少なくとも「バージョンによって挙動確認が必要」という教訓になります。

したがって、n8n docker updateでは、通常の機能追加だけでなく、runnerのデフォルト挙動、worker構成、起動ログ、プロセス数も確認したほうがよいです。アップデート後にCode nodeだけ失敗する、runnerだけ落ちる、メモリが増えるといった変化がないかを見るべきです。

🔄 update前後の確認表

タイミング 確認すること
更新前 現在のn8nとrunnerのバージョン
更新前 N8N_RUNNERS_ENABLEDの値
更新前 queue modeかどうか
更新前 worker数とrunner数
更新後 Registered runnerログ
更新後 Code node実行
更新後 メモリとプロセス数
更新後 未完了実行の増加

🚦 2.0以降を見据えた構成判断

構成 考え方
単体n8n runner有効化の影響を検証
Docker Compose external modeを検討
queue mode workerごとのrunner接続を確認
mainで手動実行しない main側runnerの必要性をログで確認
PaaS サービス間ホスト名を確認
Windows npm broker port衝突に注意

n8n mcpや外部連携を広げる前にCode nodeの許可モジュールを確認すること

n8n mcpや外部連携を広げる前にCode nodeの許可モジュールを確認すること

「n8n mcp」「n8n mcp 使い方」のような検索をしている人は、n8nを外部ツールやAIエージェントの実行基盤として広げたい意図があるかもしれません。MCPそのものの詳細は提供データにはありませんが、外部連携を広げるほど、Code nodeで追加処理を書きたくなる場面は増えると考えられます。

ここで重要になるのが、n8nのCode nodeでは、デフォルトで自由に外部モジュールをimportできるわけではないという点です。公式ドキュメントでは、JavaScript側にNODE_FUNCTION_ALLOW_BUILTINNODE_FUNCTION_ALLOW_EXTERNALがあり、Python側にN8N_RUNNERS_STDLIB_ALLOWN8N_RUNNERS_EXTERNAL_ALLOWがあります。

つまり、runnerを有効化しただけでは、すべてのライブラリが使えるわけではありません。たとえばJavaScriptでcryptoを使いたいならbuiltinの許可が必要になり、momentuuidのような外部パッケージを使いたいならrunner imageに入れたうえで許可設定が必要になります。

Pythonでも同じです。jsonのような標準ライブラリを使う場合でも、runner設定で許可が必要になる場合があります。外部ライブラリのnumpypandasを使いたいなら、runner imageにインストールし、N8N_RUNNERS_EXTERNAL_ALLOWで許可する流れになります。

セキュリティ上は、何でも*で許可すればよいとは言いにくいです。個人の検証環境なら楽ですが、本番やチーム利用では、必要なモジュールだけ許可するほうがリスクを抑えやすいです。

📚 Code nodeで使うモジュール許可

言語 変数 役割
JavaScript NODE_FUNCTION_ALLOW_BUILTIN Node.js組み込みモジュールを許可
JavaScript NODE_FUNCTION_ALLOW_EXTERNAL 外部npm packageを許可
Python N8N_RUNNERS_STDLIB_ALLOW Python標準ライブラリを許可
Python N8N_RUNNERS_EXTERNAL_ALLOW Python外部ライブラリを許可
Python N8N_RUNNERS_BUILTINS_DENY 禁止するbuilt-inを指定
Python N8N_BLOCK_RUNNER_ENV_ACCESS 環境変数アクセスを制限

🔐 許可範囲の考え方

方針 メリット 注意点
必要なものだけ許可 安全性を保ちやすい 設定が少し面倒
*でまとめて許可 検証が早い 本番ではリスクが高い
custom runner image 依存関係を固定できる build管理が必要
公式imageそのまま 管理が簡単 追加ライブラリは使えない場合がある
Python env accessを許可 環境変数を読める 秘密情報漏えいに注意

n8n cloud 料金とセルフホスト料金を比べるときは運用コストも含めること

n8n cloud 料金とセルフホスト料金を比べるときは運用コストも含めること

「n8n cloud 料金」「n8n クラウド版 料金」「n8n セルフ ホスト 料金」と検索している人は、クラウド版とセルフホスト版のどちらを選ぶか迷っている可能性があります。提供データには料金表そのものは含まれていないため、具体的な金額はここでは扱いません。

ただし、N8N_RUNNERS_ENABLEDの調査から見えてくる大事な点があります。それは、セルフホストはライセンスやサーバー代だけでなく、runner、worker、Docker、メモリ、アップデート、ログ監視の運用コストも含めて考える必要があるということです。

たとえば、小さな自動化だけならセルフホストは低コストに見えるかもしれません。しかし、AI Agent、Python Code node、大量データ処理、queue mode、複数worker、外部runnerを使い始めると、構成は一気に複雑になります。

一方、クラウド版ではインフラ運用の一部を任せられる可能性があります。ただし、どこまで自由にCode nodeや外部モジュールが使えるか、実行時間やリソース制限がどうなっているかは、契約プランや仕様によって異なるはずです。ここは最新の公式情報を確認するのが安全です。

セルフホストを選ぶなら、N8N_RUNNERS_ENABLED=trueのような環境変数を自分で理解し、トラブル時にログを読める体制が必要です。運用をAIや自動化で補助する場合でも、最低限の設計判断は避けられません。

💰 クラウド版とセルフホストの比較観点

観点 クラウド版 セルフホスト
初期構築 比較的簡単 DockerやDB設定が必要
runner管理 サービス側に依存 自分で設定・監視
カスタム依存 制限がある可能性 custom imageで対応しやすい
セキュリティ サービス仕様に依存 自分で設計
コスト 月額料金中心 サーバー代 + 運用工数
障害対応 サービス側の範囲あり 自分でログ確認

🧮 セルフホスト費用に含めたいもの

項目 理由
サーバー代 n8n本体とrunnerを動かす
DB運用 PostgreSQLなどの管理
Redis運用 queue modeで必要
監視 runner停止やメモリ増加に気づく
update検証 バージョン差の事故を減らす
バックアップ workflowとcredential保護
セキュリティ対応 Code nodeや環境変数を守る

n8n セルフホストではworkerごとにrunnerが必要になる場面があること

n8n セルフホストではworkerごとにrunnerが必要になる場面があること

n8nをqueue modeで使う場合、main instanceとworkerが分かれます。公式ドキュメントでは、external modeをqueue modeで使う場合、各workerにそれぞれsidecar runnerが必要と説明されています。また、manual executionをworkerへoffloadしない場合は、main instanceにもrunnerが必要になるとされています。

これはかなり重要です。単体n8nではN8N_RUNNERS_ENABLED=trueだけを見ればよい場面が多いですが、queue modeでは「どのプロセスがCode nodeを実行するのか」を考える必要があります。Code nodeを実行するworkerがrunnerに接続できなければ、Python Code nodeなどが動かない可能性があります。

コミュニティ投稿でも、workerでN8N_RUNNERS_ENABLED=trueを設定すると「task broker is already running」といったエラーが出るという相談がありました。これはWindows npm環境で、main instanceとworker、broker portの関係が整理できていない可能性があります。提供情報だけでは原因を断定できませんが、各workerがどうbrokerを持つか、どのportを使うかは確認が必要です。

external modeでは、runnerが接続するbroker URIが重要です。mainのbrokerに接続するのか、worker側のbrokerに接続するのか、queue modeの設定により見方が変わります。公式ドキュメントの記述に沿うなら、workerごとにsidecar runnerを置く構成が本番向けの基本と考えられます。

n8nセルフホストで「とりあえず動いた」状態から一歩進めるなら、構成図を作るのがおすすめです。main、worker、runner、Redis、DB、Webhook URL、broker portを1枚にまとめるだけで、どこにN8N_RUNNERS_ENABLED=trueを置くべきか見えやすくなります。

🧭 queue modeの役割整理

コンポーネント 役割
main instance UI、Webhook、brokerなどを担当する場合がある
worker queueに入った実行を処理
Redis queue管理
PostgreSQL workflowや実行履歴などを保存
runner Code nodeのコードを実行
sidecar runner workerごとに並べるrunnerコンテナ

🧩 worker構成で確認すること

チェック 内容
workerにもN8N_RUNNERS_ENABLED=trueが必要か確認
N8N_RUNNERS_MODE=externalになっているか確認
runnerが正しいbroker URIを見ているか確認
broker portが衝突していないか確認
manual executionをworkerへoffloadしているか確認
workerログにrunner登録が出るか確認
Python Code nodeが実行できるか確認

総括:n8n n8n_runners_enabledのまとめ

総括:n8n n8n_runners_enabledのまとめ

最後に記事のポイントをまとめます。

  1. N8N_RUNNERS_ENABLED=trueはn8nのタスクランナーを有効化する環境変数である。
  2. タスクランナーは主にCode nodeのJavaScriptやPythonコード実行に関係する仕組みである。
  3. n8nの警告は、将来的にtask runnersが標準有効化される流れへの準備を促すものと考えられる。
  4. ローカル起動、Docker、Docker Compose、PaaS、worker構成で環境変数の設定場所は異なる。
  5. Docker本番運用ではinternal modeよりexternal modeとsidecar runnerを検討する必要がある。
  6. external modeではN8N_RUNNERS_AUTH_TOKENN8N_RUNNERS_TASK_BROKER_URIの整合性が重要である。
  7. n8n本体imageとn8nio/runners imageのバージョンは合わせるのが基本である。
  8. queue modeではworkerごとにrunnerが必要になる場面がある。
  9. Python Native Code nodeが動かない場合は、runner接続、broker URI、N8N_NATIVE_PYTHON_RUNNERなどを見るべきである。
  10. Offer expired and no open task slotsはrunnerの空き枠不足や同時実行設定の見直し候補である。
  11. Runner timed outは実行時間、負荷、N8N_RUNNERS_TASK_TIMEOUTの確認対象である。
  12. JavaScript heap out of memoryはメモリ不足、重いデータ処理、N8N_RUNNERS_MAX_OLD_SPACE_SIZEの確認対象である。
  13. 巨大CSV、巨大JSON、長時間ループ、AI前処理ではCode nodeの負荷を小さく分ける設計が重要である。
  14. 外部JSやPythonライブラリを使うにはrunner imageへの追加とallowlist設定が必要である。
  15. セルフホストの料金比較ではサーバー代だけでなくrunner運用、監視、アップデート検証のコストも含めるべきである。

記事作成にあたり参考にさせて頂いたサイト

各サイト運営者様へ
有益な情報をご公開いただき、誠にありがとうございます。
感謝の意を込め、このリンクはSEO効果がある形で設置させていただいております。
※リンクには nofollow 属性を付与しておりませんので、一定のSEO効果が見込まれるなど、サイト運営者様にとってもメリットとなれば幸いです。
当サイトは、インターネット上に散在する有益な情報を収集し、要約・編集してわかりやすくお届けすることを目的としたメディアです。
私たちは、情報の収集や整理を通じて「情報をまとめてわかりやすく伝える」という形で新たな価値を提供できるのではないかと考え、運営しております。
なお、引用や参照の方法には不備、あるいはご不快に感じられる点がございましたら、迅速に対応いたしますので、お手数ですがお問い合わせフォームよりご連絡いただければ幸いです。
今後とも、どうぞよろしくお願いいたします。

ABOUT ME
カシワギ
『エグゼクティブワーク』編集長のカシワギです。 普段はITベンチャーで執行役員の40代男です。 元コンサルタントですが、今はテクノロジー企業で日々奮闘中。 仕事では厳しい顔をしていますが、家では小学生の子供2人のやんちゃなパパ。 休日はゴルフに行ったり、妻とワインを楽しんだり。
当サイトについて

当サイトでは、インターネット上に散らばるさまざまな情報を収集し、AIを活用しながら要約・編集を行い、独自の切り口で見解を交えながらわかりやすい形でお届けしています。

情報の整理・編集にあたっては、読者やオリジナル記事の筆者へご迷惑をおかけしないよう、細心の注意を払って運営しておりますが、万が一、掲載内容に問題がある場合や修正・削除のご要望がございましたら、どうぞお気軽にお問い合わせください。
迅速に対応をさせていただきます。

その際には、該当記事の URLやタイトルをあわせてお知らせいただけますと、より速やかに対応 することができますのでそちらもご協力いただけますと大変幸いでございます。

今後とも当サイトをよろしくお願いいたします。