Contents
n8n とは?導入の全体像
ノーコード・ローコードで外部 API と連携できるワークフローツール n8n は、セルフホスト版とクラウド版が公式に提供されています。どちらを選んでも「ノードをドラッグ&ドロップ」だけで複雑な処理を構築でき、開発者は API の呼び出しや認証情報の管理に集中できます。本稿では、ローカル環境と n8n Cloud それぞれのセットアップ手順から、実運用時に必要となるセキュリティ・デプロイ・監視までを体系的に解説します。
ローカル環境でのインストール手順
ローカル(オンプレミス)では Docker コンテナか npm パッケージのどちらかで n8n を起動できます。ここでは、一般的な開発マシンから本番サーバーまで幅広く利用できる手順を示します。
Docker を使ったセットアップ
Docker がインストール済みであれば、以下のコマンドだけで n8n のコンテナが起動します。環境変数は .env ファイル にまとめておくと管理が楽です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# .env 例(作業ディレクトリに配置) N8N_BASIC_AUTH_ACTIVE=true N8N_BASIC_AUTH_USER=admin N8N_BASIC_AUTH_PASSWORD=ChangeMe123! N8N_HOST=0.0.0.0 N8N_PORT=5678 # コンテナ起動(バックグラウンド実行) docker run -d \ --name n8n \ -p 5678:5678 \ --env-file .env \ n8nio/n8n:latest |
--env-fileで読み込む変数は、Basic Auth の有効化・ユーザー名・パスワードを含みます。- 起動後は
http://<サーバーIP>:5678にアクセスし、先ほど設定した認証情報でログインできます。
ポイント:本番環境ではデータ永続化のためにボリュームをマウントし、
/root/.n8nディレクトリに SQLite または Postgres の接続情報を書き込んでおくことが推奨されます。
npm / pnpm でのインストール
Node.js (v18 以降) が利用可能な環境では、npm(または pnpm)経由でも n8n を起動できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# プロジェクトディレクトリ作成 mkdir my-n8n && cd my-n8n # パッケージ初期化とインストール npm init -y npm install n8n@latest # 起動スクリプトを package.json に追加 cat <<'EOF' >> package.json "scripts": { "start": "n8n start" } EOF # 環境変数は .env ファイルで管理(例は Docker と同様) echo "N8N_BASIC_AUTH_ACTIVE=true" > .env echo "N8N_BASIC_AUTH_USER=admin" >> .env echo "N8N_BASIC_AUTH_PASSWORD=ChangeMe123!" >> .env # 起動 npm run start |
n8n startはデフォルトでポート 5678 を使用し、.envがあれば自動的に読み込みます。- ローカル環境だけで完結させる場合は SQLite が内部で利用されますが、外部 DB(Postgres / MySQL)へ切り替えることも可能です。
n8n Cloud のサインアップと初期設定
クラウド版はインフラ構築の手間が不要なため、すぐにワークフロー作成を開始したいユーザー向けです。以下では公式サイトからアカウント作成し、最小限のセキュリティ設定までを順を追って解説します。
アカウント作成からワークスペース構築まで
- 公式サイト(https://www.n8n.io)右上の 「Sign Up」 ボタンをクリック。
- メールアドレス・パスワードを入力し、送信された認証メール内のリンクでアカウントを有効化。
- ログイン後に表示される 「Create Workspace」 画面でワークスペース名と所属メンバー(自分だけでも可)を設定。
※無料プランは 30 日間フル機能が利用でき、期限切れ前に有料プランへ移行すればデータ保持が継続されます。
初回ログイン時のセキュリティ設定(Basic Auth・HTTPS)
- HTTPS:n8n Cloud は常に TLS 終端された URL(
https://YOUR_SUBDOMAIN.n8n.cloud)で提供され、ユーザー側で追加設定は不要です。 - Basic Authentication(任意):左サイドバーの 「Settings」 → 「Security」 から 「Enable Basic Auth」 をオンにし、以下項目を入力します。
| 項目 | 設定例 |
|---|---|
| Username | admin |
| Password | 強力なパスワード(8 文字以上、英数字+記号) |
設定保存後は、ブラウザでログインするたびに Basic Auth の認証画面が表示されます。
HTTP Request ノードで API と連携する基礎
HTTP Request ノードは外部サービスとの橋渡し役です。本節では UI の構成要素と実装例を具体的に示します。
ノードの配置と主要項目の説明
- ワークフロー画面左上の 「+」 → 「HTTP Request」 をドラッグ。
- 右パネルに表示される項目は以下の通りです(それぞれのラベル名は UI と同一)。
| フィールド | 説明 |
|---|---|
| URL | 呼び出すエンドポイント URL を入力。例:https://api.example.com/v1/items |
| Method | ドロップダウンで GET / POST / PUT / DELETE … から選択 |
| Headers | キーとバリューをテーブル形式で追加。Content-Type: application/json が典型例 |
| Query Parameters | key=value のペアを行ごとに入力し、URL に自動付加 |
| Body | JSON, Form-Data, Raw から選択可能。POST / PUT 時必須 |
| Authentication | 作成済みの Credential(API Key, OAuth2 等)をプルダウンで指定 |
JSON・Form‑Data ボディの作り方
JSON の場合
- Body タブ → Content Type = JSON を選択すると、テキストエリアが出現。以下のように直接記述します。
|
1 2 3 4 5 6 |
{ "title": "n8n からの通知", "message": "{{ $json[\"text\"] }}", // Mustache 記法で前段ノードのデータ参照 "timestamp": "{{ $now() }}" } |
Form‑Data の場合
- Content Type = Form‑Data を選ぶと、キー・バリュー行が追加できる UI が表示。ファイル添付は「File」タイプを選択し、ドラッグ&ドロップでアップロードできます。
認証情報(Credentials)の安全な管理方法
n8n は認証情報を 暗号化されたストレージ に保存し、ノード設定画面では参照だけが可能です。ここでは代表的な Credential の作成手順と利用例を示します。
API キー・Bearer トークンの登録手順
- 左サイドバー 「Settings」 → 「Credentials」 を開く。
- 右上の 「New Credential」 ボタンをクリック。
- ドロップダウンから 「API Key」 または 「OAuth2 Bearer Token」 を選択。
| フィールド名 | 入力例 |
|---|---|
| Name (任意) | GitHub‑PAT |
| API Key | ghp_XXXXXXXXXXXXXXXXXXXX |
| Header Prefix | Bearer(デフォルト) |
- Test ボタンで接続確認 → 成功したら Save。
OAuth2 Authorization Code フローの設定例(GitHub 連携)
- Credential 作成:種類は 「OAuth2 API」 → 「Authorization Code」。以下を入力します。
| 項目 | 設定例 |
|---|---|
| Name | GitHub‑OAuth |
| Client ID | Iv1.1234567890abcdef |
| Client Secret | 0123456789abcdef... |
| Authorization URL | https://github.com/login/oauth/authorize |
| Access Token URL | https://github.com/login/oauth/access_token |
| Scope | repo,read:user |
| Redirect URI | https://YOUR_N8N_DOMAIN/api/v1/oauth2-credential/callback |
- 入力後に 「Connect」 ボタンをクリックすると、GitHub の認可画面がポップアップ。ユーザーは許可ボタンを押すだけでトークンが取得されます。
- 取得したトークンは自動的にリフレッシュされ、Credential に保存された状態になるため、以降の HTTP Request ノードでは 「Authentication」 ドロップダウンから選択するだけです。
Client Credentials フローの設定例(内部 API)
- 手順は上記と同様ですが、Authorization Type を 「Client Credentials」 に切り替え、
ScopeとToken URLのみ入力すれば完了します。
Credential を HTTP Request ノードで利用する方法
- 作成済み Credential が一覧に表示されるので、HTTP Request ノードの 「Authentication」 ドロップダウンから選択。
- これだけでリクエストヘッダー
Authorization: Bearer <token>が自動付与され、ノード内部でトークン取得・更新が走ります。
エラーハンドリングとデバッグの実践テクニック
外部 API はネットワーク障害やレートリミットに頻繁に遭遇します。エラーを適切に捕捉し、再試行や通知を組み込むことで運用時の信頼性が大幅に向上します。
Error Trigger と IF ノードによる分岐設計
- Error Trigger はワークフロー冒頭に配置し、前段ノードで例外が発生したときにエラー情報(ステータスコード・メッセージ)を受け取ります。
- 取得した
$json["statusCode"]を基に IF ノード で条件分岐させます。例:
|
1 2 |
{{ $json["statusCode"] >= 500 }} // サーバー側エラーは再試行へ |
| 分岐先 | 処理内容 |
|---|---|
| 真(≥500) | Retry ワークフローへ遷移 |
| 偽(4xx) | Slack 通知ノードで即時アラート |
リトライ設定とバックオフ戦略
HTTP Request ノードの 「Retry」 タブで以下を推奨値として設定します。
| パラメータ | 推奨設定 |
|---|---|
| 最大リトライ回数 | 5 回 |
| 初期待機時間 | 2 秒 |
| バックオフ方式 | Exponential(指数) |
| 対象ステータスコード | 429, 500‑599 |
この構成により、一時的なレートリミットやサーバーダウン時に自動で待ち時間が伸び、過剰リクエストを防ぎます。
実行モード・ログ閲覧・データプレビューの活用方法
- Run Mode:ワークフロー画面右上の 「Execute Workflow」 ボタンで手動実行。入力パラメータや環境変数をその場で変更可能です。
- Execution Log:左ペイン 「Executions」 を開くと、各ノードの開始・終了時刻、受信データ、出力結果が一覧表示されます。エラーは赤字ハイライト。
- データプレビュー:ノード上にマウスオーバーすると 「Input」 と 「Output」 がポップアップで確認でき、変数の受け渡しミスを即座に特定できます。
本番運用で考慮すべきセキュリティ対策
オンプレミスと n8n Cloud では設定箇所が異なります。ここではそれぞれのベストプラクティスをまとめます。
オンプレミス環境での HTTPS 強制とリバースプロキシ設定(NGINX例)
- nginx.conf に SSL 終端用サーバーブロックを追加し、全 HTTP リクエストを 443 にリダイレクトします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
server { listen 80; server_name n8n.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name n8n.example.com; ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem; location / { proxy_pass http://localhost:5678; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; } } |
- Docker で起動した n8n コンテナは
--env N8N_ENDPOINT=https://n8n.example.comを付与して、内部 URL が正しく認識されるようにします。
IP アドレスホワイトリストの設定方法
- n8n Cloud:左サイドバー 「Settings」 → 「Security」 → 「IP Whitelist」 に許可したい CIDR(例:
203.0.113.0/24)をカンマ区切りで入力。保存すると、リスト外からのアクセスは 403 エラーになります。 - オンプレミス:NGINX の
allow / denyディレクティブで同様に制御できます。
|
1 2 3 4 5 6 |
location / { allow 203.0.113.0/24; deny all; proxy_pass http://localhost:5678; } |
シークレット管理と環境変数のベストプラクティス
| 項目 | 推奨方法 |
|---|---|
| API キー・トークン | n8n Cloud の Credentials に保存し、ノードでは名前だけ参照。オンプレミスは docker run -e N8N_ENCRYPTION_KEY=... で暗号化キーを設定し、シークレットは Docker シークレットまたは Kubernetes Secret から注入 |
| 環境変数 | .env ファイルは .gitignore に含め、リポジトリに流出しないよう徹底 |
| ログマスキング | 出力時に {{ $json["email"]?.replace(/(.{2}).+(@.+)/, "$1***$2") }} で個人情報を隠すテンプレート式を使用 |
CI/CD とワークフローの自動デプロイ
Git リポジトリに保存した JSON 形式のワークフローを、プッシュごとに n8n Cloud へ反映させる例を紹介します。
GitHub Actions で n8n Cloud に JSON をアップロードする完全例
- 前提:n8n Cloud の管理者トークンを GitHub Secrets に
N8N_API_TOKENとして登録。 - ワークフローは
n8n-workflows/ディレクトリ以下に配置した JSON を対象とします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
name: Deploy n8n Workflows on: push: paths: - 'n8n-workflows/**/*.json' jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Deploy each workflow env: N8N_TOKEN: ${{ secrets.N8N_API_TOKEN }} run: | for file in n8n-workflows/*.json; do echo "Deploying $file" curl -X POST "https://api.n8n.io/v1/workflows" \ -H "Authorization: Bearer $N8N_TOKEN" \ -H "Content-Type: application/json" \ --data-binary @"$file" done |
- 成功時:GitHub の Actions タブに「Deploy each workflow」ステップのログが表示され、
201 Createdが返ってきたらデプロイ完了です。
GitLab CI の実装例と注意点
GitLab でも同様に環境変数 N8N_API_TOKEN を CI/CD Settings → Variables に設定し、以下の .gitlab-ci.yml を追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
stages: - deploy deploy_n8n: stage: deploy only: changes: - n8n-workflows/**/*.json script: - apt-get update && apt-get install -y curl - | for f in n8n-workflows/*.json; do echo "Deploying $f" curl -X POST "https://api.n8n.io/v1/workflows" \ -H "Authorization: Bearer ${N8N_API_TOKEN}" \ -H "Content-Type: application/json" \ --data-binary @"$f" done |
- 注意点:GitLab Runner が Docker コンテナ上で走る場合は
curlがインストールされているイメージを選択してください。
ローカル環境向け Docker Compose による継続的デリバリー
オンプレミスで自動デプロイしたい場合、Docker Compose の restart: on-failure と watchtower などのイメージ更新ツールを組み合わせます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
version: "3.8" services: n8n: image: n8nio/n8n:latest container_name: n8n ports: - "5678:5678" env_file: .env volumes: - ./data:/root/.n8n # 永続化と Credential の保存先 watchtower: image: containrrr/watchtower command: --interval 30 n8n volumes: - /var/run/docker.sock:/var/run/docker.sock |
watchtowerが 30 秒ごとに新しいイメージを確認し、更新があれば自動的にコンテナを再起動します。
監視・可観測性の確保
運用中は メトリクス と ログ を適切に取得し、異常時に即座に通知できる体制が重要です。
n8n が提供する組み込みメトリクスとアラート設定
- 左サイドバー 「Settings」 → 「Metrics」 で Prometheus Exporter を有効化。
- 「Alerts」 ページで閾値を設定(例:エラー率が 5 % 超えたら Slack に通知)。
| アラート項目 | 推奨閾値 |
|---|---|
| エラー率 | > 5 % |
| ワークフロー実行時間 (平均) | > 30 秒 |
| 同時実行数 | > 100 |
設定後は 「Execution Log」 と連携し、対象ワークフロー名が自動的に添付されます。
Prometheus / Grafana 連携手順
- n8n Cloud の
/metricsエンドポイントを Prometheus に登録します。
|
1 2 3 4 5 6 7 8 9 |
scrape_configs: - job_name: 'n8n-cloud' scheme: https static_configs: - targets: ['api.n8n.io'] metrics_path: /metrics tls_config: insecure_skip_verify: false |
- Grafana に 「Import Dashboard」 で公式提供の
n8nテンプレート(ID: 15003)をインポート。 - ダッシュボード上で 実行数、失敗率、CPU/メモリ使用量 をリアルタイムに可視化できます。
外部ログ集約(ELK / Loki)への出力方法
- n8n Cloud では 「Settings」 → 「Logs」 → 「Log Forwarding」 に syslog エンドポイントを設定し、JSON 形式で ELK スタックや Grafana Loki に転送可能です。
- オンプレミスの場合は Docker コンテナの
--log-driver=gelfオプションか、docker logsを Fluent Bit / Logstash にパイプして同様に集約します。
まとめ
n8n はローカルでもクラウドでも柔軟に導入でき、認証情報の暗号化管理・高度なエラーハンドリング・CI/CD 連携 といったエンタープライズ向け機能が標準で備わっています。この記事で示したインストール手順、ノード設定例、セキュリティ対策、そして監視基盤の構築方法を参考にすれば、開発者は安全かつ高速に API 連携ワークフローを本番環境へデプロイできるでしょう。継続的なテストとメトリクスのモニタリングを併用することで、長期運用における信頼性も確保できます。