n8nのCodeノードで外部モジュールを使う方法
September 27, 2025
n8nのCodeノードでnpmライブラリを利用できるようにする方法を解説します。
はじめに
n8n は強力なワークフロー自動化ツールです。標準で多くのノードや関数が用意されていますが、時には外部の npm パッケージを使って機能を拡張したいこともあるでしょう。この記事では、その方法をシンプルな手順で紹介します。
なぜ外部モジュールを使うのか?
- 標準では含まれていないライブラリにアクセスできる
- 複雑な処理を実績あるライブラリでシンプルに書ける
- 既存の Node.js プロジェクトで利用しているコードを再利用できる
ステップ 1: リポジトリをフォークして overrides を設定する
n8n は外部モジュールをサポートしていますが、実行環境のファイルを直接編集するのはおすすめしません。代わりに、n8n-docker-caddy をフォークして、自分のリポジトリで設定を管理しましょう。
- リポジトリをフォーク
- カスタムドメインを設定
- Dockerfile に npm install を追加
- docker compose の設定で環境変数を追加
カスタマイズ済みのサンプルリポジトリを用意しています。 👉 My forked repository
cat overrides/Caddyfile.local# <domain>.<suffix> を置き換えて利用n8n.<domain>.<suffix> {reverse_proxy n8n:5678 {flush_interval -1}}
cat overrides/Dockerfile.n8n-customARG N8N_TAG=1.111.0FROM docker.n8n.io/n8nio/n8n:${N8N_TAG}USER root# 利用したいライブラリを追加RUN npm explore -g n8n -- npm i --omit=dev yahoo-finance2 && npm cache clean --forceUSER node
cat overrides/docker-compose.override.ymlservices:n8n:build:context: ./overridesdockerfile: Dockerfile.n8n-customargs:N8N_TAG: ${N8N_TAG:-1.111.0}environment:- N8N_ENABLE_EXTERNAL_MODULES=true- NODE_FUNCTION_ALLOW_EXTERNAL=yahoo-finance2caddy:volumes:- ./overrides/Caddyfile.local:/etc/caddy/Caddyfile:ro
ステップ 2: インスタンスの設定
git clone https://github.com/<your-org>/n8n-docker-caddy.gitcd n8n-docker-caddysudo docker volume create caddy_datasudo docker volume create n8n_datavim .envvim overrides/Caddyfile.localsudo docker compose up -d
ステップ 3: n8n 上でテストする
モジュールをインストールしたら、Code ノード内でrequire
して使えます。以下は yahoo-finance2
を使って株価チャートを取得する例です。
const yf = require("yahoo-finance2").default;const ticker = query.ticker;if (!ticker) {throw new Error("ticker is required");}const period = query.period || "1y";const interval = query.interval || "1d";const columns = query.columns || [];const limit = Number(query.limit ?? 0);function computePeriod1(periodStr) {const now = Date.now();const ONE_DAY = 24 * 60 * 60 * 1000;const m = {"1mo": 30,"3mo": 90,"6mo": 182,"9mo": 273,"1y": 365,"2y": 730,"5y": 1826,};if (!periodStr || periodStr === "max") return new Date(0);if (periodStr === "ytd") {const d = new Date();return new Date(d.getFullYear(), 0, 1);}if (m[periodStr]) return new Date(now - m[periodStr] * ONE_DAY);const dt = new Date(periodStr);if (!isNaN(dt)) return dt;return new Date(now - 365 * ONE_DAY);}function filterColumns(row, columns) {if (!Array.isArray(columns) || columns.length === 0) return row;const out = {};for (const c of columns) {if (c in row) out[c] = row[c];}return out;}const period1 = computePeriod1(period);const period2 = new Date();const res = await yf.chart(ticker, {period1,period2,interval,});let rows = (res.quotes || []).map((q) => {return { ...q, date: q.date instanceof Date ? q.date.toISOString() : q.date };});if (limit > 0 && rows.length > limit) {rows = rows.slice(-limit);}rows = rows.map((r) => filterColumns(r, columns));return JSON.stringify({ticker,period,interval,rows,});
n8n コンテナの更新
最新版に追従するには、コンテナを pull して再起動するだけです。
公式リポジトリからフォークへ切り替える
すでに公式リポジトリを clone している場合は、origin
を自分の fork に差し替えましょう。変更は専用ブランチ(例: custom/main
)にまとめて管理するのがおすすめです。
# upstreamの変更があれば一旦退避git stash# originをupstreamにリネームgit remote rename origin upstream# forkをoriginに追加git remote add origin https://github.com/<your-org>/n8n-docker-caddy.gitgit remote -v# custom/mainブランチを作成git fetch origin --tagsgit checkout -b custom/main origin/custom/main
まとめ
フォークしたリポジトリで外部モジュールを管理すれば、n8n を安全かつ再現性高く拡張できます。
たとえば今回の yahoo-finance2
のように、まずは小さなライブラリから試してみると、自動化の幅が一気に広がるはずです。
Loading Tweet Button...