n8nの使い方入門:最初のワークフローを作って動かす

公開 書いた人 大林 諒

この記事では、Webの問い合わせを受けてGoogleスプレッドシート「問い合わせ一覧」に1行足し、Slackの #問い合わせ に知らせる「問い合わせ受付」ワークフローを、空のキャンバスから本番で動くところまで作ります。ノードのつなぎ方、式の書き方、テストと本番の違い、失敗の追い方までこれ1本で揃います。前提は、Googleアカウント(Google Workspaceなら会社のアカウント)とSlackのワークスペースがあること。n8nの版は2026年10月時点の安定版2.44.7で書いています。

この記事の内容
  1. 先に決めること
  2. 作るものと、使う画面の一覧
  3. 画面の見方
  4. 手順
  5. ピン留めで、毎回フォームを送らずに試す
  6. 日本語化の現状
  7. 応用
  8. できないことと、その代わり
  9. よく詰まるところ
  10. 次にやること

先に決めること

飛ばすとCredential(認証情報)の作り直しで手戻りになります。

どこで動かすか

最初の1本は、n8n Cloudの無料体験か、手元のPCで動かすのが早いです。n8n Cloudは申し込むとすぐ使え、クレジットカードは要りません(2026年10月時点の料金ページの記載)。体験中は実行1,000回、同時実行5、1回の実行は180秒までという上限があります。数えるのは本番の実行だけで、エディタで押すテスト実行は回数に入りません。

手元のPCなら、Node.js 24系があれば npx n8n で起動し、http://localhost:5678 で開けます。 ただし手元のPCは本番に使えません。閉じれば止まり、localhost のURLは社外から開けないからです。本番はVPSにDocker Composeで立て、n8n.example.co.jp のような独自ドメインとHTTPSで動かします。その手順は「n8nをセルフホストで導入する:Docker ComposeでVPSに立て、独自ドメインとHTTPSで使う」に分けました。この記事の手順はCloudでもセルフホストでも同じで、違うのはCredentialの作り方だけです。

問い合わせの入口をどれにするか

n8nで問い合わせを受ける方法は2つあります。「n8n Form Trigger」はn8nがフォームのページそのものを作ってくれるノードで、HTMLを書かずにすぐ公開できます。「Webhook」は既存のWebサイトのフォームから送られたデータを受け取るノードで、見た目は自社サイトのまま使えます。初めての1本は n8n Form Trigger で作り、仕組みが分かってからWebhookに付け替える順番が楽です。どちらも後ろにつなぐノードは同じなので、付け替えても作り直しにはなりません。

誰のアカウントでつなぐか

GoogleとSlackにつなぐCredentialは、作った人のアカウントの権限で動きます。担当者個人のGoogleアカウントで作ると、その人が異動・退職してアカウントが止まった日に、問い合わせの記録も止まります。本番で一番多い止まり方です。会社で使うなら、共用の業務アカウント(例: automation@example.co.jp)を用意し、スプレッドシートもそのアカウントで作るか、編集権限を渡しておきます。

時刻をどこに合わせるか

n8nは何も設定しないとアメリカ東部時間(America/New_York)で動きます。受付日時が13〜14時間ずれるのはこのためです。最初に Asia/Tokyo に揃えておきます。セルフホストは環境変数 GENERIC_TIMEZONE と TZ、n8n Cloudは管理画面「Instance settings」の「Runtime」にある「Time zone」で設定し、「Save and restart」で再起動します。ワークフロー単位でも、右上の三点メニューから開く「Settings」の「Timezone」で上書きできます。

作るものと、使う画面の一覧

完成形は3つのノードを1列につないだだけです。

順番ノード役割主な設定
1n8n Form Trigger問い合わせフォームを出し、送信されたらワークフローを始める項目(会社名・お名前・メールアドレス・種類・内容)
2Google Sheets「問い合わせ一覧」に1行足すAppend Row、列ごとに値をはめる
3Slack#問い合わせ に知らせるMessage の Send、本文に式で値を入れる

画面は5つです。

画面場所ここでやること
Overview左のメニューの「Overview」全ワークフロー・Credential・実行の一覧を見る。ワークフローもここから作る
Personalワークフローの名前の左に出る表示自分専用の置き場。作ったワークフローはここに入る
キャンバス(ワークフローの編集画面)ワークフローを開いたところノードを置いてつなぐ、Execute workflow、Publish
ノードパネル「Add first step」か + を押すと右に出る使うノードを検索して選ぶ
ノードの詳細画面ノードをダブルクリック左にINPUT、中央に設定、右にOUTPUTが並ぶ
ログイン直後のOverview。左のメニューと、上部のタブ(Workflows・Agents・Credentials・Executions・Variables・Data tables)
ログイン直後のOverview。左のメニューと、上部のタブ(Workflows・Agents・Credentials・Executions・Variables・Data tables)

画面の見方

ログインすると「Overview」が開きます。自分が見られるワークフロー、Credential、実行の記録などが「Workflows」「Credentials」「Executions」といったタブで切り替わる、n8nの玄関のような画面です。左のメニューの下のほうには「Templates」「Insights」「Help」「Settings」が並びます。作ったワークフローは、自分専用の置き場である「Personal」に入ります。

ワークフローを開くとキャンバスになります。ノードは左から右へ流れる順につなぎ、下の中央に「Execute」(ワークフローを実行)、右上に「Publish」(公開)があります。キャンバス上部のタブで「Editor」と「Executions」(そのワークフローの実行記録)を切り替えます。

ノードをダブルクリックすると詳細画面が開きます。左のINPUTは届いたデータ、中央は設定、右のOUTPUTは動かした結果です。INPUTとOUTPUTは「Schema」「Table」「JSON」の3つの見え方を切り替えられます。普段はSchema、細かい値を確かめるときはJSONが見やすいです。中央の上部には「Execute step」(このノードだけ実行)のボタンがあります。

ノードの詳細画面。左INPUT・中央の設定・右OUTPUTの3列と、Schema/Table/JSONの切り替え
ノードの詳細画面。左INPUT・中央の設定・右OUTPUTの3列と、Schema/Table/JSONの切り替え

手順

準備: スプレッドシートとSlackのチャンネルを作る

  1. Googleスプレッドシートで新しいファイルを作り、名前を「問い合わせ一覧」にする
  2. 1行目に見出しを入れる。A列から順に「受付日時」「会社名」「お名前」「メールアドレス」「種類」「内容」「対応状況」
  3. Slackで #問い合わせ チャンネルを作る

見出しは必ず先に作ります。n8nは1行目を列の名前として読み込みます。

ワークフローを作る

  1. 左のメニューで「Overview」を開く
  2. 右上の「Create workflow」を押す
  3. 左上の名前を「問い合わせ受付」に書き換え、キャンバスの空いたところを押して確定する

保存ボタンはなく、編集は数秒で自動保存されます。ただし保存されるのは下書きで、本番で動くのは「Publish」した版だけです。

問い合わせフォームを作る(n8n Form Trigger)

  1. キャンバス中央の「Add first step」を押す
  2. 出てきた一覧から「On form submission」(フォームが送信されたとき)を選ぶ。これが n8n Form Trigger
  3. 「Authentication」は「None」のまま(社外の誰でも送れるフォームにするため)
  4. 「Form Title」に「お問い合わせ」、「Form Description」に「2営業日以内に担当からご連絡します」と入れる
  5. 「Add Form Element」を押し、1つ目の項目を作る。「Label」に「会社名」、「Custom Field Name」に company、「Element Type」は「Text Input」、「Required Field」をオン
  6. 同じように「お名前」(name・Text Input・必須)、「メールアドレス」(email・Email・必須)を足す
  7. 「種類」(category)は「Element Type」を「Dropdown」にし、「Add Field Option」で「サービスについて」「お見積もり」「採用」「その他」を足す
  8. 「内容」(message)は「Textarea」・必須にする
  9. 「Respond When」は「Form Is Submitted」(送信されたらすぐ完了画面を出す)のまま
  10. 「Add option」から「Use Workflow Timezone」を足してオンにする
  11. 左上のノード名を「問い合わせフォーム」に変える

「Label」はフォームに表示される文字、「Custom Field Name」は後ろのノードでこの値を呼び出すときの名前です。Custom Field Nameは英小文字にすると式の打ち間違いが減ります。「Use Workflow Timezone」をオンにしないと、フォームが記録する日時はUTCのままになります。ノード名を変えたのは、あとで式から名指しするためです。

n8n Form Triggerの設定。Form Elementsに5項目が並び、「種類」がDropdownになっている
n8n Form Triggerの設定。Form Elementsに5項目が並び、「種類」がDropdownになっている

ここで一度、中央上部の「Execute step」を押します。テスト用のフォームが開くので、会社名「株式会社サンプル」、お名前「山田 太郎」、メールアドレス「yamada@example.com」などを入れて送信します。詳細画面のOUTPUTに、送った値が1件届いていれば成功です。

データの流れを読む(itemsとJSON)

OUTPUTをJSONの見え方に切り替えると、こういう形で届いているのが分かります。

[
  {
    "company": "株式会社サンプル",
    "name": "山田 太郎",
    "email": "yamada@example.com",
    "category": "お見積もり",
    "message": "料金表を送ってください",
    "submittedAt": "2026-10-26T14:05:12.345+09:00",
    "formMode": "test"
  }
]

n8nのノードの間を流れるデータは、いつも「オブジェクトの配列」です。入力した5項目のほかに、送信日時の submittedAt と、テストか本番かを表す formMode が付きます。配列の1つ1つを item(アイテム)と呼び、中身の値は item の json の下に入っています。フォームの送信1回なら item は1件です。スプレッドシートから10行読めば item は10件になり、次のノードは item ごとに1回ずつ処理を繰り返します。10件届いたSlackノードはメッセージを10通送ります。ループを書かなくても繰り返しになるのがn8nの大事な性質で、同じ通知が何通も来るときは、だいたい前のノードが複数の item を出しています。

この値を後ろのノードで使うのが「式」(Expression)です。{{ }} で囲んだ中に書き、ワークフローが動くたびに実際の値に置き換わります。

書き方意味この例での値
{{ $json.company }}直前のノードから届いた item の company株式会社サンプル
{{ $('問い合わせフォーム').item.json.email }}名前を指定したノードの、対応する item の emailyamada@example.com
{{ $now.toFormat('yyyy-MM-dd HH:mm') }}今の日時(ワークフローのタイムゾーン)2026-10-26 14:05

式は手で打たなくても作れます。INPUTに並んでいる項目を、中央の設定欄へドラッグして落とすと、その欄が「Fixed」(固定値)から「Expression」(式)に切り替わり、{{ $json.company }} が入ります。欄の下にはプレビューが出て、実際にどんな値になるかがその場で見えます。プレビューが空なら、その式はまだ値を拾えていません。

$json は「直前のノード」を指す点に注意します。Google Sheetsの後ろにSlackを置くと、Slackから見た $json はフォームの値ではなく、Google Sheetsの結果になります。ノードを2つ以上またいで値を取るときは、$('問い合わせフォーム') のようにノード名で指名します。

INPUTの「company」をドラッグして設定欄に落とし、Expressionに切り替わってプレビューが出ているところ
INPUTの「company」をドラッグして設定欄に落とし、Expressionに切り替わってプレビューが出ているところ

Googleスプレッドシートにつなぐ(Credentialを作る)

  1. 「問い合わせフォーム」の右の + を押す
  2. ノードパネルの「Search nodes」に sheets と打ち、「Google Sheets」を選ぶ
  3. 操作の一覧から「Append row in sheet」(シートに行を追加)を選ぶ
  4. 認証情報(Credential)の欄で「Create new credential」を選ぶ

ここから先は、どこで動かしているかで分かれます。

n8n Cloudなら、Credentialの画面に出る「Sign in with Google」を押し、共用アカウントでログインして許可するだけです。Google Cloudの設定は要りません。

セルフホストではこのボタンが使えないので、Google Cloud側で自分のOAuthアプリを作ります。

  1. Google Cloud Consoleで新しいプロジェクトを作り、選択されていることを確かめる
  2. 「APIs & Services」の「Library」で Google Sheets API を探して「ENABLE」を押す。Google Drive API も同じように有効にする
  3. 「APIs & Services」の「OAuth consent screen」で「Get started」を押し、「App name」と「User support email」を入れる
  4. 「Audience」はGoogle Workspaceの社内だけで使うなら「Internal」を選ぶ
  5. 「Branding」の「Authorized domains」に n8n のドメイン(例: example.co.jp)を足して「Save」
  6. 「APIs & Services」の「Credentials」で「+ Create credentials」から「OAuth client ID」を選び、「Application type」を「Web application」にする
  7. n8nのCredential画面に出ている「OAuth Redirect URL」をコピーし、「Authorized redirect URIs」に貼って「Create」
  8. 表示された「Client ID」と「Client Secret」をn8nのCredential画面に貼る
  9. 「Sign in with Google」を押して許可し、「Save」を押す

手順4で「External」を選び、公開申請をしないまま「Testing」の状態で使うと、許可が7日で切れて毎週つなぎ直すことになります。Googleの説明では、7日の期限が付くのは「External」かつ「Testing」の場合です。Google Workspaceなら「Internal」を選べばこの条件から外れます。

行を足す設定をする

  1. 「Resource」は「Sheet Within Document」、「Operation」は「Append Row」になっていることを確かめる
  2. 「Document」は「From list」で「問い合わせ一覧」を選ぶ
  3. 「Sheet」は「From list」で「シート1」を選ぶ
  4. 「Mapping Column Mode」は「Map Each Column Manually」を選ぶ
  5. 見出しの7列が欄として並ぶので、次の表のとおり値を入れる
  6. ノード名を「問い合わせ一覧に追加」に変える
列入れる値
受付日時{{ $now.toFormat('yyyy-MM-dd HH:mm') }}
会社名{{ $json.company }}(INPUTからドラッグ)
お名前{{ $json.name }}
メールアドレス{{ $json.email }}
種類{{ $json.category }}
内容{{ $json.message }}
対応状況未対応(固定値のまま)

「Map Automatically」は項目名と見出しが同じ列を自動で埋めますが、今回は company と「会社名」で一致しないので使いません。

「Execute step」を押し、スプレッドシートに1行増えたら成功です。

Google Sheetsノードの設定。Map Each Column Manuallyで7列に値が入っている
Google Sheetsノードの設定。Map Each Column Manuallyで7列に値が入っている

Slackに知らせる

  1. 「問い合わせ一覧に追加」の右の + を押し、slack で検索して「Slack」を選ぶ
  2. 操作の一覧から「Send a message」を選ぶ
  3. 認証情報(Credential)の欄で「Create new credential」を選び、Slackにつなぐ(下に詳しく書きます)
  4. 「Send Message To」は「Channel」、「Channel」は「From list」で #問い合わせ を選ぶ
  5. 「Message Type」は「Simple Text Message」
  6. 「Message Text」に次の本文を入れる
  7. 「Add option」から「Include Link to Workflow」を足してオフにする
新しい問い合わせが届きました
会社名: {{ $('問い合わせフォーム').item.json.company }}
お名前: {{ $('問い合わせフォーム').item.json.name }}
種類: {{ $('問い合わせフォーム').item.json.category }}
内容: {{ $('問い合わせフォーム').item.json.message }}

Slackノードの直前はGoogle Sheetsなので、$json ではなくノード名で指名しています。「Include Link to Workflow」は初期値がオンで、末尾にワークフローへのリンクが付くので外します。

SlackのCredentialは、n8n Cloudなら「Connect my account」を押してワークスペースを選び、許可するだけです。セルフホストでは自分のSlackアプリを作ります。

  1. n8nのCredential画面で認証方法を「OAuth2」にし、「OAuth Callback URL」をコピーする
  2. api.slack.com/apps で「Create New App」から「From scratch」を選び、名前(例: 問い合わせ通知)とワークスペースを決めて「Create App」
  3. 「OAuth & Permissions」の「Redirect URLs」で「Add New Redirect URL」を押し、コピーしたURLを貼って「Add」、「Save URLs」
  4. 同じ画面の「Bot Token Scopes」に chat:write と channels:read を足す
  5. 「Basic Information」の「App Credentials」にある「Client ID」と「Client Secret」をn8nに貼る
  6. Slack側で「Install to Workspace」を押して「Allow」(ワークスペースの管理者が押す)
  7. n8nに戻り、Credential画面の「Connect」を押して許可し、保存する

作ったSlackアプリは、#問い合わせ チャンネルのメンバーにしておきます。チャンネルで /invite @問い合わせ通知 と打てば入ります。メンバーでないチャンネルには送れず、エラーになります。

Slackノードの設定。Send Message ToがChannel、Message Textに式が入りプレビューが出ている
Slackノードの設定。Send Message ToがChannel、Message Textに式が入りプレビューが出ている

テスト実行で通しで確かめる

  1. キャンバス下の「Execute」を押す
  2. テスト用のフォームが開くので、テストの内容を入れて送信する
  3. 3つのノードに緑のチェックが付き、シートに1行増え、#問い合わせ に通知が来たことを確かめる

このとき使われているのは「Test URL」(テスト用のURL)です。テスト用のURLは、エディタで実行ボタンを押して待ち受けている間だけ有効で、届いたデータはそのままエディタに表示されます。

Execute workflow後のキャンバス。3ノードに緑のチェックと件数が付いている
Execute workflow後のキャンバス。3ノードに緑のチェックと件数が付いている

Publishして本番にする

  1. キャンバス右上の「Publish」を押す
  2. 「Publish workflow」の画面が出る。「Version name」には最初から名前が入っているので、「Describe changes (optional)」は空のまま「Publish」を押す
  3. 「問い合わせフォーム」を開き、「Production URL」(本番用のURL)をコピーする
  4. 別のブラウザ(またはシークレットウィンドウ)でそのURLを開き、送信してみる

2.0から、以前の「Activate」のスイッチは「Publish」「Unpublish」のボタンに変わりました。本番で動くのはPublishした版だけで、その後の編集は自動保存されても下書きのままです。直したら、もう一度Publishを押すまで本番には出ません。止めたいときは「Publish」の横の矢印から「Unpublish」を選びます。

本番のURLから届いた問い合わせは、エディタには表示されません。結果は次の実行一覧で見ます。社外に案内するのは必ず「Production URL」のほうです。

n8n Form TriggerのTest URLとProduction URLの切り替え部分
n8n Form TriggerのTest URLとProduction URLの切り替え部分

実行一覧で結果と失敗を見る

本番の実行は、ワークフローを開いてキャンバス上部の「Executions」タブで見ます。全体をまとめて見るなら「Overview」の「Executions」タブです。状態は「Error」(失敗)「Success」(成功)「Running」(実行中)「Waiting」(待機中)のほか、「Canceled」「Queued」があります。右上のフィルターのボタンから、ワークフロー・状態・開始日時で絞れます。

失敗した実行を開くと、止まったノードとエラーが赤く表示されます。直し方は2通りあります。

  • 原因がデータ側にあるときは、失敗した実行で「Debug in editor」を押す。その実行のデータがエディタに読み込まれ、最初のノードにピン留めされるので、本番と同じデータで何度でも試せる。セルフホストでは無料のCommunity版を登録しておく必要がある
  • 原因が一時的なもの(Googleの一時的なエラーなど)なら、実行の詳細にあるやり直しの矢印のボタンから「Retry with currently saved workflow (from node with error)」(今の設定でやり直す)か「Retry with original workflow (from node with error)」(失敗したときの設定でやり直す)を選ぶ

やり直しは失敗したノードから始まり、そのノードは前回処理できていた item も含めて全部やり直します。一部の行だけシートに入っていたら二重になるので、確かめてから押します。元の実行と失敗したやり直しの両方から押すのも、作業が重なるので避けます。

Executionsタブ。Errorになった実行を開き、エラーのノードが赤くなっているところ
Executionsタブ。Errorになった実行を開き、エラーのノードが赤くなっているところ

ピン留めで、毎回フォームを送らずに試す

ノードを直すたびにフォームを送り直さずに済むのが「Pin data」(データのピン留め)です。

  1. 一度「Execute step」で問い合わせフォームを動かし、OUTPUTに値を出す
  2. OUTPUTの右上のピンのボタン「Pin data」を押す
  3. 「This data is pinned for test executions.」と出たら固定完了

以後のテスト実行では、そのノードは動かずにピン留めした値を出し続けます。値を変えたいときは、OUTPUTをJSONにして鉛筆の「Edit」で書き換えて「Save」。外すときは上部の帯の「Unpin」を押します。ピン留めはテスト実行だけで効き、本番の実行には使われません。ファイルなどのバイナリを含む出力はピン留めできません。

日本語化の現状

2026年10月時点で、n8nの画面に日本語は用意されていません。表示言語を切り替える環境変数 N8N_DEFAULT_LOCALE はありますが、公式リポジトリに入っている画面の翻訳ファイルは英語だけです。ja を設定しても、訳が無い文言は英語に戻るので、見た目は英語のまま変わりません。

実際に運用していると、英語のまま使うのが一番早いです。ブラウザの自動翻訳をかけると、ノード名や項目名まで訳されて公式ドキュメントやエラー文と照らし合わせられなくなります。覚える英語は次の程度で足ります。

画面の英語意味
Add first step最初のノード(きっかけ)を置く
Execute step / Execute workflowこのノードだけ実行 / 全体をテスト実行
Publish / Unpublish本番に出す / 本番を止める
Create new credential認証情報を新しく作る
Fixed / Expression固定値 / 式
Executions実行の記録

応用

この「問い合わせ受付」は次のように育てられます。

  • 自社サイトの既存フォームから受けたいときは、n8n Form Trigger を「Webhook」に付け替える。後ろの2つのノードはそのまま使える
  • 問い合わせの種類を人が選ぶのではなく、内容からAIに判定させる。Google Sheetsの前にAIのノードを1つ挟む
  • 「Schedule Trigger」で毎朝「未対応」の件数をSlackに送る別のワークフローを作る

できないことと、その代わり

できないこと理由代わりの手
画面を日本語にする公式の翻訳が英語だけ上の対応表を見ながら英語のまま使う
フォームの見た目を自社サイトと完全に揃える「Custom Form Styling」でCSSは変えられるが、説明文のscriptやformなどのタグは取り除かれる自社サイトのフォームからWebhookで受ける
セルフホストで「Sign in with Google」だけでつなぐGoogleのかんたんログインはCloudだけGoogle CloudでOAuthクライアントを作る

よく詰まるところ

症状原因直し方
社外の人がフォームを送っても記録されないTest URLを渡している、またはPublishしていないPublishし、「Production URL」を案内する
直したのに本番の動きが変わらない自動保存は下書きで、本番は前の版のままもう一度「Publish」を押す
受付日時が13〜14時間ずれるタイムゾーンが初期値のAmerica/New_YorkGENERIC_TIMEZONE と TZ(CloudはInstance settings)とワークフローのTimezoneを Asia/Tokyo にする
式のプレビューが空になるField Nameの打ち間違い、前のノードを一度も動かしていない、$json が別のノードを指している前のノードを「Execute step」で動かし、ドラッグで式を作り直す。2つ以上前の値は $('ノード名') で取る
Googleで redirect_uri_mismatch が出るGoogle Cloudに登録したURLとn8nのURLが一致しない「OAuth Redirect URL」をコピーし直して貼る(httpとhttps、ポートまで揃える)
Googleで「このアプリは確認されていません」やAccess deniedになるExternalで、ログインしたアカウントがテストユーザーに入っていないInternalにするか、「Audience」の「Test users」に足す
7日ほどでGoogleにつながらなくなるExternal かつ Testing の状態で使っているInternalにするか、Credential画面からつなぎ直す
「Document」の一覧が出ない、権限エラーになるDrive APIが無効、またはつないだアカウントにシートの権限が無いSheets APIとDrive APIを両方有効にし、シートを共用アカウントに共有する
見出しを変えたら列がずれた、値が入らないノードを作ったあとに見出しの名前を変えた「Mapping Column Mode」を選び直して列を読み込み直す
Slackで not_in_channel のエラーになるSlackアプリがチャンネルのメンバーでないチャンネルで /invite @アプリ名 を打つ
同じ通知が何通も届く前のノードが複数のitemを出しているOUTPUTの件数を見る。1通にしたいならノードの「Settings」で「Execute Once」をオンにする

次にやること

あわせて読む