n8nの使い方を初心者向けに解説。Dockerでのセルフホスティング手順から、Slack通知・RSS→AI要約・GitHub Issue自動分類の実用ワークフロー例まで、ステップバイステップで紹介します。
使い方ガイド
公開: by ToolCraft Lab 約13分で読めます

n8n入門 — セルフホスティングで始める業務自動化ワークフロー完全ガイド【2026年版】

n8nの使い方を初心者向けに解説。Dockerでのセルフホスティング手順から、Slack通知・RSS→AI要約・GitHub Issue自動分類の実用ワークフロー例まで、ステップバイステップで紹介します。

#n8n#自動化#ワークフロー

「手作業で繰り返しているSlack通知やデータ連携、もう自動化しませんか?」 n8nを使えば、プログラミング不要でノード接続だけの直感的な操作で業務ワークフローを自動化できます。

本記事では、n8nの基本概念からDockerでのセルフホスティング手順、そして実際に業務で使える3つのワークフロー例(Slack通知、RSS→AI要約、GitHub Issue自動分類)まで、初中級エンジニア向けにステップバイステップで解説します。Difyとの使い分けについても触れます。

筆者は1年以上n8nをセルフホストで運用していますが、一度ワークフローを組んでしまえば本当に手が離れるので、最初のセットアップの手間は十分に元が取れます。

n8nとは — オープンソースの自動化プラットフォーム

n8n(ノードンと読みます)は、ノーコード / ローコードでワークフロー自動化を実現するオープンソースプラットフォームです。ZapierやMake(旧Integromat)と同じカテゴリのツールですが、セルフホスティングが可能という大きな特徴があります。

n8nの3つの強み

特徴説明
セルフホスティング対応自社サーバーやVPSで運用でき、データが外部に出ない
400以上のノードSlack、GitHub、Google Sheets、OpenAIなど主要サービスに対応
フェアコードライセンスソースコードが公開されており、カスタマイズが可能

n8nの基本概念

n8nのワークフローは、以下の要素で構成されます。

  • ノード(Node): 各処理の単位。データの取得・変換・送信などを行う
  • コネクション(Connection): ノード同士をつなぐ線。データの流れを定義する
  • トリガー(Trigger): ワークフローの起動条件。Webhook、スケジュール、イベント検知など
  • ワークフロー(Workflow): トリガー+複数ノードで構成された自動化の単位

Dockerでセルフホスティングする手順

n8nをローカルまたはサーバーで動かすには、Dockerが最も簡単です。

前提条件

ステップ1: Docker Composeファイルの作成

プロジェクトディレクトリを作成し、docker-compose.ymlを作ります。

version: '3.8'

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=your-secure-password
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - GENERIC_TIMEZONE=Asia/Tokyo
      - TZ=Asia/Tokyo
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

ステップ2: コンテナの起動

# コンテナをバックグラウンドで起動
docker compose up -d

# ログを確認
docker compose logs -f n8n

ステップ3: ブラウザでアクセス

ブラウザで http://localhost:5678 を開きます。初回アクセス時にオーナーアカウントのセットアップ画面が表示されます。

メールアドレス: admin@example.com
名前: Admin
パスワード: 安全なパスワードを設定

セットアップが完了すると、n8nのダッシュボードが表示されます。

本番環境向けの追加設定

本番運用する場合は、以下の設定を追加することを推奨します。

environment:
  # PostgreSQLをデータベースとして使用
  - DB_TYPE=postgresdb
  - DB_POSTGRESDB_HOST=postgres
  - DB_POSTGRESDB_PORT=5432
  - DB_POSTGRESDB_DATABASE=n8n
  - DB_POSTGRESDB_USER=n8n
  - DB_POSTGRESDB_PASSWORD=your-db-password
  # Webhook URLの設定(リバースプロキシ経由の場合)
  - WEBHOOK_URL=https://n8n.yourdomain.com/

n8nの基本操作

セットアップが完了したら、実際にワークフローを作ってみましょう。

ワークフローの作成

  1. ダッシュボードの右上にある 「+ Add Workflow」 をクリック
  2. エディタ画面が開く
  3. 中央の 「+」 ボタンをクリックしてノードを追加

ノードの追加と接続

ノードパネルで目的のサービスを検索し、選択します。

例: 「Schedule Trigger」を追加
→ 毎日9:00にワークフローを実行する設定
   Rule: Every Day
   Hour: 9
   Minute: 0
   Timezone: Asia/Tokyo

ノード同士は、出力ポート(右側の丸)から入力ポート(左側の丸)にドラッグしてつなぎます。

データの確認とテスト

各ノードには 「Test step」 ボタンがあり、そのノードだけを個別に実行してデータを確認できます。デバッグ時に非常に便利です。

変数とExpression

ノード間でデータを受け渡すには、Expressionを使います。

// 前のノードの出力を参照
{{ $json.title }}

// 複数ノード前のデータを参照
{{ $('HTTP Request').item.json.body }}

// 日付のフォーマット
{{ $now.format('yyyy-MM-dd') }}

実用ワークフロー例1: フォーム送信→Slack通知

Webフォームの送信内容をSlackチャンネルに自動通知するワークフローです。

ワークフロー構成

[Webhook] → [Slackノード]

ステップ1: Webhookトリガーの設定

  1. Webhook ノードを追加
  2. HTTP Method を POST に設定
  3. 生成されたWebhook URLをコピー
Webhook URL例:
http://localhost:5678/webhook/abc123-def456

ステップ2: Slackノードの設定

  1. Slack ノードを追加し、Webhookノードに接続
  2. Slack認証情報を設定(OAuth2で連携)
  3. メッセージ内容を設定
// Slackメッセージのテンプレート
📩 新しいお問い合わせ

名前: {{ $json.name }}
メール: {{ $json.email }}
内容: {{ $json.message }}
送信日時: {{ $now.format('yyyy-MM-dd HH:mm') }}

ステップ3: テストと有効化

# curlでテスト送信
curl -X POST http://localhost:5678/webhook/abc123-def456 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "田中太郎",
    "email": "tanaka@example.com",
    "message": "製品について質問があります"
  }'

Slackにメッセージが届いたら成功です。ワークフローを Active に切り替えて本番運用を開始します。

実用ワークフロー例2: RSS→AI要約→Slack配信

RSSフィードから最新記事を取得し、OpenAI APIで要約してSlackに配信する、情報収集の自動化ワークフローです。

ワークフロー構成

[Schedule Trigger] → [RSS Feed Read] → [OpenAI] → [Slack]

ステップ1: スケジュールトリガー

毎朝9時に自動実行されるようにSchedule Triggerを設定します。

Trigger: Cron
Expression: 0 9 * * *
Timezone: Asia/Tokyo

ステップ2: RSSフィードの読み取り

RSS Feed Read ノードを追加し、対象のRSSフィードURLを設定します。

URL: https://zenn.dev/feed

ステップ3: OpenAIで要約

OpenAI ノードを追加し、記事タイトルと本文をAIで要約させます。

// OpenAIノードのプロンプト
以下の技術記事を3行で要約してください。
重要なポイントを箇条書きで含めてください。

タイトル: {{ $json.title }}
本文: {{ $json.contentSnippet }}

モデルには gpt-4o-mini を指定すると、コストを抑えつつ十分な品質の要約が得られます。

ステップ4: Slackに配信

要約結果をSlackメッセージとしてフォーマットし、指定チャンネルに投稿します。

📰 {{ $('RSS Feed Read').item.json.title }}

{{ $json.text }}

🔗 {{ $('RSS Feed Read').item.json.link }}

応用: 複数フィードの統合

Split In Batches ノードと Merge ノードを組み合わせれば、複数のRSSフィードをまとめて処理し、1つのダイジェストとしてSlackに送ることもできます。

実用ワークフロー例3: GitHub Issue自動分類

GitHub上に新しいIssueが作成されたとき、AIでカテゴリを判定し自動でラベルを付与するワークフローです。

ワークフロー構成

[GitHub Trigger] → [OpenAI] → [IF分岐] → [GitHub: ラベル付与]

ステップ1: GitHub Triggerの設定

  1. GitHub Trigger ノードを追加
  2. イベントを Issues: opened に設定
  3. リポジトリを指定
Owner: your-org
Repository: your-repo
Events: Issues - opened

ステップ2: OpenAIでIssueを分類

Issueのタイトルと本文をOpenAIに渡し、カテゴリを判定させます。

// OpenAIノードのプロンプト
以下のGitHub Issueを分類してください。
カテゴリは bug, feature, question, documentation のいずれかを返してください。
JSON形式で返してください: {"category": "カテゴリ名"}

タイトル: {{ $json.issue.title }}
本文: {{ $json.issue.body }}

ステップ3: IF分岐で条件分け

IF ノードを使って、カテゴリごとに処理を分岐します。

// 条件式の例
{{ $json.text.includes('"bug"') }}

ステップ4: GitHubノードでラベル付与

各分岐先に GitHub ノードを配置し、対応するラベルを付与します。

Resource: Issue
Operation: Add Labels
Labels: bug  // または feature, question, documentation

完成したワークフローの動作

  1. 新しいIssueが作成される
  2. n8nがWebhookでイベントを検知
  3. OpenAIがIssueの内容を分析してカテゴリを判定
  4. 判定結果に基づいてラベルが自動付与される

これにより、Issue管理のトリアージ作業を大幅に効率化できます。

n8nの便利な機能

エラーハンドリング

各ノードにはError Outputを設定でき、エラー発生時に別の処理フローに分岐させることができます。

ノード設定 > Settings > On Error
→ Continue (エラーを無視して続行)
→ Stop Workflow (ワークフロー全体を停止)
→ Continue Using Error Output (エラー用の分岐に進む)

環境変数の管理

機密情報はn8nのCredential機能で一元管理します。

Settings > Credentials > Add Credential
→ サービスごとにAPIキーやトークンを安全に保管
→ ワークフロー内から参照する際は認証情報を選択するだけ

バージョン管理とバックアップ

n8nにはワークフローのバージョン管理機能があります。

# ワークフローをJSONでエクスポート
n8n export:workflow --all --output=./backups/

# インポート
n8n import:workflow --input=./backups/workflow.json

コードノードの活用

ノーコードだけでは対応しきれない場合は、Code ノードでJavaScriptを直接書くことができます。

// Codeノードの例: データの整形
const items = $input.all();

return items.map(item => {
  return {
    json: {
      title: item.json.title.trim(),
      category: item.json.category.toLowerCase(),
      createdAt: new Date().toISOString(),
    }
  };
});

n8nとDifyの使い分け

n8nとDifyはどちらも自動化・AI活用のプラットフォームですが、得意領域が異なります。

観点n8nDify
主な用途サービス間連携・業務自動化AIアプリケーション構築
強み400+のサービス統合ノードRAG・チャットボット構築
AI機能OpenAIノード等で外部連携LLMをコアにした設計
コード実行JavaScript/Pythonノードカスタムツール・API連携
適したケース定型業務の自動化、データ連携対話型AIアプリ、ナレッジベース

使い分けの指針

  • 「サービスAのデータをサービスBに自動で連携したい」 → n8n
  • 「社内ドキュメントを検索して回答するチャットボットを作りたい」 → Dify
  • 「両方の機能が必要」 → n8nのワークフロー内でDify APIを呼び出す

実際のプロジェクトでは、n8nをオーケストレーション層として使い、Difyで構築したAIアプリをn8nから呼び出すという組み合わせが非常に強力です。

n8nのプランと料金

n8nには複数のプランがあります。

プラン料金特徴
Community(セルフホスト)無料フル機能、自己管理
Starter(クラウド)$24/月〜2,500回実行/月、5ワークフロー
Pro(クラウド)$60/月〜10,000回実行/月、無制限ワークフロー
Enterprise要問い合わせSSO、監査ログ、SLA保証

個人開発や小規模チームであれば、Community版のセルフホスティングで十分です。クラウド版を試したい場合は、n8n公式サイトから無料トライアルで始められます。

トラブルシューティング

よくある問題と解決策

Webhookが動かない

# n8nのWebhook URLが外部からアクセス可能か確認
curl -I http://your-server:5678/webhook/test

# ngrokでローカル環境を公開する場合
ngrok http 5678

認証情報のエラー

OAuth2連携がうまくいかない場合は、n8nのCallback URLが正しく設定されているか確認してください。

Callback URL: http://localhost:5678/rest/oauth2-credential/callback

メモリ不足

大量のデータを処理する場合、Node.jsのメモリ上限を引き上げます。

# docker-compose.yml
environment:
  - NODE_OPTIONS=--max-old-space-size=4096

まとめ — n8nで業務自動化を始めよう

n8nは、セルフホスティング可能なオープンソースの自動化プラットフォームとして、以下の点で優れています。

  • データの主権: セルフホスティングにより、機密データが外部に出ない
  • 柔軟な連携: 400以上のノードで主要サービスと連携可能
  • AI統合: OpenAIやAnthropicのAPIと組み合わせてインテリジェントな自動化を実現
  • コスト効率: Community版なら無料で全機能を利用可能

まずはDockerで環境を立ち上げ、Slack通知のような簡単なワークフローから始めてみてください。一度自動化の便利さを体験すると、手作業には戻れなくなるはずです。

n8nを試してみる: セルフホスティングが面倒な方は、n8n Cloudで手軽に始められます。無料トライアル付きなので、まずはクラウド版で自動化の便利さを実感してから、必要に応じてセルフホストに移行するのがおすすめです。

本記事で紹介した3つのワークフロー例を参考に、あなたのチームに合った自動化フローを構築してみましょう。AI連携をさらに深めたい方は、n8n × AI レシピ5選で実践的なワークフローを紹介しています。また、GitHub Actionsと組み合わせてCI/CDパイプラインに自動化を組み込むアプローチもおすすめです。