目次

はじめに

n8nは、ローコード/ノーコードでワークフローを作成できるオープンソースの自動化ツールです。今回は、Docker-composeを使ってn8nを立ち上げ、Webhookでリクエストを受け取り、データを処理してファイルに保存するまでの基本的なワークフローを作成してみます。

環境構築

1. docker-compose.ymlの準備

まず、n8nをDockerで起動するための設定ファイルを作成します。

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-line-translator
    ports:
      - "5678:5678"
    environment:
      # 基本設定
      - N8N_HOST=0.0.0.0
      - N8N_PORT=5678
      - N8N_RUNNERS_ENABLED=true
      
      # データベース設定(SQLite)
      - DB_TYPE=sqlite
      - DB_SQLITE_DATABASE=/home/node/.n8n/database.sqlite
      
      # セキュリティ設定
      - N8N_BASIC_AUTH_ACTIVE=false
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=admin123
      
      # Webhook設定
      - WEBHOOK_URL=http://localhost:5678
      - N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTDOWN=true
      
      # その他設定
      - TZ=Asia/Tokyo
      - N8N_LOG_LEVEL=info
      - N8N_METRICS=true
      
    volumes:
      - n8n_data:/home/node/.n8n
      - ./workflows:/home/node/.n8n/workflows
      - ./custom-nodes:/home/node/.n8n/custom
    restart: unless-stopped
    networks:
      - n8n-network

volumes:
  n8n_data:
    driver: local

networks:
  n8n-network:
    driver: bridge

2. .envファイルの設定

練習用であれば、最小限の設定で十分です。

# 基本認証(練習用は false でも OK)
N8N_BASIC_AUTH_ACTIVE=false
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin123

# Webhook URL
WEBHOOK_URL=http://localhost:5678

# ログレベル
N8N_LOG_LEVEL=info

3. n8nの起動

# docker-compose.ymlがあるディレクトリで実行
docker-compose up -d

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

起動後、ブラウザで http://localhost:5678 にアクセスしてn8nの管理画面を開きます。

ワークフローの作成

ステップ1: 新しいワークフローを作成

  1. n8nの管理画面で「New workflow」をクリック
  2. ワークフロー名を「Webhook to File」などに設定

ステップ2: Webhookノードの追加と設定

  1. 「Add first step」をクリック
  2. 「Webhook」を検索して選択
  3. Webhookノードの設定:
    • HTTP Method: POST
    • Path: test-webhook
    • Authentication: None
    • Response: When Last Node Finishes

ステップ3: Codeノードの追加

  1. Webhookノードの右側の「+」ボタンをクリック
  2. Code を検索して選択
  3. 以下のJavaScript?コードを入力:
// 受信したWebhookデータを取得
const webhookData = $input.all()[0].json;

// ログエントリを作成
const logEntry = {
  id: Date.now(),
  received_at: new Date().toISOString(),
  method: 'POST',
  headers: webhookData.headers || {},
  body: webhookData.body || {},
  webhook_url: webhookData.webhookUrl || '',
  query: webhookData.query || {}
};

// JSON文字列として準備(改行付き)
const logText = JSON.stringify(logEntry, null, 2);

// バイナリデータとして準備
return [{
  json: {
    success: true,
    message: "データをファイル保存用に準備しました",
    log_entry: logEntry
  },
  binary: {
    data: {
      data: Buffer.from(logText).toString('base64'),
      mimeType: 'application/json'
    }
  }
}];

ステップ4: ファイル書き込みノードの追加

  1. Codeノードの右側の「+」ボタンをクリック
  2. Read/Write Files from Disk を検索して選択
  3. 設定:
    • Operation: Write File to Disk
    • File Path and Name: /tmp/webhook_logs.json
    • Input Binary Field: data

テストと動作確認

ワークフローをアクティブ化

  1. 画面右上の「Active」トグルをONにする
  2. ワークフローを保存

curlでテスト

プロダクションモードになると、URLが以下のように変わります:

# プロダクション用URL
curl -X POST http://localhost:5678/webhook/test-webhook \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Hello n8n!",
    "user": "test-user",
    "action": "login"
  }'

複数回テスト

# テスト1
curl -X POST http://localhost:5678/webhook/test-webhook \
  -H "Content-Type: application/json" \
  -d '{"action": "login", "user": "alice"}'

# テスト2  
curl -X POST http://localhost:5678/webhook/test-webhook \
  -H "Content-Type: application/json" \
  -d '{"action": "purchase", "user": "bob", "amount": 100}'

# テスト3
curl -X POST http://localhost:5678/webhook/test-webhook \
  -H "Content-Type: application/json" \
  -d '{"action": "logout", "user": "alice"}'

保存されたファイルの確認

# n8nコンテナ内に入る
docker-compose exec n8n sh

# 保存されたファイルを確認
cat /tmp/webhook_logs.json

# ファイル一覧を確認
ls -la /tmp/webhook*

# コンテナから出る
exit

重要なポイント

テストモードとプロダクションモードの違い

ワークフローを「Active」にすることで、プロダクションモードになります。

ファイル書き込み権限の注意点

Dockerコンテナ内では、書き込み権限の問題が発生することがあります。/tmpディレクトリは通常、すべてのプロセスが書き込み可能なので、練習用には適しています。

エラーハンドリング

n8nのCodeノードでは、Node.jsのfsモジュールが直接使用できないため、バイナリデータとしてファイル書き込みノードに渡す方法を採用しました。

まとめ

今回の手順で、以下のワークフローが完成しました:

  1. Webhookでリクエスト受信 → データの取得
  2. Codeノードでデータ処理 → 構造化されたログの作成
  3. ファイル書き込み → JSONファイルとして保存

この基本的な流れを理解すると、さらに複雑なワークフロー(条件分岐、外部API呼び出し、メール送信など)も作成できるようになります。

次のステップ

n8nは非常に柔軟性が高く、様々な自動化シナリオに対応できる強力なツールです。ぜひ色々な機能を試してみてください!

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS