TAKASHI TOYOFUKU

n8nのCodeノードで外部モジュールを使う方法

n8nのCodeノードで外部モジュールを使う方法

September 27, 2025

n8nのCodeノードでnpmライブラリを利用できるようにする方法を解説します。

はじめに

n8n は強力なワークフロー自動化ツールです。標準で多くのノードや関数が用意されていますが、時には外部の npm パッケージを使って機能を拡張したいこともあるでしょう。この記事では、その方法をシンプルな手順で紹介します。

なぜ外部モジュールを使うのか?

  • 標準では含まれていないライブラリにアクセスできる
  • 複雑な処理を実績あるライブラリでシンプルに書ける
  • 既存の Node.js プロジェクトで利用しているコードを再利用できる

ステップ 1: リポジトリをフォークして overrides を設定する

n8n は外部モジュールをサポートしていますが、実行環境のファイルを直接編集するのはおすすめしません。代わりに、n8n-docker-caddy をフォークして、自分のリポジトリで設定を管理しましょう。

  1. リポジトリをフォーク
  2. カスタムドメインを設定
  3. Dockerfile に npm install を追加
  4. 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-custom
ARG N8N_TAG=1.111.0
FROM docker.n8n.io/n8nio/n8n:${N8N_TAG}
USER root
# 利用したいライブラリを追加
RUN npm explore -g n8n -- npm i --omit=dev yahoo-finance2 && npm cache clean --force
USER node
cat overrides/docker-compose.override.yml
services:
n8n:
build:
context: ./overrides
dockerfile: Dockerfile.n8n-custom
args:
N8N_TAG: ${N8N_TAG:-1.111.0}
environment:
- N8N_ENABLE_EXTERNAL_MODULES=true
- NODE_FUNCTION_ALLOW_EXTERNAL=yahoo-finance2
caddy:
volumes:
- ./overrides/Caddyfile.local:/etc/caddy/Caddyfile:ro

ステップ 2: インスタンスの設定

git clone https://github.com/<your-org>/n8n-docker-caddy.git
cd n8n-docker-caddy
sudo docker volume create caddy_data
sudo docker volume create n8n_data
vim .env
vim overrides/Caddyfile.local
sudo 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.git
git remote -v
# custom/mainブランチを作成
git fetch origin --tags
git checkout -b custom/main origin/custom/main

まとめ

フォークしたリポジトリで外部モジュールを管理すれば、n8n を安全かつ再現性高く拡張できます。 たとえば今回の yahoo-finance2 のように、まずは小さなライブラリから試してみると、自動化の幅が一気に広がるはずです。

Loading Tweet Button...
© 2024 Takashi Toyofuku All rights reserved.