はじめに
近年、業務効率化や生産性向上の鍵として「自動化」が注目されています。特に、複数のWebサービスやアプリケーションを連携させるワークフロー自動化ツールは、プログラミングの知識がない非エンジニアでも導入しやすく、多くの企業や個人が活用を始めています。
その中でも、「n8n(エヌエイトエヌ)」は、オープンソースのツールとして人気を集めています。n8nの基本的な概要やメリット・デメリットなどについては、次の記事で詳しく解説されていますので、本記事では割愛します。
この記事では、Windows 11ユーザー向けに、コンテナ技術「Docker」を利用してn8nのローカル環境を構築する手順、n8n Cloudからのデータ移行、そして具体的な自動化レシピに焦点を当て、初心者の方にも分かりやすく、ステップバイステップでご紹介します。
Dockerとは?アプリケーション実行環境の常識を変えるコンテナ技術
Dockerは、アプリケーションとその依存関係(ライブラリ、設定ファイルなど)を「コンテナ」と呼ばれる独立した環境にパッケージングし、実行するためのプラットフォームです 。これにより、「開発環境では動いたのに、本番環境では動かない」といった問題を解消し、開発から運用までのプロセスを効率化します 。
Dockerの基本概念
- イメージ (Image): コンテナを作成するための設計図やテンプレートです 。アプリケーションを実行するために必要なOS、ライブラリ、コードなどが含まれています。イメージは不変(変更不可)です。
- コンテナ (Container): イメージを元に作成された、実際にアプリケーションが動作する独立した環境です。ホストOSのカーネルを共有しつつ、プロセスやファイルシステムは隔離されています 。軽量で高速に起動・停止できます 。
- ボリューム (Volume): コンテナ内のデータを永続化(保存し続ける)するための仕組みです 。コンテナが削除されてもデータは残り、他のコンテナとデータを共有することも可能です 。Dockerが管理する専用領域にデータが保存されます 。
関係性のまとめ: イメージ(設計図)からコンテナ(実行環境)が作られ、コンテナが生成したデータはボリューム(データ保管場所)に保存される、という流れです 。
Dockerを利用するメリット
- 環境構築の容易さと再現性: Dockerイメージを使えば、誰でも同じ環境を簡単に、素早く構築できます 。開発環境、テスト環境、本番環境の一貫性を保ちやすくなります 。
- 軽量・高速: 従来の仮想マシン(VM)のようにゲストOSを丸ごと起動する必要がなく、ホストOSのカーネルを共有するため、リソース消費が少なく、起動・停止が非常に高速です 。
- リソース効率: 1つのホストマシン上でより多くのコンテナを稼働させられるため、ハードウェアリソースを有効活用でき、コスト削減につながります 。
- ポータビリティ: Dockerコンテナは、Dockerが動作する環境であれば、オンプレミス、クラウド、ローカルPCなど、どこでも同じように動作します 。
- エコシステム: Docker Hubなどで公開されている豊富な公式イメージやコミュニティイメージを利用でき、開発を加速できます 。
Dockerを利用するデメリット・注意点
- OS依存性: コンテナはホストOSのカーネルを共有するため、基本的にホストと同じ種類のOS(LinuxコンテナはLinuxホスト、WindowsコンテナはWindowsホスト)しか動作させられません 。異なるOSの環境が必要な場合は、仮想マシンが必要です。(ただし、Docker Desktop on WindowsではWSL2を使うことでLinuxコンテナを効率的に実行できます )
- 学習コスト: Dockerの概念(イメージ、コンテナ、ボリューム、ネットワークなど)やDockerfileの書き方、Dockerコマンドの習得には時間がかかります 。
- データの永続化: デフォルトではコンテナを削除するとデータも消えるため、ボリュームなどを利用したデータ永続化の設計が不可欠です 。
- セキュリティ: イメージの信頼性確認や、コンテナ間の適切な分離、権限管理など、セキュリティに関する考慮が必要です 。信頼できるソースからイメージを取得することが重要です 。
- 設定の複雑さ: ネットワーク、ストレージ、ログ管理など、設定項目が多く、最適化されていない設定ではリソースを過剰に消費する可能性もあります 。
Dockerが適している場面:
Dockerは、アプリケーションの開発・テスト・デプロイの効率化、マイクロサービスアーキテクチャの構築、CI/CDパイプラインの実現などに広く利用されています 。n8nのようなWebアプリケーションをローカルで安定して動かしたり、異なる環境へ簡単に移行したりする上でも非常に有効なツールです。
Dockerのメリット・デメリット まとめ
メリット | デメリット・注意点 |
---|---|
環境構築が簡単で再現性が高い | ホストOSと異なるOSのコンテナは基本的に動かせない |
軽量・高速な動作 | 学習コストがかかる |
ハードウェアリソースの効率的な利用 | データ永続化のための設定が必要 |
高いポータビリティ | セキュリティへの配慮が必要 |
豊富なエコシステム | 設定が複雑になりがち |
Windows 11へのDocker DesktopインストールとWSL2有効化
Windows 11でDocker(特にLinuxコンテナ)を快適に利用するには、「Docker Desktop for Windows」をインストールし、バックエンドとして「WSL2 (Windows Subsystem for Linux 2)」を使用するのが推奨されています。WSL2は、Windows上でLinux環境を軽量かつ高速に実行するための仕組みです。
システム要件の確認
インストール前に、お使いのPCが以下の要件を満たしているか確認してください 。
- OS: Windows 11 (Home, Pro, Enterprise, Education) 64-bit, バージョン 22H2 以降
- プロセッサ: SLAT対応の64ビットプロセッサ
- RAM: 4GB以上
- BIOS/UEFI: ハードウェア仮想化支援機能が有効になっていること(通常はデフォルトで有効ですが、無効な場合はBIOS/UEFI設定画面で有効化が必要です)
WSL2の有効化手順
Windows 11では、WSL2の有効化と必要なコンポーネント(Linuxカーネル、デフォルトのLinuxディストリビューション(通常Ubuntu))のインストールが簡単なコマンド一発で実行できます 。
- PowerShellまたはコマンドプロンプトを管理者権限で開きます。
- スタートメニューを右クリックし、「ターミナル (管理者)」または「Windows PowerShell (管理者)」を選択します。
- 以下のコマンドを実行します。PowerShell
wsl --install
- PCを再起動します。 インストール完了後、再起動を求められる場合があります。
- (初回起動時) Linuxディストリビューションのセットアップ: 再起動後、UbuntuなどのLinuxディストリビューションが自動的に起動し、ユーザー名とパスワードの設定を求められる場合があります 。画面の指示に従って設定してください。
これでWSL2の基本的なセットアップは完了です。PowerShellまたはコマンドプロンプトで wsl -l -v
コマンドを実行すると、インストールされているLinuxディストリビューションとそのバージョン(VERSIONが2になっていればWSL2)を確認できます 。
Docker Desktopのインストール手順
- Docker Desktopインストーラーのダウンロード: Docker公式サイトから「Windowsダウンロード-AMD64」を選択して、Windows版のインストーラー (
Docker Desktop Installer.exe
) をダウンロードします 。 - インストーラーの実行: ダウンロードしたインストーラーをダブルクリックして起動します 。
- 構成 (Configuration): インストール中に設定画面が表示されます。「Use WSL 2 instead of Hyper-V (recommended)」 のチェックボックスがオンになっていることを確認し、「OK」をクリックします 。これにより、Docker DesktopがWSL2バックエンドを使用するように設定されます。
- インストール: 指示に従ってインストールを進めます。完了まで少し時間がかかる場合があります 。
- 完了と再起動/ログアウト: インストールが完了したら「Close」ボタンをクリックします。Windowsからのログアウトまたは再起動が必要な場合があります 。
- Docker Desktopの起動: インストール後、Docker Desktopを起動します。初回起動時には利用規約への同意が求められます 。内容を確認し、「Accept」をクリックします。
注意: 大規模企業(従業員250名以上 または 年間収益1000万ドル以上)での商用利用には有料サブスクリプションが必要です 。個人利用、教育目的、小規模ビジネスなどは無料です。 - WSL Integrationの設定確認: Docker Desktopの「Settings」>「Resources」>「WSL Integration」を開き、「Enable integration with my default WSL distro」がオンになっていること、および使用するLinuxディストリビューション(例: Ubuntu)のトグルスイッチがオンになっていることを確認します 。これにより、WSLディストリビューション内からだけでなく、WindowsのコマンドプロンプトやPowerShellからもDockerコマンドが利用できるようになります。
注意点
- 管理者権限: Docker Desktopのインストールと一部の操作には管理者権限が必要です 。
- ユーザーグループ: 通常、管理者アカウントでインストールすれば問題ありませんが、管理者アカウントと普段使うユーザーアカウントが異なる場合、ユーザーを
docker-users
グループに追加する必要がある場合があります 。 - Windows Home Edition: Windows 11 HomeでもWSL2とDocker Desktopを利用してLinuxコンテナを実行できます 。ただし、Windowsコンテナは実行できません 。
- 既存のHyper-V環境: すでにHyper-Vを他の仮想化ソフトウェア(例: VirtualBoxの古いバージョン)で使用している場合、競合する可能性があります。WSL2はHyper-Vのサブセットである「仮想マシンプラットフォーム」を利用するため、共存は可能ですが、設定には注意が必要です。
これで、Windows 11上でDocker DesktopがWSL2バックエンドで動作する環境が整いました。
Dockerでn8nセルフホストAIスターターキットを用いてローカル環境を構築する
AIスターターキットとは何か?
n8nセルフホスト型AIスターターキットは、n8n公式が提供するプロジェクトの一つで、n8n本体と、セルフホスト環境でよく利用されるAI関連ツールを、Docker Composeを使って迅速にセットアップできるように設計されています。
このキットには、n8n本体に加えて、ローカル環境で大規模言語モデル(LLM)を実行するためのOllama、n8nのデータ(ワークフロー、クレデンシャル、実行ログなど)を永続的に保存するためのデータベース(多くの場合PostgreSQL)、そしてキットのバージョンによってはAIアプリケーションで重要となるベクトル埋め込みデータを扱うためのベクトルデータベース(例:Milvus)などが含まれています。
キットを利用する利点
AIスターターキットを利用することには、以下のような利点があります:
- 迅速なセットアップ: n8n、Ollama、データベースなどを個別に設定する手間が省け、事前設定済みの構成をすぐに利用開始できます。
- 統合された環境: n8nとローカルAIツールが連携しやすいように構成されています。
- Docker Composeによる管理: docker compose up、down、pullといった簡単なコマンドで、関連サービス全体の起動、停止、更新が可能です。
いよいよ、n8nをインストール準備が整いましたので、n8nセルフホスト型AIスターターキットを用いてインストールし、nn8nを起動してみましょう。
n8nのインストール
Gitが利用できることが前提で話を進めます。Gitが使えない場合は、GitのWindows版をGit公式サイトからダウンロードしインストールしてください。インストール方法などの細かい説明は省略します。
PowerShell
git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git cd self-hosted-ai-starter-kit
警告が出ますが、かまわず実行してください。これを実行するとあなたの「C:\Users\your name」に「self-hosted-ai-starter-kit」と言うディレクトリが作られ、その中にn8nをDocker Compseで動かすためのファイル群が作られます。
n8nの起動
Docker Composeで起動: 以下のコマンドを実行します。
以下のコマンドを実行する際には、当然にDocker が起動していることが前提です。
- PowerShell
docker compose up -d
- 初回起動時は各種イメージのダウンロードや初期設定が行われます。
- すべてのサービス(n8n, Ollama, Qdrant, PostgreSQL)が自動的に立ち上がります。
n8nへのアクセス
- Webブラウザを開く: Google ChromeやFirefoxなどのWebブラウザを起動します。
- アドレスバーに入力: アドレスバーに
http://localhost:5678
と入力してEnterキーを押します 。 - Set up Owner account:Emai、First Name、Last Name、Passwordを記入して、「| want to receive security and product updates」の左横の□にチェックを入れ「Next」をクリック。
- n8n画面表示: 認証が成功すると、ダッシュボードが表示されます。
これで、Docker Composeを使用して、データが永続化されるn8nのローカル環境が構築できました。
n8n CloudからDocker環境へのデータ移行
n8n Cloudで作成したワークフローやクレデンシャルを、今回構築したローカルのDocker環境へ移行する方法について解説します。移行の鍵となるのは、ワークフローのJSONファイルと、特にクレデンシャル(認証情報)の扱いです。
移行の概要と注意点
- ワークフロー: n8n CloudからJSON形式でエクスポートし、ローカル環境にインポートできます 。
- クレデンシャル: しかし、n8n Cloudのクレデンシャルは、Cloud環境の暗号化キーで保護されています。このキーにはアクセスできないため、そのままローカル環境に移行しても復号できません 。
- 実行履歴: n8n Cloudの実行履歴データは、通常、移行対象にはなりません 。必要であれば、分析用にCSVとしてエクスポートすることは可能です 。
移行方法
ワークフローは手動で移行できますが、クレデンシャルはローカル環境で再作成する必要があります。
- ワークフローのエクスポート (n8n Cloud UI):
- n8n Cloudにログインし、移行したい各ワークフローを開きます。
- 右上の「…」メニューから「Download」を選択し、ワークフローをJSONファイルとして個別にダウンロードします 。
- ローカルDocker環境の準備: セクション4で構築したDocker環境を起動しておきます (
docker compose up -d
)。 - ワークフローのインポート (ローカルUI):
- ローカルのn8n (
http://localhost:5678
) にアクセスします。 - 「Workflows」ページで「Add workflow」>「Import from File」を選択し、ダウンロードしたJSONファイルを一つずつインポートします 。
- ローカルのn8n (
- クレデンシャルの再作成 (ローカルUI):
- ローカルn8nの左メニューから「Credentials」を選択します。
- n8n Cloudで使用していた全てのクレデンシャルを、ローカル環境で手動で新規作成します 。サービスへの接続に必要なAPIキーや認証情報を再度入力する必要があります。
- クレデンシャルの再接続:
- インポートした各ワークフローを開きます。
- クレデンシャルを使用している全てのノード(例: Gmail, Slack, Google Sheetsノードなど)を編集します。
- 各ノードの「Credential」ドロップダウンで、ステップ4で再作成したローカルのクレデンシャルを選択し直します 。
- 動作確認: 各ワークフローをテスト実行し、クレデンシャルが正しく設定され、意図通りに動作することを確認します。
【実践レシピ】n8nで作る初めての自動化ワークフロー
n8nの基本的な使い方がわかったところで、具体的な自動化ワークフロー(レシピ)をいくつか作成してみましょう。ここでは、初心者向けにシンプルで実用的な例を3つ紹介します。
ワークフロー作成の基本
n8nでのワークフロー作成は、以下の流れで行います。
- トリガーノードの配置: ワークフローを開始するきっかけとなるノード(例: 定期実行、Webhook受信、メール受信)をキャンバスに配置します 。
- アクションノードの追加: トリガーに続いて実行したい処理(例: データ取得、データ加工、通知送信)を行うノードを追加し、線で繋ぎます 。
- ノードの設定: 各ノードをクリックし、必要な設定(認証情報、パラメータ、処理内容など)を行います。
- クレデンシャル: 外部サービス連携には、事前にAPIキーなどをn8nに登録した「クレデンシャル」を選択します 。
- データ参照: 前のノードからの出力データは、後続ノードの設定画面で
{{ $json.key }}
や{{ $node["Node Name"].json.key }}
のような式(Expression)を使って参照・埋め込みできます 。
- テスト実行: 各ノードやワークフロー全体をテスト実行し、意図した通りに動作するか、データが正しく渡されているかを確認します 。Input/Outputデータを確認しながらデバッグできます 。
- アクティブ化と保存: ワークフローが完成したら、右上のスイッチを「Active」にして有効化し、保存します。
ワークフローレシピ概要
レシピ名 | トリガーノード | 主要アクションノード | 主な用途 |
---|---|---|---|
新着GmailをSlackに通知 | Gmail Trigger | (IF), Slack | 特定のメールを受信したら内容をSlackに通知する |
Webフォーム入力をGoogle Sheetsに記録 | Webhook Trigger | Google Sheets | Webフォームの送信内容をスプレッドシートに自動記録する |
RSSフィード更新をDiscordに通知 | RSS Feed Trigger | Discord | ブログ等の新着記事をDiscordに通知する |
レシピ例1:新着GmailをSlackに通知
ユースケース: 「重要」「請求書」など特定のキーワードが件名に含まれるGmailを受信したら、そのメールの概要をSlackの自分宛DMまたは指定チャンネルに通知します。
必要なノード: Gmail Trigger
, IF
, Slack
手順:
- Gmail Triggerノード追加:
- Gmail Triggerノード追加: ノードパネルから
Gmail Trigger
を検索し、キャンバスに追加します。 - Credentials: 「Credential to connect with」のドロップダウンの隣にある鉛筆アイコン(または「Create New」)をクリックし、画面の指示に従ってGmailアカウントへのアクセスを許可 (OAuth2認証) します。一度認証済みの場合は、既存のCredentialを選択します。
- Poll Times: ワークフローが新しいメールをチェックする間隔を設定します。
- Mode: チェック間隔のモードを選択します(例: Every Minute, Every Hour など)。
- 必要に応じて「Add Poll Time」で詳細な間隔を設定します(デフォルトは1分毎)。
- Event: 「Event」のドロップダウンで監視したいイベントを選択します。メール受信時にトリガーする場合は 「Message Received」 を選択します。
- Simplify: 取得するメール情報の詳細度を設定します。
- トグルスイッチをオフにすると、メールの本文や添付ファイル情報など、より詳細なデータを取得できます(推奨)。
- トグルスイッチをオンにすると、基本的な情報のみを取得します。
- Filters: 必要に応じて、特定の条件に合うメールのみをトリガーの対象とする設定です。
「Add Filter」をクリックし、条件(例: Include 、Spam and Trash、Include Drafts、Label Names or IDs、Search、Read Status、Senderなど)を指定します。ここで、このセクションで何も設定しなかった場合、Gmail Trigger ノードは基本的に Gmail アカウントに届く新しいメールの全てを監視します。 - Options: その他の詳細設定が必要な場合に使用します。
「Add option」をクリックして、必要なオプションを追加・設定します(通常はFiltersで十分なことが多いです)。 - Fetch Test Event: 設定が完了したら、ノード上部にある「Fetch Test Event」ボタンをクリックしてテスト実行します。最近のメール情報が取得できるか確認し、Outputデータの内容を確認しましょう。
- Gmail Triggerノード追加: ノードパネルから
- IFノード追加:
- IFノード追加: Gmail Triggerノードの右側の
+
をクリックし、IF ノードを追加して接続します。 - Conditions の設定:
- 「Conditions」セクションに、条件を設定するための入力欄(
value1
, Operation,value2
)が表示されます。 value1
: 比較したい値として、前のノード(Gmail Trigger)から渡されるメールの件名を指定します。直接入力欄に式 {{ $json.subject }} を入力します。これでメールの件名を参照できます。- Operation: 比較方法を選択します。ドロップダウンをクリックし、「A String」→「
contains
」を選択します。 value2
: 比較対象の値として、件名に含まれているかを確認したいキーワードを入力します。例えば、重要
と入力します。
- 「Conditions」セクションに、条件を設定するための入力欄(
- これで、メールの件名 (
value1
で指定した{{ $json.subject }}
) に、入力したキーワード (value2
で指定した重要
) が含まれている (contains
操作) 場合にのみ、IFノードのtrue
出力に進むようになります。 - Add condition: 複数の条件を組み合わせたい場合は、「Add condition」ボタンをクリックして新しい条件の行を追加します。条件間の関係(AND/OR)も設定できます。
- Options: その他の詳細設定が必要な場合に使用します(通常はデフォルト設定で問題ありません)。
- IFノード追加: Gmail Triggerノードの右側の
- Slackノード追加:
- IFノードの
true
出力(上側の点)から+
をクリックし、Slack
の「Send a Message」アクションを追加して接続します。 - Credential to connect withで「Create New Credential」をクリックし、Slackアカウントへのアクセスで「OAuth2」を選択し、Client ID、Client Secret を取得します。
重要:SlackのOAuth認証でセルフホストn8n(PCにインストールした環境)では、OAuth Redirect URLが「http:・・・・」のために、基本的には認証ができませんでした。「https:・・・・」である必要があるためです。これを解決する方法があることはあるのですが、これについてはかなり面倒なのでここでは扱うことはしません。 - Resource:操作対象のリソースを指定します。メッセージを送信するので、デフォルトの
Message
のままで問題ありません。 - Operation:リソース(Message)に対する操作を指定します。メッセージを投稿するので、デフォルトの
Send
のままで問題ありません。 - Send Message To:
- メッセージを送信する宛先の種類を指定します。
- ドロップダウンをクリックし、
Channel
またはUser
を選択します。あなたご自身へのDMに送りたい場合はUser
を選択してください。
- 通知先の指定:
- 「Send Message To」で選択した種類に応じて、通知先のチャンネルまたはユーザーを指定します。
- 例えば「User」を選択した場合、「User」という新しい項目が表示されるので、その下のドロップダウン(From list が選択されているはずです)をクリックし、リストからあなたご自身のユーザー名を選択します。
- 「Channel」を選択した場合は、同様にリストから通知したいチャンネルを選択します。
- Message Type: 送信するメッセージのフォーマットを指定します。シンプルなテキストメッセージで通知する場合は、デフォルトの
Simple Text Message
のままで問題ありません。 - Message Text:
- Slackに投稿したいメッセージの内容を入力します。前のノード(Gmail TriggerやIFノード)から渡される情報を含めるには、Expression(
{{ }}
)を使用します。 - 入力欄内の例のように、Gmailノードから取得した件名 (
{{ $json.subject }}
)、差出人 ({{ $json.from.email }}
など)、本文抜粋 ({{ $json.textSnippet }}
) などを参照して、通知メッセージを作成します。 - 必要に応じて、日付のフォーマット (
{{ $json.internalDate.toDateTime().format("yyyy/MM/dd HH:mm") }}
) や文字列の抜粋 ({{ $json.text.slice(0, 100) }}
) といったJavaScriptのメソッドもExpression内で利用できます。 - 特定のノードの出力を参照したい場合は、
{{ $node["ノード名"].json.キー名 }}
の形式も使用できます。
- Slackに投稿したいメッセージの内容を入力します。前のノード(Gmail TriggerやIFノード)から渡される情報を含めるには、Expression(
- Options: メッセージ送信に関する追加の詳細設定が必要な場合に使用しますが、基本的な通知であれば通常は設定不要です。
- Test Step: 設定が完了したら、ノード上部にある「Test step」ボタンをクリックしてテスト実行し、Slackの指定した宛先(あなたのDMまたは選択したチャンネル)にメッセージが送信されるか確認します。
- IFノードの
- アクティブ化と保存: 右上のスイッチを
Active
にしてワークフローを有効化し、保存します。
以下がワークフロー図です。
レシピ例2:Webフォーム入力をGoogle Sheetsに記録
作成するワークフローは以下の流れになります。
HTMLフォーム → Webhookノード → Codeノード → Google Sheetsノード
これにより、ユーザーがWebフォームからデータを送信すると、n8nがそれを受け取り、整形してGoogle Sheetsに追記します。
必要なノード: Webhook
, code,Google Sheets
手順: Webフォーム入力をGoogle Sheetsに記録するワークフローの作成
この手順では、以下のHTMLフォームファイル(n8nsend.html
)を使用し、フォームからの送信データをGoogle Sheetsに記録します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
</head>
<body>
<h1>お問い合わせフォーム</h1>
<form action="http://localhost:5678/webhook-test/contact-form-entry" method="POST">
<div>
<label for="name">お名前:</label><br>
<input type="text" id="name" name="name" placeholder="名無し権平" required>
</div>
<br>
<div>
<label for="email">メールアドレス:</label><br>
<input type="email" id="email" name="email" placeholder="test@example.com" required>
</div>
<br>
<div>
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" placeholder="これはテストの問い合わせ内容です。" rows="4" cols="50"></textarea>
</div>
<br>
<button type="submit">送信</button>
</form>
</body>
</html>
(form
タグの action
属性に、後ほどn8nのWebhookノードで確認するURLを設定します。ここではテスト用のURLの例を記述しています。)
ステップ1:Google Sheetsスプレッドシートの準備
- Google Drive上で、フォームの入力データを記録するための新しいスプレッドシートを作成します。既存のスプレッドシートを使用しても構いません。
- 作成したスプレッドシートを開き、データを記録したいシートを選択します(通常は「シート1」など)。
- 最初の行(1行目)に、フォームの入力項目に対応するヘッダーテキストを入力します。 後でn8nでマッピングする際に分かりやすくなります。 例:A1セルに
名前
、B1セルにメールアドレス
、C1セルにメッセージ
と入力します。
ステップ2:n8nで新しいワークフローを作成する
- n8nのエディター画面を開き、「Add workflow」ボタンをクリックして新しい空のワークフローを作成します。
ステップ3:Webhookノードを追加して設定する
- 新しいワークフローのキャンバス上で
+
ボタンをクリックするか、ノードパネルからWebhook
を検索し、キャンバスに追加します。 - Webhookノードを選択し、設定パネルを開きます。
- HTTP Method: ドロップダウンで
POST
を選択します。Webフォームの送信は通常POSTメソッドで行われるためです。 - Path: Webhookのエンドポイントとなる、ワークフロー内で一意のパスを入力します。例:
contact-form-entry
- Authentication: ドロップダウンで
None
を選択します(特に認証を設けない場合)。 - Respond: ドロップダウンで
Immediately
を選択します。フォーム送信を受け付けたことをすぐに呼び出し元に伝えるためです。 - 設定パネル上部の「Webhook URLs」セクションに、Test URL と Production URL が表示されます。
- Test URL: テスト実行時に使用する一時的なURLです。このURLをコピーしておきます。
http://localhost:5678/webhook-test/contact-form-entry
のような形式になっているはずです。 - Production URL: ワークフローをアクティブ化した後に使用する本番環境用のURLです。
- Test URL: テスト実行時に使用する一時的なURLです。このURLをコピーしておきます。
ステップ4:Codeノードを追加して設定する
Webhookノードの右側の
+
をクリックし、ノードパネルからCode
を検索・クリックして追加します。Codeノードを選択し、設定パネルを開きます。
Language:
JavaScript
になっていることを確認します。コードエディタに、以下のJavaScriptコードを記述します。このコードは、Webhookノードから渡されたフォームデータ(
body
に含まれる)を抽出し、Google Sheetsノードが期待する形式に整形するためのものです。JavaScript// CodeノードのInputデータは、通常、前のノードのOutputデータの配列として提供されます。 // Webhookノードは1つのアイテムを出力するので、ここでは最初のアイテムのjsonデータを取得します。 const webhookOutputData = $input.first().json; // WebhookのOutputデータの 'body' プロパティにフォームデータが入っています。 // HTMLフォームからは application/x-www-form-urlencoded 形式で送信され、 // Webhookノードがこれを自動で解析してbodyに格納しています。 const formData = webhookOutputData.body; // Google Sheetsノード(Append Row)が期待する形式(JSONオブジェクトの配列)に整形します。 // 配列の各オブジェクトがスプレッドシートの新しい1行に対応します。 const googleSheetsData = [{ // ここで、Google Sheetsのスプレッドシートに書き込みたいデータ項目(列)と、 // Webhookから受け取ったフォームデータをマッピングします。 // スプレッドシートのヘッダー(例: 名前, メールアドレス, メッセージ)に対応させるキー名を指定し、 // その値としてフォームデータを formData.キー名 で参照します。 name: formData.name, email: formData.email, message: formData.message // 必要に応じて、他にもフォーム項目があればここに追加します。 }]; // 整形したデータをCodeノードのOutputとして返します。 return googleSheetsData;
(コード内の
formData.name
,formData.email
,formData.message
は、HTMLフォームの<input>
や<textarea>
タグのname
属性の値と一致させてください。)
ステップ5:Google Sheetsノードを追加して設定する
- Codeノードの右側の
+
をクリックし、ノードパネルからGoogle Sheets
を検索・クリックして追加します。 - Google Sheetsノードを選択し、設定パネルを開きます。
- Action: ドロップダウンで
Sheet Within Document
が選択されていることを確認し、その下のドロップダウンでAppend row in sheet
を選択します。 - Credential to connect with: ドロップダウンをクリックし、GoogleアカウントのCredentialを選択します。初めて連携する場合は「Create New credential」をクリックし、画面の指示に従ってGoogleアカウントへのアクセスを許可します。
- Document: データを追記したいGoogle Sheetsスプレッドシートを指定します。ドロップダウンから対象のスプレッドシートを選択します。リストに表示されない場合は、スプレッドシートのURLに含まれるIDを直接入力することもできます。
- Sheet: データを追記したいスプレッドシート内のシートを指定します。ドロップダウンから対象のシート名を選択します。
- Mapping Column Mode: ドロップダウンで
Map Each Column Manually
を選択します。 - Values to Send: ここで、Codeノードから渡されるデータとスプレッドシートの列のマッピング設定を行います。
- 「Add column to send」というテキストの横にあるドロップダウンアイコンをクリックし、新しい入力欄をスプレッドシートに書き込みたいデータの数だけ追加します(例: 3つ)。
- 追加された各入力欄の左側の「Sheet Column」に、スプレッドシートの対応する列(例:
A
,B
,C
またはヘッダー名「名前」「メールアドレス」「メッセージ」)を入力します。 - 追加された各入力欄の右側の「Column Value」に、CodeノードのOutputデータのキーを参照するExpressionを入力します。CodeノードのOutputは
name
,email
,message
をトップレベルに持つので、Expressionは以下のようになります。- 名前 (
name
):{{ $json.name }}
- メールアドレス (
email
):{{ $json.email }}
- メッセージ (
message
):{{ $json.message }}
入力欄の右側のアイコン( Expression ビルダー)を使うと、CodeノードのOutputデータ構造を見ながら簡単に Expression を作成できます。
- 名前 (
ステップ6:ワークフロー全体のテスト
- Google Sheetsノードの設定が完了したら、ワークフロー全体のテストを行います。
- Webhookノードを選択し、右上の「Listen for test event」ボタンをクリックします。 ボタンの色が変わり、Webhook URL(Test URL)が表示され、受信待機状態になります。
- 用意したHTMLファイル(
n8nsend.html
)をWebブラウザで開きます。 - フォームにテストデータを入力し、「送信」ボタンをクリックします。
- データがWebhookのTest URLに送信され、n8nのWebhookノードがそれを受信します。
- n8nのエディター画面に戻り、各ノードの下にOutputデータが表示されているか確認します。
- Webhookノードの下にOutputが表示され、
body
にフォームデータが含まれているか確認。 - Codeノードの下にOutputが表示され、
name
,email
,message
を持つ整形されたデータになっているか確認。 - Google Sheetsノードの下にOutputが表示され、スプレッドシートに新しい行としてデータが追記されたか確認します。 実際にGoogle Sheetsを開いてデータが書き込まれたか確認してください。
- Webhookノードの下にOutputが表示され、
ステップ7:ワークフローのアクティブ化と保存
- ワークフローが期待通りに動作することを確認したら、ワークフローを有効化します。エディター右上のスイッチを「Active」に切り替えます。
- ワークフローを保存します。名前を付けて保存してください。
- 重要: ワークフローをActiveにすると、Webhookノードの「Production URL」が有効になります。HTMLファイル(
n8nsend.html
)を開き、form
タグのaction
属性に設定されているURLを、WebhookノードのProduction URL に書き換えてください。今後、このフォームから送信されたデータは、アクティブなワークフローによって処理されるようになります。
これで、「Webフォーム入力をGoogle Sheetsに記録する」ワークフローが完成しました。いつでもフォームからデータを送信すると、自動的にGoogle Sheetsに追記されます。お疲れ様でした!
以下がワークフロー図です。
レシピ例3:RSSフィード更新をDiscordに通知
ユースケース: 好きなブログやニュースサイトのRSSフィードを定期的にチェックし、新しい記事が公開されたら、そのタイトルとリンクをDiscordの特定のチャンネルにメッセージとして投稿します。
必要なノード: RSS Feed Trigger、Discord
【手順】
ステップ1:準備 - Discord側でWebhook URLを作成する
n8nからメッセージを投稿したいDiscordチャンネルにWebhookを設定します。
- 通知メッセージを投稿したい Discordサーバー および テキストチャンネル を決めます。(例: ご自身で作成したテストサーバーの
#general
チャンネルなど) - そのテキストチャンネルを開き、チャンネル名の横にある 歯車アイコン(チャンネル設定) をクリックします。
- 設定メニューの「連携サービス」(または「インテグレーション」)を選択します。
- 「Webhookを作成」ボタンをクリックします。
- 新しいWebhookが作成されます。Webhookの名前(例:
n8n通知
やSpidey Bot
など、Botの名前として表示されます)を設定できます。 - 表示されているWebhook URLの右側にある「Webhook URLをコピー」ボタンをクリックし、URLをコピーします。このURLは後でn8nで必要になりますので、安全な場所に一時的に控えておいてください。
- 注意: Webhookを作成するには、そのサーバーおよびチャンネルで「Webhookの管理」権限が必要です。権限がない場合は作成できません。
ステップ2:n8nで新しいワークフローを作成する
- n8nのエディター画面を開き、「Add workflow」ボタンをクリックして新しい空のワークフローを作成します。
ステップ3:RSS Feed Read Triggerノードを追加して設定する
- ノードパネルから
RSS Feed Trigger
を検索し、キャンバスに追加します。これがワークフローの開始点(トリガー)となります。 - RSS Feed Read Triggerノードを選択し、設定パネルを開きます。
- URL: 監視したいRSSフィードのURLを入力します。例:
https://gigazine.net/news/rss_2.0/
- Poll Times: フィードをチェックする間隔を設定します。ドロップダウンで
Every Hour
やEvery 15 Minutes
などを選択します。ワークフローをアクティブ化すると、この間隔で自動的にフィードが監視されます。 - 設定パネル上部の 「Fetch Test Event」 ボタンをクリックします。n8nがRSSフィードを一度読み込み、新しい記事があればそのデータを取得します。
- テストが成功しOutputデータが表示されたら、そのデータを開いて内容を確認します。特に、記事のタイトル(
title
)やリンク(link
)といった、通知メッセージに含めたい情報のキー名を確認しておきます。
- テストが成功しOutputデータが表示されたら、そのデータを開いて内容を確認します。特に、記事のタイトル(
ステップ4:Discordノードを追加して設定する
- RSS Feed Read Triggerノードの右側の
+
をクリックし、ノードパネルからDiscord
を検索・クリックして追加し、接続します。 - Discordノード追加時のアクション選択画面が表示されたら、「MESSAGE ACTIONS」セクションの
Send a message
を選択します。 - Discordノードを選択し、設定パネルを開きます。
- Credential to connect with:
- ドロップダウンで「Create New」を選択します。
- 新しいCredentialの作成画面が表示されます。「Connection Type」で
Webhook
を選択します。 - 「Webhook URL」入力欄に、ステップ1でDiscord側でコピーしたWebhook URLを貼り付けます。
- Credentialに任意の名前を付けて(例:
My Discord Notification Webhook
)、「Save」をクリックします。 - 既にWebhookのCredentialを作成済みの場合は、ドロップダウンから既存のCredentialを選択します。
- (Bot Token認証について: Bot TokenやOAuth2を使った認証方法もありますが、設定がより複雑になるため、特定のチャンネルへの通知であればWebhook URLを使うのが簡単で推奨です。)
- Resource / Operation: 「Send a message」アクションを選択した場合、通常これらの項目は自動的に
Message
とSend
に設定されているはずです。設定パネルで確認します。 - Webhook URL: Credential設定でWebhook URLを指定した場合、ここにCredentialで設定したWebhook URLが表示されているはずです。通知先のチャンネルはWebhook URLに紐づいているため、この項目で別途チャンネル名やChannel IDを指定する必要はありません。
- Message: Discordチャンネルに投稿したい通知メッセージの内容を記述します。RSS Feed Read Triggerノードから取得した記事の情報をExpression(
{{ }}
)を使って埋め込みます。- 例:
新しい記事が公開されました! タイトル: {{ $json.title }} リンク: {{ $json.link }}
{{ $json.title }}
や{{ $json.link }}
の部分は、ステップ3の「Fetch Test Event」で確認したRSSフィードのOutputデータのキー名に合わせて修正してください。Expression入力欄の右側にあるアイコン(Expressionビルダー)を使うと、簡単にデータ項目を参照できます。
- 例:
- Options / Embeds / Files: これらはメッセージの追加設定ですが、シンプルなテキスト通知であれば通常設定不要です。
- 設定が完了したら、Discordノード上部の 「Test step」 ボタンをクリックします。
- これにより、RSS Feed Read Triggerノードのテストデータを使ってDiscordノードが実行され、ステップ1でWebhookを作成したDiscordチャンネルにテストメッセージが投稿されます。
- Discordを開き、テストメッセージが正しく投稿されたか、メッセージ内容が期待通りになっているか確認してください。
ステップ5:ワークフローのアクティブ化と保存
- ワークフロー全体(RSS Feed Read Triggerノード → Discordノード)が期待通りに動作することを確認したら、ワークフローを自動実行するために有効化します。エディターの右上にあるスイッチを 「Active」 に切り替えます。スイッチの色が緑色になります。
- ワークフローを保存します。ワークフローの名前を付けて保存してください。
これで、RSSフィードが更新されるたびに、設定したDiscordチャンネルに通知メッセージが自動的に投稿されるようになります。
これらの手順は基本的なものですが、n8nを使えばさらに複雑で便利な自動化を実現できます。ぜひ色々なノードを試してみてください。
初心者向け:関連用語解説
n8nやDockerを使いこなす上で、いくつか知っておくと便利な専門用語があります。ここでは、特に重要な用語を初心者向けに解説します。
用語 | 簡単な説明 | n8n/Dockerとの関連性 |
---|---|---|
API (エーピーアイ) | アプリケーション同士が情報や機能をやり取りするための「接続窓口」や「命令セット」のこと 。 | n8nは様々なWebサービス(Gmail, Slack等)のAPIを利用して連携を実現します 。各ノードは裏側で対応するAPIを呼び出しています。 |
Webhook (ウェブフック) | あるシステムで特定の出来事(イベント)が起きた時に、指定されたURLへ自動的に「通知」を送る仕組み 。 | n8nの Webhook トリガーノードは、外部サービスからの通知(例: フォーム送信、決済完了)を受け取ってワークフローを開始するために使われます 。 |
JSON (ジェイソン) | データを「キー: 値」のペアで記述するための、軽量なテキスト形式のデータフォーマット [ (示唆), (示唆)]。 | n8nのノード間でデータを受け渡す際の標準的な形式です 。テスト実行時に表示されるInput/Outputデータはこの形式です。 |
クレデンシャル | サービスにアクセスするための「認証情報」のこと。APIキー、ユーザー名/パスワード、トークンなど 。 | n8nで外部サービス連携ノードを使う際、そのサービスに接続するためのクレデンシャルをn8nに登録・設定する必要があります 。n8nはこれを暗号化して保存します 。 |
ノード (Node) | n8nワークフローを構成する個々の「処理ブロック」のこと 。トリガー、アクション、条件分岐などがあります。 | n8nのワークフローは、これらのノードを線で繋ぎ合わせて作成します 。 |
ワークフロー (Workflow) | ノードを繋ぎ合わせて作成した、一連の「自動化処理の流れ」全体のこと 。 | n8nを使って作成する自動化の単位そのものです 。 |
Dockerイメージ (Image) | コンテナを作るための「設計図」や「テンプレート」 。OS、アプリ、ライブラリ等が含まれます。 | n8nをDockerで動かす際には、n8nの公式Dockerイメージ (docker.n8n.io/n8nio/n8n ) を使います 。 |
Dockerコンテナ (Container) | Dockerイメージから作成された、実際にアプリケーションが動作する「隔離された実行環境」 。 | Dockerを使ってn8nを実行する場合、n8nアプリケーションはこのコンテナの中で動作します。 |
Dockerボリューム (Volume) | コンテナ内のデータを永続化(保存し続ける)するためのDockerが管理する「特別な保管場所」 。 | n8nのワークフローやクレデンシャル情報をコンテナ削除後も保持するために、Dockerボリュームを設定してデータを保存します 。 |
Docker Compose | 複数のDockerコンテナを定義し、まとめて管理するためのツール 。設定は docker-compose.yml ファイルに記述します。 | n8nとデータベース(例: PostgreSQL)コンテナを一緒に起動・管理するのに便利です 。この記事でもComposeを使った構築を推奨しています。 |
WSL2 | Windows上でLinux環境を軽量かつ高速に実行するための仕組み。 | Windows 11でDocker Desktopを使いLinuxコンテナ(n8nなど)を快適に動かすための推奨バックエンドです 。 |
これらの用語の意味を理解しておくと、n8nやDockerに関するドキュメントを読んだり、トラブルシューティングを行ったりする際に役立ちます。
まとめ:n8nとDockerで自動化を始めよう
この記事では、Windows 11環境でDockerを使ってオープンソースのワークフロー自動化ツールn8nのローカル環境を構築する方法を、基礎から実践まで詳しく解説しました。
学んだことの要約:
- n8nの基本的な機能、特徴、メリット・デメリット
- Dockerの基本概念(イメージ、コンテナ、ボリューム)と利点・注意点
- Windows 11へのDocker DesktopインストールとWSL2の有効化手順
- Docker Composeを使ったn8nとPostgreSQL環境の構築方法
- Dockerボリュームによるデータ永続化の重要性と設定方法
- n8nデータの移行、バックアップ、リストアの手順(特に暗号化キーの重要性)
- Gmail、Slack、Webフォーム、Google Sheets、RSS、Discordを使った具体的な自動化レシピ例
- 関連する専門用語の解説
ローカル環境でn8nとDockerを使うメリット:
Dockerを使ってn8nをローカル環境で動かすことには、以下のような大きなメリットがあります。
- コスト効率: n8n自体が無料であり、ローカル実行なら高価なクラウドサービスの利用料も不要です 。
- データプライバシー: ワークフローや処理するデータが外部に出ることがなく、機密情報を安全に扱えます。
- 高い柔軟性: ローカルファイルへのアクセスや、クラウドサービスでは制限される可能性のある自由なカスタマイズが可能です 。
- 学習と実験: 安全なローカル環境で、コストを気にせず自由に様々な自動化を試すことができます。
自動化による可能性:
n8nとDockerを組み合わせることで、これまで手作業で行っていた定型業務や、複数のサービスを跨る複雑な作業を自動化し、大幅な時間短縮と効率化を実現できます 。これにより、より創造的な作業や、本来注力すべき業務に集中するための時間を生み出すことができるでしょう。
次のステップへのヒント:
今回構築した環境は、自動化への第一歩です。さらにn8nを使いこなすために、以下のステップに進むことをお勧めします。
- 公式ドキュメントとコミュニティ: n8nの公式ドキュメントやコミュニティフォーラムには、豊富な情報や他のユーザーとの交流の場があります 。
- 連携サービスとテンプレート: n8nが対応する700以上の連携サービス を探索し、公式テンプレート を試してみましょう。
- 複雑なワークフロー: 条件分岐 (IF)、ループ (Loop)、エラーハンドリング、サブワークフローなどの機能を活用して、より高度なワークフロー構築に挑戦してみましょう 。
- AI機能の活用: n8nはAI連携機能も強化されています 。OpenAIやローカルLLM (Ollamaなど) を使ったメール要約、テキスト生成、データ分析などの自動化も可能です 。
Docker上で動作するn8nは、あなたのWindows PCを強力な自動化ハブに変える可能性を秘めています。ぜひこの記事を参考に、あなた自身の「あったらいいな」を実現する自動化ワークフローを作成してみてください。
コメント