n8nは、ローコード/ノーコードでワークフローを作成できるオープンソースの自動化ツールです。今回は、Docker-composeを使ってn8nを立ち上げ、Webhookでリクエストを受け取り、データを処理してファイルに保存するまでの基本的なワークフローを作成してみます。
まず、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
練習用であれば、最小限の設定で十分です。
# 基本認証(練習用は 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
# docker-compose.ymlがあるディレクトリで実行 docker-compose up -d # ログを確認 docker-compose logs -f n8n
起動後、ブラウザで http://localhost:5678 にアクセスしてn8nの管理画面を開きます。
// 受信した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'
}
}
}];
プロダクションモードになると、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モジュールが直接使用できないため、バイナリデータとしてファイル書き込みノードに渡す方法を採用しました。
今回の手順で、以下のワークフローが完成しました:
この基本的な流れを理解すると、さらに複雑なワークフロー(条件分岐、外部API呼び出し、メール送信など)も作成できるようになります。
n8nは非常に柔軟性が高く、様々な自動化シナリオに対応できる強力なツールです。ぜひ色々な機能を試してみてください!