[AI-Agent] AIエージェントをつくれる自動化ツール「n8n」の使い方

1. n8nとは?

n8n(エイトン)は、オープンソースのワークフロー自動化ツールです。
「Zapier」や「Make(旧Integromat)」に近い存在ですが、より柔軟で自由度が高く、自分のPCやサーバーにセルフホストできるのが大きな特徴です。

特に最近は AIエージェント構築 にも活用されており、ChatGPTやClaudeなどと連携して「自分専用の自動化AI」を作れるのが魅力です。

2. n8nの基本イメージ

n8nでは、処理の流れを ノード(Node) という部品のつなぎ合わせで表現します。
それぞれのノードは「ひとつの役割」に特化しており、シンプルに組み合わせることで複雑な自動化も可能になります。


ノードの基本3種類

n8nのノードは、大きく分けると以下の3つの役割に整理できます。

1. トリガー(Trigger)

  • 「いつ処理を始めるか」を決めるきっかけ。

  • 例:

    • Webhookを受けたとき(外部からHTTPアクセスされたとき)
    • 特定の時間になったとき(Cronジョブ)
    • Gmailで新しいメールを受信したとき

スタートボタンのような役割です。


2. アクション(Action / Processing)

  • 受け取ったデータを加工したり、他のサービスに送ったりする処理。

  • 例:

    • 文章を整形する(テキスト置換、フォーマット変更)
    • OpenAIやClaudeに質問を送って返答を取得
    • データベースに書き込み

処理の中枢で、ここがAIエージェントの「頭脳」部分になります。


3. アウトプット(Output / Destination)

  • 処理結果をどこに届けるかを指定する部分。

  • 例:

    • Slackに通知
    • LINEに送信
    • Google Sheetsに保存
    • Webhookで呼び出し元に返す

出口ドアのような役割です。


ノード同士のつなぎ方

  • 各ノードには「入力」と「出力」があり、矢印でつなぐことでデータが流れる仕組みです。
  • データは JSON 形式でやり取りされ、どのノードでも {"key": "value"} の形で受け渡しできます。

例:Webhook → Function(加工) → Slack

{ "message": "Hello World!" }

イメージ例(簡単なフロー)

例えば「問い合わせをSlackに通知する」流れを作るなら:

  1. Webhookノード(外部から問い合わせを受信)
  2. Functionノード(メッセージを整形する)
  3. Slackノード(整形したテキストを送信)

→ 「問い合わせが届くと、自動でSlackに飛んでくる仕組み」が完成します。


例え話でイメージすると…

  • トリガー=インターホンが鳴る
  • アクション=対応して、内容をメモに書き直す
  • アウトプット=そのメモを誰かに渡す

n8nは、この一連の流れを LEGOブロックを組むように可視化していけるのが最大の特徴です。


ここまで理解できると「ノードをどう選んで組むか」が見えてきます。 次の章(インストールや実際のワークフロー例)に進むとき、頭の中で「ノード=部品、つなぐ=配線」という図が浮かびやすくなるはずです。

3. インストール方法

n8nは クラウド版セルフホスト版 の両方があり、用途に合わせて選べます。

今回はローカルPCにインストールして「自分の環境で試す」方法を中心に解説します。


クラウドで試す場合

一番手軽な方法は公式サイトの n8n.io から無料アカウントを作ることです。
ブラウザだけでワークフローを作成・保存できるため、初めて触る方におすすめです。

ただし 無料枠は実行数やノード数に制限があるので、本格的に使う場合はセルフホストがベターです。


ローカル環境にインストールする場合

1. Node.js のインストール

n8nは Node.js 上で動くアプリです。
まずは Node.js 公式サイト から LTS版 をインストールしてください。

確認方法:

node -v
npm -v

バージョンが表示されればOKです。


2. n8n をインストール

npm(Node.jsのパッケージ管理ツール)で n8n をグローバルインストールします。

npm install -g n8n

インストール後、以下で起動できます。

n8n

3. 管理画面にアクセス

起動するとログに http://localhost:5678 と出るので、ブラウザで開きます。
ログイン画面が表示されたら、初回はユーザー名とパスワードを設定して管理画面へ。


4. 永続化(止めても消えない設定)

ローカルでそのまま起動すると、閉じたときに設定が消える場合があります。
環境変数を指定して「ユーザーデータを保存」すると便利です。

例:Linux/Mac

export N8N_USER_FOLDER=~/.n8n
n8n

Windows(PowerShell)

setx N8N_USER_FOLDER "C:\Users\lain\.n8n"
n8n

これでワークフローや認証情報が保存され、次回も同じ環境で使えます。


5. よくあるつまずきポイント

  • ポート競合 他のアプリが 5678 ポートを使っていると起動できない → --port 5679 のように指定可能

    n8n --port 5679
    
  • ファイアウォール Windowsやセキュリティソフトがポートをブロックすることがあるので許可設定が必要

  • 権限エラー(EACCES) Linux/Mac で npm -g インストール時に権限エラーが出る → sudo ではなく nvm を使うのがおすすめ


Docker で動かす場合(上級者向け)

ローカルで安定運用したい場合は Docker も選択肢です。

docker run -it --rm \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n
  • -p 5678:5678 → ポート開放
  • -v ~/.n8n:/home/node/.n8n → 設定やデータを永続化

👉 サーバーで24時間稼働させるなら Docker 一択です。


まとめ

  • まずは npm install -g n8n → n8n でOK
  • http://localhost:5678 にアクセスすれば管理画面が出る
  • 設定を永続化したい場合は N8N_USER_FOLDER を指定
  • 本格運用なら Docker でホストすると安定

4. 初めてのAIエージェント作成(詳しく)

ここでは「Webhookで質問を受け取り → ChatGPTで回答 → 返す」という最小構成のAIチャットエージェントを作ります。
n8nの強みは、ノードを3つつなぐだけでAIエージェントが完成するところにあります。


ワークフローの流れ

  1. Webhookノード

    • 外部からの質問を受け取る入り口です。

    • 設定画面で以下を指定:

      • HTTP Method: POST
      • Path: /ask (任意の名前でOK)

    これで http://localhost:5678/webhook/ask にリクエストを送れるようになります。

    例:curlで質問を送る

    curl -X POST http://localhost:5678/webhook/ask \
    -H "Content-Type: application/json" \
    -d '{"question": "今日の天気は?"}'
    

  1. OpenAIノード

    • Webhookで受け取った「質問」をAIに投げます。

    • 事前に OpenAI APIキーを n8n に登録しておきます。

    • 設定例:

      • Resource: Chat

      • Operation: Create

      • Model: gpt-3.5-turbo など

      • Message:

        { "role": "user", "content": "{{$json["question"]}}" }
        
      • (↑ Webhookノードから受け取った question をそのまま渡している)


  1. Respond to Webhookノード

    • AIの返答をそのまま呼び出し元に返します。

    • 設定で「Response Data」を選択 → json に以下を指定:

      { "answer": "{{$json["choices"][0]["message"]["content"]}}" }
      

    → これでエンドポイントにアクセスした人へ、AIの返答が返ります。


画面イメージ

ワークフローはこんな感じになります:

📩 Webhook (質問受け取り)
⚙️ OpenAI (AI応答生成)
📤 Respond to Webhook (回答を返す)

動作確認

  1. ワークフローを 「アクティブ」 にする
  2. curl などで質問を送信する
  3. JSON形式で回答が返ってくる

例:

curl -X POST http://localhost:5678/webhook/ask \
-H "Content-Type: application/json" \
-d '{"question": "n8nって何ですか?"}'

レスポンス:

{
  "answer": "n8nはオープンソースのワークフロー自動化ツールです..."
}

ポイント

  • 最低限3ノードで動く → シンプルなのに「エージェント感」が出る
  • Webhookノードは外部アプリ連携の玄関口
  • Respond to Webhookで即応答できる → APIサーバーを自作したような感覚になる

5. コードでカスタマイズ

Function ノードは、n8n の中で 受け取った JSON を自在に加工する小さな JavaScript 実行環境 です。 「ノードの間に 1 行差し込むだけで“欲しい形”に整える」用途に最適です。

基本ルール:配列を返す Function ノードの出力は [{ json: {...} }, { json: {...} }] のような配列です。


5.1 入力の取り方と出力の基本

  • 入力:直前ノードのデータは {$json} で参照(式ではなくコード内では $json
  • 出力return [{ json: {...} }]; の配列形式で返す
// 受け取ったテキストに前置きを追加
const body = $json.question || $json.body || "";
return [
  {
    json: {
      text: `【AIエージェントの回答】 ${body}`
    }
  }
];

フィールド名が不確定なことはよくあります。上のように フォールバック を用意しておくと実運用で強いです。


5.2 Function と Function Item の違い(つまずき防止)

  • Function全アイテムまとめて処理($items() を使える)
  • Function Item1アイテムずつ処理(シンプルで速い)

大量データの一括変換は Function、1件ごと変換は Function Item が向きます。最初は Function でOK。


5.3 OpenAI ノード前の“前処理”テンプレ

目的:Webhook で受けた JSON を、OpenAI の Chat / messages 形式に整える。 ※このノードのに OpenAI(Chat)を置き、「Messages」に {{$json.messages}} を渡します。

// 受け取る想定: { question: "n8nって何?", userId: "guest" }
const q = ($json.question || "").toString().trim();

if (!q) {
  // 空質問は 400 風のエラーで早期終了(IFノードで分岐しても良い)
  throw new Error("質問テキストが空です。question フィールドを入れてください。");
}

// プロンプトの方針(ガードレール)
const system = [
  "あなたは親切で簡潔なアシスタントです。",
  "専門用語は短い補足を付け、例を1つ示すこと。",
  "箇条書きを活用して読みやすく。"
].join(" ");

const user = q;

// OpenAI(Chat) の messages 形式に整形
return [
  {
    json: {
      messages: [
        { role: "system", content: system },
        { role: "user",   content: user }
      ]
    }
  }
];

こうしておくと、**OpenAIノード側は“データをそのまま受けるだけ”**で済み、再利用・差し替えがラク。


5.4 クレンジング&正規化(実務で効く小ワザ)

function normalize(str = "") {
  return String(str)
    .replace(/\r\n/g, "\n")  // 改行統一
    .replace(/\s+\n/g, "\n") // 行末空白削除
    .trim();
}

const title = normalize($json.title);
const body  = normalize($json.body);

// 長すぎる入力のガード(LLMへの投げ過ぎ防止)
const MAX = 2000;
const safeBody = body.length > MAX ? body.slice(0, MAX) + " …(truncated)" : body;

return [{ json: { title, body: safeBody } }];
  • normalize:改行・空白の揺れを吸収
  • トークン節約:LLM に渡す前に最大長を切るのは実務で超大事

5.5 条件分岐・コマンド解釈

// 例: "/summary ..." や "/translate ..." などの簡易コマンド
const raw = ($json.question || "").trim();
const m = raw.match(/^\/(\w+)\s+([\s\S]*)$/);

let intent = "chat";
let payload = raw;

if (m) {
  intent  = m[1].toLowerCase(); // "summary" | "translate" | ...
  payload = m[2].trim();
}

return [{ json: { intent, payload } }];

このあと IF ノードintent を見て分岐すれば、1 本の Webhook で複数機能を扱えます。


5.6 エラーハンドリングとデバッグ

try {
  // 何か処理
  const input = $json.input?.trim();
  if (!input) throw new Error("input が必要です。");

  return [{ json: { ok: true, input } }];
} catch (e) {
  // 失敗を「IFノードで拾える形」で返すパターン
  return [{ json: { ok: false, error: e.message } }];
  // もしくは実行自体を失敗にしたいなら:
  // throw e;
}
  • throw:その場で実行エラー(上流で失敗扱い)
  • ok フラグ:IF ノードで分岐できるソフトエラー方式(ワークフローを止めない)

デバッグしたい時は console.log() が有効。実行履歴のノード出力に表示されます。


5.7 複数アイテムを返す(ループ展開)

たとえば RSS の複数記事を 1 件ずつ AI に投げる場合、Function で配列を展開しておくと楽です。

// 入力: { articles: [{title: "...", url: "..."}, ...] }
const items = [];
for (const a of ($json.articles || [])) {
  items.push({
    json: {
      messages: [
        { role: "system", content: "以下の記事を100文字で要約して。" },
        { role: "user", content: `${a.title}\n${a.url}` }
      ],
      meta: a
    }
  });
}
return items;

この形で出しておくと、OpenAI ノードが自動で N 回ループしてくれます(n8n は配列の各要素を個別アイテムとして流すため)。


5.8 “Set ノードで十分”な場面もある

  • 単純なフィールド名の変更静的値の付与Set ノードのほうが速く・安全。
  • **Function は“最後の手段”**くらいの気持ちで。保守性が上がります。

5.9 ミニ・レートリミット(簡易ウェイト)

API 連打を避けたい時に、Wait ノードの代わりに 1~2 秒の間引きを入れる例。

function sleep(ms){ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms); }
// ※FunctionノードのJSは同期実行。擬似スリープならこの手でOK。

sleep(1200); // 1.2秒ウェイト
return [{ json: $json }];

本格的な制御は Wait ノードや Rate Limit ノードを推奨(見通しが良くなる)。


5.10 よく使う n8n 変数(最小セット)

  • $json:現在アイテムの JSON
  • $items():上流ノードの出力一覧(Function のみ)
  • $node["ノード名"].json:別ノードの出力参照(直列より前)
  • $now:ISO 日付(new Date().toISOString() 相当)
  • $executionId:実行ID(ログ相関に便利)

まとめ(この章の着地点)

  • Function ノードは“前処理・整形・分岐”の即効薬
  • OpenAI の messages 構築を Function に寄せると、下流がシンプルになる
  • エラー処理・入力クレンジング・長さガードは最初から入れておくと後が楽
  • 単純変換は Set ノード、重い・複雑な加工は Function と使い分ける

6. 応用例(できることの幅をもう少し詳しく)

n8n の強みは、さまざまなサービスやAIを「線でつなぐだけ」で連携できるところにあります。

ここでは3つの代表的なシナリオを紹介します。


6.1 Slack通知 → ChatGPTで要約 → 自分にメール送信

用途イメージ:Slackのチャンネルに流れる大量の情報をAIに要約させ、自分だけにメールで届くようにする。

ワークフロー構成

  1. Slack Trigger

    • 新しいメッセージが投稿されたら起動
    • 例:#dev-channel の更新を監視
  2. OpenAI(Chat)ノード

    • メッセージ内容を要約
    • system プロンプト例:「以下のテキストを200字以内で要約してください」
  3. Email ノード(GmailやSMTP)

    • 要約文を自分のメールに送信

ポイント

  • 「要約」→「メール転送」なので情報過多を防ぎ、通知疲れを解消できる
  • フィルタノードを挟んで、特定キーワードを含むメッセージだけ処理するのも便利

6.2 RSS記事取得 → LLMで要点抽出 → Twitterに投稿

用途イメージ:ニュースサイトのRSSを自動で監視し、AIに要点を抽出させてTwitterに自動投稿する。

ワークフロー構成

  1. RSS Read ノード

    • 指定したRSSフィードから最新記事を取得
  2. Function ノード(整形)

    • タイトル+URL を LLM で扱いやすい形に整形
  3. OpenAI(Chat)ノード

    • 「この記事の内容を100字程度で要約して、Twitter投稿風にまとめてください」と指示
  4. Twitter ノード

    • AIの生成したテキストをそのままツイート

ポイント

  • Twitter投稿の文字数制限(280文字)を Function ノードでカットしておくと安心
  • IFノードを入れて、重複記事や古い記事はスキップする仕組みにできる

6.3 音声入力 → Whisperで文字起こし → ChatGPTに質問

用途イメージ:スマホから音声を送信すると、自動で文字起こしされ、ChatGPTが返答してくれる。

ワークフロー構成

  1. Webhook ノード

    • 音声ファイル(mp3, wav)を受け取るエンドポイント
  2. OpenAI Whisper ノード

    • 音声をテキストに変換
    • 出力例:{"text": "明日の天気はどうなる?"}
  3. OpenAI(Chat)ノード

    • Whisperで変換したテキストを ChatGPT に投げて回答を生成
  4. Respond to Webhook ノード

    • 返答をユーザーに返す

ポイント

  • 音声をそのままAIに渡さず、文字にしてから投げることで誤解を減らせる
  • スマホアプリ(ショートカット・Tasker等)からWebhookに音声を送れば、**「しゃべるだけでAIに質問」**が実現できる

  • Slack × AI × メール → 情報整理の自動秘書
  • RSS × AI × Twitter → 自動ニュース発信Bot
  • 音声入力 × Whisper × ChatGPT → 音声対話エージェント

これらが ノーコード/ローコードで作れるのが n8n の強みです。 プログラミング経験が浅くても「部品を組み合わせる」だけで、AIエージェントが現実のタスクを肩代わりしてくれます。

7. まとめ

  • n8nはノーコードで始められる自動化プラットフォーム → ノードをつなげるだけで「AIエージェント」や「業務自動化フロー」を構築できる

  • クラウド版とセルフホスト版が選べる柔軟さ → お試しはクラウド、ガッツリ運用はローカルやDockerで

  • Functionノードでちょっとコードを足せば実用度が一気にアップ → データ整形、前処理、条件分岐など、AI活用がより現実的になる

  • 応用範囲が広い → Slack通知やRSS配信から、音声アシスタントまで「自分専用のエージェント」を手軽に作れる


まずは「Webhook → OpenAI → Response」の3ノード構成を試してみましょう。 たったこれだけで、あなたのPC上に「自分だけのAIエージェント」が誕生します。