この記事では、Webの問い合わせを受けてGoogleスプレッドシート「問い合わせ一覧」に1行足し、Slackの #問い合わせ に知らせる「問い合わせ受付」ワークフローを、空のキャンバスから本番で動くところまで作ります。ノードのつなぎ方、式の書き方、テストと本番の違い、失敗の追い方までこれ1本で揃います。前提は、Googleアカウント(Google Workspaceなら会社のアカウント)とSlackのワークスペースがあること。n8nの版は2026年10月時点の安定版2.44.7で書いています。
先に決めること
飛ばすと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列につないだだけです。
| 順番 | ノード | 役割 | 主な設定 |
|---|---|---|---|
| 1 | n8n Form Trigger | 問い合わせフォームを出し、送信されたらワークフローを始める | 項目(会社名・お名前・メールアドレス・種類・内容) |
| 2 | Google Sheets | 「問い合わせ一覧」に1行足す | Append Row、列ごとに値をはめる |
| 3 | Slack | #問い合わせ に知らせる | Message の Send、本文に式で値を入れる |
画面は5つです。
| 画面 | 場所 | ここでやること |
|---|---|---|
| Overview | 左のメニューの「Overview」 | 全ワークフロー・Credential・実行の一覧を見る。ワークフローもここから作る |
| Personal | ワークフローの名前の左に出る表示 | 自分専用の置き場。作ったワークフローはここに入る |
| キャンバス(ワークフローの編集画面) | ワークフローを開いたところ | ノードを置いてつなぐ、Execute workflow、Publish |
| ノードパネル | 「Add first step」か + を押すと右に出る | 使うノードを検索して選ぶ |
| ノードの詳細画面 | ノードをダブルクリック | 左にINPUT、中央に設定、右にOUTPUTが並ぶ |

画面の見方
ログインすると「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」(このノードだけ実行)のボタンがあります。

手順
準備: スプレッドシートとSlackのチャンネルを作る
- Googleスプレッドシートで新しいファイルを作り、名前を「問い合わせ一覧」にする
- 1行目に見出しを入れる。A列から順に「受付日時」「会社名」「お名前」「メールアドレス」「種類」「内容」「対応状況」
- Slackで #問い合わせ チャンネルを作る
見出しは必ず先に作ります。n8nは1行目を列の名前として読み込みます。
ワークフローを作る
- 左のメニューで「Overview」を開く
- 右上の「Create workflow」を押す
- 左上の名前を「問い合わせ受付」に書き換え、キャンバスの空いたところを押して確定する
保存ボタンはなく、編集は数秒で自動保存されます。ただし保存されるのは下書きで、本番で動くのは「Publish」した版だけです。
問い合わせフォームを作る(n8n Form Trigger)
- キャンバス中央の「Add first step」を押す
- 出てきた一覧から「On form submission」(フォームが送信されたとき)を選ぶ。これが n8n Form Trigger
- 「Authentication」は「None」のまま(社外の誰でも送れるフォームにするため)
- 「Form Title」に「お問い合わせ」、「Form Description」に「2営業日以内に担当からご連絡します」と入れる
- 「Add Form Element」を押し、1つ目の項目を作る。「Label」に「会社名」、「Custom Field Name」に
company、「Element Type」は「Text Input」、「Required Field」をオン - 同じように「お名前」(
name・Text Input・必須)、「メールアドレス」(email・Email・必須)を足す - 「種類」(
category)は「Element Type」を「Dropdown」にし、「Add Field Option」で「サービスについて」「お見積もり」「採用」「その他」を足す - 「内容」(
message)は「Textarea」・必須にする - 「Respond When」は「Form Is Submitted」(送信されたらすぐ完了画面を出す)のまま
- 「Add option」から「Use Workflow Timezone」を足してオンにする
- 左上のノード名を「問い合わせフォーム」に変える
「Label」はフォームに表示される文字、「Custom Field Name」は後ろのノードでこの値を呼び出すときの名前です。Custom Field Nameは英小文字にすると式の打ち間違いが減ります。「Use Workflow Timezone」をオンにしないと、フォームが記録する日時はUTCのままになります。ノード名を変えたのは、あとで式から名指しするためです。

ここで一度、中央上部の「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 の email | yamada@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つ以上またいで値を取るときは、$('問い合わせフォーム') のようにノード名で指名します。

Googleスプレッドシートにつなぐ(Credentialを作る)
- 「問い合わせフォーム」の右の + を押す
- ノードパネルの「Search nodes」に
sheetsと打ち、「Google Sheets」を選ぶ - 操作の一覧から「Append row in sheet」(シートに行を追加)を選ぶ
- 認証情報(Credential)の欄で「Create new credential」を選ぶ
ここから先は、どこで動かしているかで分かれます。
n8n Cloudなら、Credentialの画面に出る「Sign in with Google」を押し、共用アカウントでログインして許可するだけです。Google Cloudの設定は要りません。
セルフホストではこのボタンが使えないので、Google Cloud側で自分のOAuthアプリを作ります。
- Google Cloud Consoleで新しいプロジェクトを作り、選択されていることを確かめる
- 「APIs & Services」の「Library」で Google Sheets API を探して「ENABLE」を押す。Google Drive API も同じように有効にする
- 「APIs & Services」の「OAuth consent screen」で「Get started」を押し、「App name」と「User support email」を入れる
- 「Audience」はGoogle Workspaceの社内だけで使うなら「Internal」を選ぶ
- 「Branding」の「Authorized domains」に n8n のドメイン(例: example.co.jp)を足して「Save」
- 「APIs & Services」の「Credentials」で「+ Create credentials」から「OAuth client ID」を選び、「Application type」を「Web application」にする
- n8nのCredential画面に出ている「OAuth Redirect URL」をコピーし、「Authorized redirect URIs」に貼って「Create」
- 表示された「Client ID」と「Client Secret」をn8nのCredential画面に貼る
- 「Sign in with Google」を押して許可し、「Save」を押す
手順4で「External」を選び、公開申請をしないまま「Testing」の状態で使うと、許可が7日で切れて毎週つなぎ直すことになります。Googleの説明では、7日の期限が付くのは「External」かつ「Testing」の場合です。Google Workspaceなら「Internal」を選べばこの条件から外れます。
行を足す設定をする
- 「Resource」は「Sheet Within Document」、「Operation」は「Append Row」になっていることを確かめる
- 「Document」は「From list」で「問い合わせ一覧」を選ぶ
- 「Sheet」は「From list」で「シート1」を選ぶ
- 「Mapping Column Mode」は「Map Each Column Manually」を選ぶ
- 見出しの7列が欄として並ぶので、次の表のとおり値を入れる
- ノード名を「問い合わせ一覧に追加」に変える
| 列 | 入れる値 |
|---|---|
| 受付日時 | {{ $now.toFormat('yyyy-MM-dd HH:mm') }} |
| 会社名 | {{ $json.company }}(INPUTからドラッグ) |
| お名前 | {{ $json.name }} |
| メールアドレス | {{ $json.email }} |
| 種類 | {{ $json.category }} |
| 内容 | {{ $json.message }} |
| 対応状況 | 未対応(固定値のまま) |
「Map Automatically」は項目名と見出しが同じ列を自動で埋めますが、今回は company と「会社名」で一致しないので使いません。
「Execute step」を押し、スプレッドシートに1行増えたら成功です。

Slackに知らせる
- 「問い合わせ一覧に追加」の右の + を押し、
slackで検索して「Slack」を選ぶ - 操作の一覧から「Send a message」を選ぶ
- 認証情報(Credential)の欄で「Create new credential」を選び、Slackにつなぐ(下に詳しく書きます)
- 「Send Message To」は「Channel」、「Channel」は「From list」で #問い合わせ を選ぶ
- 「Message Type」は「Simple Text Message」
- 「Message Text」に次の本文を入れる
- 「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アプリを作ります。
- n8nのCredential画面で認証方法を「OAuth2」にし、「OAuth Callback URL」をコピーする
- api.slack.com/apps で「Create New App」から「From scratch」を選び、名前(例: 問い合わせ通知)とワークスペースを決めて「Create App」
- 「OAuth & Permissions」の「Redirect URLs」で「Add New Redirect URL」を押し、コピーしたURLを貼って「Add」、「Save URLs」
- 同じ画面の「Bot Token Scopes」に
chat:writeとchannels:readを足す - 「Basic Information」の「App Credentials」にある「Client ID」と「Client Secret」をn8nに貼る
- Slack側で「Install to Workspace」を押して「Allow」(ワークスペースの管理者が押す)
- n8nに戻り、Credential画面の「Connect」を押して許可し、保存する
作ったSlackアプリは、#問い合わせ チャンネルのメンバーにしておきます。チャンネルで /invite @問い合わせ通知 と打てば入ります。メンバーでないチャンネルには送れず、エラーになります。

テスト実行で通しで確かめる
- キャンバス下の「Execute」を押す
- テスト用のフォームが開くので、テストの内容を入れて送信する
- 3つのノードに緑のチェックが付き、シートに1行増え、#問い合わせ に通知が来たことを確かめる
このとき使われているのは「Test URL」(テスト用のURL)です。テスト用のURLは、エディタで実行ボタンを押して待ち受けている間だけ有効で、届いたデータはそのままエディタに表示されます。

Publishして本番にする
- キャンバス右上の「Publish」を押す
- 「Publish workflow」の画面が出る。「Version name」には最初から名前が入っているので、「Describe changes (optional)」は空のまま「Publish」を押す
- 「問い合わせフォーム」を開き、「Production URL」(本番用のURL)をコピーする
- 別のブラウザ(またはシークレットウィンドウ)でそのURLを開き、送信してみる
2.0から、以前の「Activate」のスイッチは「Publish」「Unpublish」のボタンに変わりました。本番で動くのはPublishした版だけで、その後の編集は自動保存されても下書きのままです。直したら、もう一度Publishを押すまで本番には出ません。止めたいときは「Publish」の横の矢印から「Unpublish」を選びます。
本番の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 も含めて全部やり直します。一部の行だけシートに入っていたら二重になるので、確かめてから押します。元の実行と失敗したやり直しの両方から押すのも、作業が重なるので避けます。

ピン留めで、毎回フォームを送らずに試す
ノードを直すたびにフォームを送り直さずに済むのが「Pin data」(データのピン留め)です。
- 一度「Execute step」で問い合わせフォームを動かし、OUTPUTに値を出す
- OUTPUTの右上のピンのボタン「Pin data」を押す
- 「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_York | GENERIC_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」をオンにする |
次にやること
- n8nをセルフホストで導入する:Docker ComposeでVPSに立て、独自ドメインとHTTPSで使う
- n8nで外部サービスとつなぐ:Webhook・HTTP Request・API
- n8nでAIエージェントを作る:ChatGPT・Claude・Geminiをつなぐ
- n8nを止めずに運用する:アップデート・バックアップ・エラー通知・脆弱性