言語を切り替える
テーマを切り替える

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 のエントリを新規作成

ポイント

  1. 一意の識別子:両者に一意のフィールド(taskId など)を持たせ、同じデータかどうか判定する
  2. 重複トリガー防止:更新操作が新たな同期を引き起こす可能性があるため、条件判定を加えて無限ループを避ける
  3. エラー処理: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

    ステップ1: n8n 環境をデプロイする

    デプロイ方法を選びます:

    • クラウド版:n8n.cloud に登録すればすぐ使える
    • ローカルデプロイ:Docker コマンド `docker run -p 5678:5678 n8nio/n8n`
    • データを永続化するため `-v` パラメータの追加に注意
  2. 2

    ステップ2: トリガーノードを追加する

    Schedule Trigger を設定します:

    •「+」をクリックして Schedule Trigger を検索
    • Trigger Interval を Days に設定
    • Trigger at Hour を 7 に設定(毎朝 7 時)
  3. 3

    ステップ3: アクションノードを追加する

    OpenWeatherMap と Gmail を接続します:

    • OpenWeatherMap に都市と API Key を設定
    • Gmail に宛先・件名・本文テンプレートを設定
    • 本文では `{{ $json.weather }}` でデータを参照
  4. 4

    ステップ4: ノードを接続してテストする

    ワークフローを完成させます:

    • ドラッグで 3 つのノードを接続
    • Execute Workflow をクリックしてテスト
    • メールボックスを確認して受信を確認

FAQ

n8n と Zapier の違いは?
n8n はオープンソースで無料、自分でデプロイでき、データを完全に自分で管理できます。Zapier はクラウド型の商用サービスで、有料版は機能が充実していますがデータは第三者に保存されます。データに敏感なシナリオには n8n の自前デプロイが向いています。
n8n はどんなサービスに対応している?
n8n には 400 以上のノードが内蔵され、Gmail・Slack・Notion・GitHub・OpenAI・各種データベースなど主要サービスをカバーします。未対応のサービスも HTTP Request ノードで API を呼び出せます。
ノード間でデータはどう受け渡される?
データは JSON 形式で流れ、`{{ $json.fieldName }}` で上流データを参照します。ノードエディタで `{{ $json.` と入力すると、選択できるフィールドの候補が表示されるので便利です。
ワークフローの実行が失敗したらどうデバッグする?
Executions の履歴を確認すると、失敗したノードが赤く表示されます。ノードをクリックするとエラー内容や出力データを確認できます。よくある原因は API のタイムアウト、データ形式の不一致、認証情報の期限切れです。
双方向同期の無限ループを防ぐには?
一意の識別フィールド(taskId など)を追加し、If ノードでデータの出所を判定します。更新時に出所マークを確認すれば、新たな同期の連鎖を防げます。または Merge ノードで結果を統合してから一括処理する方法もあります。
n8n は AI 大規模モデルと連携できる?
できます。n8n には AI Agent ノードがあり、OpenAI や Claude などのモデルに対応しています。API Key・System Prompt・Memory を設定すれば使えるので、AI チャットサポートやコンテンツ生成などのシナリオに向いています。

6分で読めます · 公開日: 2026年4月5日 · 更新日: 2026年6月8日

コメント

GitHubアカウントでログインしてコメントできます