n8n ワークフロー構築:ノード接続から自動化シナリオ設計まで
また手作業でデータをコピーしている。Notion の表からティックティック(滴答清单)へ、さらに Feishu(飛書)ドキュメントへと、合わせて 20 件以上のレコードを同期する必要がある。キーボードがカタカタと鳴り響く。この作業は先週もやったし、その前の週もやった。今年に入ってからずっと止まっていない気がする。
繰り返しの作業はかなり苦手だ。怠け者だから(まあ、確かに少し怠け者ではある)というわけではなく、こうした機械的なコピー&ペーストは頭をまったく使わないのに、やらざるを得ないからだ。その後、オープンソースのワークフロー自動化ツール n8n を見つけた。数日いじってみたら、あの面倒なデータ同期をすべて機械に任せられるようになった。
この記事では n8n の使い方を、ノードの概念から実際のシナリオまで、ハマったポイントもすべて包み隠さず紹介する。あなたもよく繰り返し作業に悩まされているなら、何かヒントが見つかるかもしれない。
一、n8n とは?まずはいくつかの概念を整理する
正直なところ、初めて n8n の画面を見たときは少し戸惑った。キャンバスは小さなブロックだらけで、線がごちゃごちゃに繋がっていて、どこから手をつければいいのか全くわからなかった。後になって、この小さなブロックがノードで、ノード同士を繋いだものがワークフローだと理解した。
1.1 オープンソース、ビジュアル、ローコード
n8n の位置づけは「オープンソースの自動化ツール」だ。要するに、ドラッグ&ドロップで異なるサービスを繋ぎ、一部のタスクを自動で完了させるものだ。Zapier や IFTTT を聞いたことがあるかもしれない。それらも自動化を行うツールだが、n8n にはいくつか違う点がある。
- オープンソースで無料:自分でデプロイでき、データは完全に自分の手元にある
- ノードが豊富:400 以上のノードがあり、さまざまな API やサービスに対応
- ビジュアル編集:ドラッグだけでワークフローを組め、コードを書く必要がない(書くこともできる)
私にとって、オープンソースという点はかなり重要だ。自動化のシナリオには、たとえば社内の API 呼び出しなど、機密データが絡むものもある。Zapier のようなクラウドプラットフォームに置くのはどうも不安だ。n8n を自分でデプロイすれば、データの流れはすべて自分のサーバー上にあるので安心できる。
1.2 ノードの種類:トリガー、アクション、ロジック
n8n のノードはおおよそ 3 種類に分けられる。この分類を理解しておくと、後でワークフローを組むのがぐっと楽になる。
トリガーノード(Trigger)——ワークフローを起動する起点。
ドミノ倒しを想像してほしい。最初の 1 枚が倒れて初めて、その後が次々と倒れる。トリガーはその最初の 1 枚だ。よく使うものには次がある。
Schedule Trigger:定時トリガー。たとえば毎朝 7 時に実行Webhook:外部トリガー。たとえば HTTP リクエストを受け取ると起動Manual Trigger:手動トリガー。ボタンを押すと開始
私は最初 Manual Trigger を使っていた。デバッグ時に便利で、好きなタイミングで実行できる。本番稼働してから Schedule Trigger に切り替えた。
アクションノード(Action)——実作業を行うノード。
これらのノードは具体的な操作を担当する。たとえば次のとおり。
HTTP Request:API にリクエストし、データを取得または送信Set:データ変換。フィールド名の変更やフォーマット調整などGmail / Slack / Notion:サードパーティサービスに接続し、メール送信・メッセージ送信・ドキュメント作成
アクションノードは最もよく使うもので、ワークフローのおよそ 90% はこれらのノードで動いている。
ロジックノード——フローの進む方向を制御する。
ワークフローは一直線ではなく、条件によって異なる分岐に進む必要がある場合もある。たとえば次のとおり。
If:条件を判定し、満たせば A ルート、満たさなければ B ルートへMerge:複数の分岐を 1 つに統合Switch:複数条件の判定。コードの switch-case に似ている
ロジックノードを使いこなせば、ワークフローはとても柔軟になる。私は後でデータ同期を作るとき、If ノードでデータの有無を判定し、あれば更新、なければ新規作成という処理に使った。
1.3 ノード間でデータはどう受け渡される?
ノードを繋ぐと、データは自動的に流れる。前のノードの出力が、次のノードの入力になる。
n8n ではデータは JSON 形式で受け渡される。各ノードは実行が終わると 1 つの JSON オブジェクトを生成し、その中にさまざまなフィールドが入っている。次のノードでこれらのフィールドを使いたいときは、{{ $json.fieldName }} という構文で参照できる。
例として、HTTP Request ノードが天気 API にリクエストすると、返ってくるデータはおおよそ次のようになる。
{
"temperature": 18,
"weather": "晴",
"city": "北京"
}
次のノードで気温データを使いたいなら、{{ $json.temperature }} と書く。n8n が自動的に 18 を埋め込んでくれる。
この構文は最初こそ慣れないが、何度か書けばすぐ手に馴染む。ノード内で直接試して、{{ $json. と入力してドロップダウンメニューを見るのがおすすめだ。どのフィールドが選べるか一目でわかる。
二、ゼロから始める:最初のワークフローを構築する
概念の説明が終わったので、さっそく手を動かしてみよう。私が初めて成功させたワークフローは「定時で天気を取得してメールを送る」というものだった。とてもシンプルだが、コア操作の大部分を網羅している。
2.1 環境の準備
最も手早く試す方法は、クラウド版を直接使うことだ:n8n.cloud。アカウントを登録すればすぐ使え、無料版でも基本機能が使える。
自分でデプロイしたいなら(私のようにいじるのが好きなタイプ)、Docker のコマンド 1 つで済む。
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
n8nio/n8n
起動したら、ブラウザで http://localhost:5678 を開けばエディタ画面が表示される。
このデプロイ部分でハマったポイントが 1 つある。データの永続化だ。最初は -v パラメータを付けず、コンテナを再起動したらワークフローが全部消えてしまった。-v ~/.n8n:/home/node/.n8n を付けると、データがローカルディレクトリに保存される。
2.2 ケース 1:定時で天気を取得してメールを送る
目標:毎朝 7 時に、自動で北京の天気を取得し、メールで通知する。
ステップ 1:Schedule Trigger を追加する
キャンバス上の「+」ボタンをクリックし、「Schedule Trigger」を検索する。追加したら、トリガー時刻を設定する。
- Trigger Interval: Days
- Days between triggers: 1
- Trigger at Hour: 7
ステップ 2:OpenWeatherMap ノードを追加する
続けて「+」をクリックし、「OpenWeatherMap」(天気 API のノード)を検索する。次の設定が必要だ。
- Operation: Get current weather
- City: Beijing(または自分のいる都市)
- API Key: OpenWeatherMap 公式サイトで登録して取得する
API Key を取得したら、入力するだけでよい。
ステップ 3:Gmail ノードを追加する
「Gmail」を検索し、メール送信のアクションノードを追加する。設定は次のとおり。
- Operation: Send
- To: 自分のメールアドレス
- Subject: 今日の天気通知
- Message Type: HTML
- Message: ここはテンプレート構文を使い、天気データを埋め込む
メール本文はこのように書ける。
今日の北京の天気:{{ $json.weather }}
気温:{{ $json.temperature }}℃
出かけるときは天気をチェックしてね!
ステップ 4:ノードを接続する
Schedule Trigger の出力端を OpenWeatherMap の入力端へドラッグし、さらに OpenWeatherMap を Gmail へドラッグする。これで 3 本の線が繋がり、線形のフローができる。
ステップ 5:実行テスト
右上の「Execute Workflow」ボタンをクリックする。設定が正しければ、各ノードが順番に実行され、最後に Gmail からメールが 1 通送られるはずだ。メールボックスを確認して、天気通知が届いているか見てみよう。
成功した瞬間は、正直少し興奮した。シンプルなワークフローではあるが、あの「機械が代わりに働いてくれる」感覚は、確かに気持ちいい。
2.3 ケース 2:フォーム送信で自動通知
2 つ目のシナリオはフォームの自動通知だ。あなたがウェブサイトを運営していて、ユーザーがフォームを送信したら Slack に通知を受け取りたいとする。
Webhook トリガー
「Webhook」ノードを追加し、「Webhook URL」を選ぶ。この URL がフォーム送信先のアドレスになる。これをフォームの action に入れるか、JavaScript で POST リクエストを送る。
Slack ノード
「Slack」ノードを追加し、次のように設定する。
- Operation: Post message
- Channel: 通知を受け取りたいチャンネル
- Message: 同じくテンプレート構文で、フォームデータを埋め込む
メッセージ内容:
新しいフォーム送信を受信しました:
名前:{{ $json.name }}
メール:{{ $json.email }}
内容:{{ $json.message }}
接続すれば、誰かがフォームを送信するたびに Slack にメッセージが届く。私は後に会社サイトの問い合わせフォームをこのワークフローに繋いだところ、対応スピードが目に見えて速くなった——もう手動で管理画面を見に行く必要がなくなったのだ。
三、応用実践:マルチシナリオの自動化設計
基本操作を覚えたら、次はもう少し複雑なシナリオを紹介しよう。これらは私が実際に使っているワークフローで、ハマった末にようやく安定して動くようになったものだ。
3.1 データ同期:Notion とティックティックの双方向同期
このシナリオの背景はこうだ。私は Notion でタスクの計画を記録し、ティックティック(滴答清单)で日々の ToDo をこなしている。両者のデータを同期しないと、混乱してしまう。
考え方:2 つのトリガーで Notion とティックティックの変化をそれぞれ監視し、If ノードでデータの有無を判定して、あれば更新、なければ新規作成する。
アーキテクチャ設計:
Notion Trigger → If (ティックティックに存在する?) →
- Yes: ティックティックを更新
- No: ティックティックのタスクを新規作成
ティックティック Trigger → If (Notion に存在する?) →
- Yes: Notion を更新
- No: Notion のエントリを新規作成
ポイント:
- 一意の識別子:両者に一意のフィールド(
taskIdなど)を持たせ、同じデータかどうか判定する - 重複トリガー防止:更新操作が新たな同期を引き起こす可能性があるため、条件判定を加えて無限ループを避ける
- エラー処理:API 呼び出しはたまに失敗するので、リトライ機構(Retry on Error)を設定し、最大 3 回までリトライする
このワークフローはかなり長くデバッグした。主に双方向同期のロジックが混乱しやすかったからだ。後で Merge ノードを追加し、両者の更新結果を統合してから一括処理するようにして、ようやく安定して動くようになった。
3.2 コンテンツ配信:ブログ公開のマルチプラットフォーム配信
このシナリオはコンテンツ運営をしている人に向いている。ブログを書いたら、複数のプラットフォームへ自動で配信したい。
RSS 監視 + マルチチャンネル配信:
RSS Feed Trigger → HTTP Request (記事の詳細を取得) →
→ Slack (チーム通知)
→ Gmail (メール購読)
→ WeChat プッシュ (自前でインターフェースを用意する必要あり)
コンテンツのテンプレート化処理:
プラットフォームごとに形式が異なる。Slack はシンプルなカードでよいが、メールは完全な本文が必要だ。私はワークフローに Set ノードを 1 つ追加し、記事のタイトル・リンク・要約をそれぞれ抽出してから、プラットフォームごとに異なる形式を生成している。
WeChat プッシュの部分はやや複雑で、自前でインターフェースを用意する必要がある(私は WeChat Work(企業微信)のボット Webhook を使った)。だが用意してしまえば、すべての配信が自動化され、かなりの時間を節約できた。
3.3 AI 連携:AI チャットサポートの自動応答
n8n は最近 AI Agent ノードを公開し、大規模モデルに接続できるようになった。このシナリオでは、簡単な AI チャットサポートを構築し、ユーザーの質問に自動応答する。
AI Agent ノードの設定:
- Model: OpenAI または Claude を選択(API Key の設定が必要)
- System Prompt: サポートの振る舞いを定義する。たとえば「あなたは親しみやすいサポートアシスタントで、製品に関するユーザーの疑問に答えます」
- Memory: 有効にすると、Agent が会話履歴を記憶する
トリガーの接続:
Webhook でユーザーのメッセージを受け取り、AI Agent に渡してから、応答結果をユーザーに返す。
このシナリオを少し試してみたところ、応答の質はまずまずだったが、複雑な質問はやはり人の介入が必要だ。「製品の使い方」「価格はいくらか」といった定型的でよくある問い合わせの処理に向いている。
3.4 監視アラート:API ヘルスチェック
最後のシナリオは技術運用でよく使うものだ。定期的に API が正常かどうかを検査し、異常時に自動でアラートを出す。
ワークフロー設計:
Schedule Trigger (10 分ごと) → HTTP Request (API を検査) →
→ If (レスポンスステータスコード == 200?) →
- Yes: 終了
- No: Slack アラート + エラーログ記録
重要な設定:
- HTTP Request の URL を対象 API に設定
- If ノードで
$json.statusCode == 200を判定 - 異常分岐では Slack でアラートメッセージを送信し、同時に
Setノードでエラーの詳細を記録
このワークフローは会社のテスト用 API にデプロイし、数か月動かしているが、実際に何度か異常を捕捉できた。シンプルな監視ではあるが、手動チェックよりずっと信頼できる。
四、デバッグと最適化のテクニック
ワークフローは一度で安定して動くものではなく、デバッグは避けて通れない道だ。ここではハマった末に得た経験をいくつか共有する。
4.1 実行履歴の確認
実行が終わるたびに、n8n は実行履歴を記録する。左側の「Executions」タブをクリックすると、すべての実行記録を確認できる。
失敗ノードの特定:
あるノードが失敗すると、履歴で赤く表示される。失敗したノードをクリックすると、具体的なエラー内容を確認できる。よくあるエラーの種類は次のとおり。
- API 呼び出しのタイムアウト
- データ形式の不一致
- 認証情報の失効(API Key の期限切れ)
出力データの確認:
各ノードをクリックすると、その出力データを確認できる。デバッグ時は、ノードを 1 つずつ確認し、データが想定どおりに受け渡されているか見ている。あるフィールド名を書き間違えると、後ろのノードが値を取得できなくなることがある。
4.2 よくあるエラー処理
API タイムアウトのリトライ:
ノードの設定で「Retry on Error」を設定できる。一般にはリトライ 3 回、間隔 1〜2 秒を設定する。一時的な障害の大部分はリトライで解決できる。
データ形式の不一致:
この問題が最もよくある。たとえば API が文字列を返すのに、ノードは数値を期待している場合だ。解決策は、前に Set ノードを 1 つ追加して、JavaScript で変換することだ。
{{ Number($json.temperature) }}
または Edit Fields ノードで直接フィールドの型を変更する。
認証情報の失効チェック:
n8n の認証情報管理は左側メニューにある。API 呼び出しがずっと失敗するなら、認証情報が期限切れでないか確認しよう。サービス側で権限が更新され、認証情報を再設定する必要がある場合もある。
4.3 パフォーマンス最適化の提案
ワークフローを多く動かすと、パフォーマンスの問題に直面するかもしれない。最適化の提案をいくつか紹介する。
バッチ処理:
データ量が比較的多い場合は、1 件ずつ処理しないこと。Split In Batches ノードでデータをバッチに分け、1 バッチ 100 件ずつ処理する(具体的な件数は API の制限に応じて調整する)。
サブワークフローへの分割:
複雑なワークフローは複数のサブワークフローに分割できる。メインワークフローからサブワークフローを呼び出すと、ロジックがより明確になり、個別のデバッグもしやすくなる。Execute Workflow ノードで別のワークフローを呼び出せる。
キャッシュ機構:
毎回リクエストする必要のないデータもある。たとえば静的な設定ファイルの取得なら、初回リクエスト後に Cache ノードでキャッシュしておき、以降はキャッシュから直接読み取れる。
五、まとめと発展
長々と話したが、n8n のコアロジックは実はとてもシンプルだ。ノードはブロック、線はロジック、データはノード間を流れる。この数個の概念を押さえれば、後はどんなワークフローでも組めるようになる。
学習パスの提案:
- まずはシンプルな単線ワークフローから始める(あの天気通知のような)
- 少しずつ分岐や条件判定を加える
- さらに AI 連携や双方向同期に挑戦する
コミュニティリソース:
n8n 公式にはテンプレートライブラリ n8n.io/templates があり、すぐ使えるワークフローテンプレートがたくさんある。やりたいシナリオに出会ったら、まずテンプレートがないか検索してみよう。コピーして少し手を加えるだけで済む。
発展の方向性:
既存のノードでは足りない場合、自分でカスタムノードを開発できる。n8n はオープンソースで、ノード開発のドキュメントも充実している。ただし TypeScript の基礎が多少必要なので、開発経験のある人に向いている。
自動化ツールをいじって得られる最大の収穫は、どれだけ時間を節約できたかではなく、面倒な繰り返し作業を機械に任せたあと、頭をより重要なことに使えるようになることだ。あなたにも同じような悩みがあるなら、ぜひ n8n を試してみてほしい。新しい効率化の突破口が見つかるかもしれない。
参考資料
最初の n8n ワークフローを構築する
ゼロから定時の天気通知ワークフローを構築する
⏱️ 目安時間: 15 分
- 1
ステップ1: n8n 環境をデプロイする
デプロイ方法を選びます:
• クラウド版:n8n.cloud に登録すればすぐ使える
• ローカルデプロイ:Docker コマンド `docker run -p 5678:5678 n8nio/n8n`
• データを永続化するため `-v` パラメータの追加に注意 - 2
ステップ2: トリガーノードを追加する
Schedule Trigger を設定します:
•「+」をクリックして Schedule Trigger を検索
• Trigger Interval を Days に設定
• Trigger at Hour を 7 に設定(毎朝 7 時) - 3
ステップ3: アクションノードを追加する
OpenWeatherMap と Gmail を接続します:
• OpenWeatherMap に都市と API Key を設定
• Gmail に宛先・件名・本文テンプレートを設定
• 本文では `{{ $json.weather }}` でデータを参照 - 4
ステップ4: ノードを接続してテストする
ワークフローを完成させます:
• ドラッグで 3 つのノードを接続
• Execute Workflow をクリックしてテスト
• メールボックスを確認して受信を確認
FAQ
n8n と Zapier の違いは?
n8n はどんなサービスに対応している?
ノード間でデータはどう受け渡される?
ワークフローの実行が失敗したらどうデバッグする?
双方向同期の無限ループを防ぐには?
n8n は AI 大規模モデルと連携できる?
6分で読めます · 公開日: 2026年4月5日 · 更新日: 2026年6月8日
関連記事
セルフホスト Dev Sandbox:Docker と Go でプレビュー環境を作る
セルフホスト Dev Sandbox:Docker と Go でプレビュー環境を作る
Cloudflare Pro か Business か?3 つの軸で判断するアップグレード判断ツリー
Cloudflare Pro か Business か?3 つの軸で判断するアップグレード判断ツリー
社内ネットワーク Docker pull タイムアウトのトラブルシューティング:DNS・プロキシ・ミラー加速の完全ガイド
コメント
GitHubアカウントでログインしてコメントできます