n8n入門 — セルフホスティングで始める業務自動化ワークフロー完全ガイド【2026年版】
n8nの使い方を初心者向けに解説。Dockerでのセルフホスティング手順から、Slack通知・RSS→AI要約・GitHub Issue自動分類の実用ワークフロー例まで、ステップバイステップで紹介します。
「手作業で繰り返している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が最も簡単です。
前提条件
- Docker / Docker Compose がインストール済みであること
- ポート5678が空いていること
ステップ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の基本操作
セットアップが完了したら、実際にワークフローを作ってみましょう。
ワークフローの作成
- ダッシュボードの右上にある 「+ Add Workflow」 をクリック
- エディタ画面が開く
- 中央の 「+」 ボタンをクリックしてノードを追加
ノードの追加と接続
ノードパネルで目的のサービスを検索し、選択します。
例: 「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トリガーの設定
- Webhook ノードを追加
- HTTP Method を
POSTに設定 - 生成されたWebhook URLをコピー
Webhook URL例:
http://localhost:5678/webhook/abc123-def456
ステップ2: Slackノードの設定
- Slack ノードを追加し、Webhookノードに接続
- Slack認証情報を設定(OAuth2で連携)
- メッセージ内容を設定
// 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の設定
- GitHub Trigger ノードを追加
- イベントを
Issues: openedに設定 - リポジトリを指定
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
完成したワークフローの動作
- 新しいIssueが作成される
- n8nがWebhookでイベントを検知
- OpenAIがIssueの内容を分析してカテゴリを判定
- 判定結果に基づいてラベルが自動付与される
これにより、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活用のプラットフォームですが、得意領域が異なります。
| 観点 | n8n | Dify |
|---|---|---|
| 主な用途 | サービス間連携・業務自動化 | 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パイプラインに自動化を組み込むアプローチもおすすめです。