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への答えはN8N_RUNNERS_ENABLED=trueでタスクランナーを有効化することn8nとはワークフロー自動化ツールでCode node実行にタスクランナーが関係するn8n aiやAIエージェント利用でもCode node周辺の実行環境を理解することが重要n8n 使い方 初心者はまずローカルとDockerで環境変数の置き場所を分けて考えることn8n dockerではdocker-compose.ymlのenvironmentに設定するのが基本n8n n8n runners enabled trueで警告が出る理由は将来的な標準有効化への移行n8n webhook 使い方とCode nodeを同時に使う場合は実行負荷とデータ量を見直すこと
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とは、さまざまなサービスや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 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 使い方 初心者」「n8n 使い方 ローカル」と検索する人がつまずきやすいのは、N8N_RUNNERS_ENABLED=trueをどこに書けばよいのかです。環境変数は、n8nの画面上に入力するものではなく、n8nを起動する環境側に設定します。
たとえば、コマンドプロンプトやPowerShellでn8n startしている場合は、そのシェル環境で環境変数を設定してからn8nを起動する必要があります。Dockerで動かしている場合は、docker runの-eオプションやdocker-compose.ymlのenvironmentに書きます。
コミュニティでも、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」「n8n docker compose」「n8n docker install」と検索している人の場合、N8N_RUNNERS_ENABLED=trueは基本的にdocker-compose.ymlのenvironmentに入れます。n8n公式ドキュメントの外部モード例でも、n8nコンテナ側にN8N_RUNNERS_ENABLED=trueを設定しています。
Docker Composeでの基本形は、n8nサービスのenvironmentに以下のような設定を追加するイメージです。実際の構成ではDB、Redis、URL、暗号化キーなども必要になるため、ここではタスクランナーに関係する部分だけを抜き出します。
environment:
- N8N_RUNNERS_ENABLED=true
ただし、本番運用ではこれだけでは足りない場合があります。公式ドキュメントでは、タスクランナーにはinternalとexternalの2つのモードがあり、本番環境ではinternal modeは推奨されていません。本番ではn8n本体とは別のsidecar containerでrunnerを動かすexternal modeが案内されています。
external modeでは、n8n本体側にN8N_RUNNERS_MODE=external、N8N_RUNNERS_AUTH_TOKEN、N8N_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のログに出る警告では、「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 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_SIZE、N8N_RUNNERS_MAX_CONCURRENCY、N8N_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の生存確認間隔 |
n8n n8n_runners_enabledの実運用トラブル対策と本番構成

n8n docker composeの本番運用ではexternal modeとsidecar runnerを検討することn8n docker imageとn8nio/runnersのバージョンは合わせることn8n docker update時は2.0以降のタスクランナー標準化に備えることn8n mcpや外部連携を広げる前にCode nodeの許可モジュールを確認することn8n cloud 料金とセルフホスト料金を比べるときは運用コストも含めることn8n セルフホストではworkerごとにrunnerが必要になる場面があること- 総括:n8n n8n_runners_enabledのまとめ
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 imageとn8nio/runnersのバージョンは合わせること

n8nのexternal modeでは、n8n本体のDocker imageとrunner imageのバージョンを合わせることが重要です。公式ドキュメントでは、n8nio/n8n:1.111.0とn8nio/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 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」「n8n mcp 使い方」のような検索をしている人は、n8nを外部ツールやAIエージェントの実行基盤として広げたい意図があるかもしれません。MCPそのものの詳細は提供データにはありませんが、外部連携を広げるほど、Code nodeで追加処理を書きたくなる場面は増えると考えられます。
ここで重要になるのが、n8nのCode nodeでは、デフォルトで自由に外部モジュールをimportできるわけではないという点です。公式ドキュメントでは、JavaScript側にNODE_FUNCTION_ALLOW_BUILTIN、NODE_FUNCTION_ALLOW_EXTERNALがあり、Python側にN8N_RUNNERS_STDLIB_ALLOW、N8N_RUNNERS_EXTERNAL_ALLOWがあります。
つまり、runnerを有効化しただけでは、すべてのライブラリが使えるわけではありません。たとえばJavaScriptでcryptoを使いたいならbuiltinの許可が必要になり、momentやuuidのような外部パッケージを使いたいならrunner imageに入れたうえで許可設定が必要になります。
Pythonでも同じです。jsonのような標準ライブラリを使う場合でも、runner設定で許可が必要になる場合があります。外部ライブラリのnumpyやpandasを使いたいなら、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 クラウド版 料金」「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を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_RUNNERS_ENABLED=trueはn8nのタスクランナーを有効化する環境変数である。- タスクランナーは主にCode nodeのJavaScriptやPythonコード実行に関係する仕組みである。
- n8nの警告は、将来的にtask runnersが標準有効化される流れへの準備を促すものと考えられる。
- ローカル起動、Docker、Docker Compose、PaaS、worker構成で環境変数の設定場所は異なる。
- Docker本番運用ではinternal modeよりexternal modeとsidecar runnerを検討する必要がある。
- external modeでは
N8N_RUNNERS_AUTH_TOKENとN8N_RUNNERS_TASK_BROKER_URIの整合性が重要である。 - n8n本体imageと
n8nio/runnersimageのバージョンは合わせるのが基本である。 - queue modeではworkerごとにrunnerが必要になる場面がある。
- Python Native Code nodeが動かない場合は、runner接続、broker URI、
N8N_NATIVE_PYTHON_RUNNERなどを見るべきである。 Offer expired and no open task slotsはrunnerの空き枠不足や同時実行設定の見直し候補である。Runner timed outは実行時間、負荷、N8N_RUNNERS_TASK_TIMEOUTの確認対象である。JavaScript heap out of memoryはメモリ不足、重いデータ処理、N8N_RUNNERS_MAX_OLD_SPACE_SIZEの確認対象である。- 巨大CSV、巨大JSON、長時間ループ、AI前処理ではCode nodeの負荷を小さく分ける設計が重要である。
- 外部JSやPythonライブラリを使うにはrunner imageへの追加とallowlist設定が必要である。
- セルフホストの料金比較ではサーバー代だけでなくrunner運用、監視、アップデート検証のコストも含めるべきである。
記事作成にあたり参考にさせて頂いたサイト
- https://docs.n8n.io/hosting/configuration/environment-variables/task-runners/
- https://community.n8n.io/t/n8n-runners-enabled-crash-my-wf/83440
- https://docs.n8n.io/hosting/configuration/task-runners/
- https://community.n8n.io/t/n8n-2-0-breaking-change-enable-task-runners-by-default/231564
- https://github.com/n8n-io/n8n/issues/13740
- https://community.n8n.io/t/n8n-runners-enabled/93629
- https://github.com/n8n-io/n8n/issues/13883
- https://community.n8n.io/t/help-with-setting-up-a-task-runner/222982
- https://github.com/n8n-io/n8n/issues/25255
- https://community.n8n.io/t/n8n-runners-enabled-true-on-worker-process/98783
各サイト運営者様へ
有益な情報をご公開いただき、誠にありがとうございます。
感謝の意を込め、このリンクはSEO効果がある形で設置させていただいております。
※リンクには nofollow 属性を付与しておりませんので、一定のSEO効果が見込まれるなど、サイト運営者様にとってもメリットとなれば幸いです。
当サイトは、インターネット上に散在する有益な情報を収集し、要約・編集してわかりやすくお届けすることを目的としたメディアです。
私たちは、情報の収集や整理を通じて「情報をまとめてわかりやすく伝える」という形で新たな価値を提供できるのではないかと考え、運営しております。
なお、引用や参照の方法には不備、あるいはご不快に感じられる点がございましたら、迅速に対応いたしますので、お手数ですがお問い合わせフォームよりご連絡いただければ幸いです。
今後とも、どうぞよろしくお願いいたします。
当サイトでは、インターネット上に散らばるさまざまな情報を収集し、AIを活用しながら要約・編集を行い、独自の切り口で見解を交えながらわかりやすい形でお届けしています。
情報の整理・編集にあたっては、読者やオリジナル記事の筆者へご迷惑をおかけしないよう、細心の注意を払って運営しておりますが、万が一、掲載内容に問題がある場合や修正・削除のご要望がございましたら、どうぞお気軽にお問い合わせください。
迅速に対応をさせていただきます。
その際には、該当記事の URLやタイトルをあわせてお知らせいただけますと、より速やかに対応 することができますのでそちらもご協力いただけますと大変幸いでございます。
今後とも当サイトをよろしくお願いいたします。
