目次
n8n Google Sheets 入門:データの自動読み取り・追加・更新
Google Sheets は、申し込みリスト、注文、在庫、顧客リストなどに使われる、最も一般的な「軽量データベース」です。n8n を使うと、スプレッドシートの読み取り、書き込み、更新を自動化し、新しいデータが追加されたときにワークフローを起動できます。
準備:認証
- n8n Cloud:Google Sheets の認証情報を作成するときに Google にログインするだけです。
- セルフホスト:事前に Google Cloud で OAuth クライアントを作成し、Google Sheets API を有効にする必要があります。詳しい手順は認証情報の管理を参照してください。
スプレッドシートの形式
n8n は1 行目を列名として扱い、2 行目以降をデータ(1 つの item)として扱います。
| 名前 | セッション | ステータス | |
|---|---|---|---|
| 王小明 | ming@example.com | 10/20 台北 | 確認済み |
| 李小華 | hua@example.com | 10/27 台中 | 未確認 |
読み取り後、各行は次のようになります。
{ "row_number": 2, "名前": "王小明", "Email": "ming@example.com", "セッション": "10/20 台北", "ステータス": "確認済み" }
列名は短く、重複しないものにしてください。セルの結合は避けてください。
よく使う操作
Google Sheets ノードで次の操作を選択します。
| 操作 | 説明 |
|---|---|
| Get Row(s) | 行を読み取ります。条件(例:ステータス = 未確認)で絞り込めます。 |
| Append Row | 最後に行を追加します。 |
| Update Row | 列の値で該当する行を探し、更新します。 |
| Append or Update Row | 該当する行があれば更新し、なければ追加します(最もよく使われます)。 |
| Delete Rows | 行を削除します。 |
| Clear | シートを空にします。 |
| Create | 新しいスプレッドシートまたはシートを作成します。 |
スプレッドシートとシートを選ぶときは、リストから選択するか、スプレッドシートの URL を貼り付けます。
列のマッピング
追加または更新するとき、Mapping Column Mode には 2 つの方法があります。
- Map Each Column Manually:各列に式を個別に入力します。たとえば「名前」には
{{ $json.name }}を入力します。 - Map Automatically:入力データの列名とスプレッドシートの列名が同じ場合、自動で対応付けます。
更新時に照合する列
Update / Append or Update では Column to match on を指定します。たとえば「Email」列で照合します。値が重複しない列を選んでください。
新しいデータの監視:Google Sheets Trigger
Google Sheets Trigger はスプレッドシートを定期的に確認し、行が追加されたときまたは行が変更されたときに起動します。「誰かがシートに注文を追加したら、自動で処理する」といった用途に適しています。
ポーリング方式(たとえば毎分確認)で動作するため、リアルタイムではありません。
完全な例:イベント申し込みの自動化
要件:ユーザーが申し込みフォームに入力 → スプレッドシートに書き込む → 確認メールを送る → 管理者に通知する。
[Form Trigger] ─▶ [Google Sheets:Append or Update] ─▶ [Send Email:確認メール] ─▶ [Telegram:管理者への通知]
1. Form Trigger
n8n の組み込みフォームを使うため、Google フォームは必要ありません。
- Form Title:
講座申し込み - フィールド:
- 名前(Text、必須)
- Email(Email、必須)
- セッション(Dropdown:10/20 台北、10/27 台中)
公開するとフォームの URL が発行され、そのまま共有できます。
2. スプレッドシートへの書き込み
Google Sheets ノードで Append or Update Row を選択します。
- Column to match on:
Email - 名前:
{{ $json['姓名'] }} - Email:
{{ $json.Email }} - セッション:
{{ $json['場次'] }} - ステータス:
申し込み済み - 申し込み日時:
{{ $now.toFormat('yyyy-MM-dd HH:mm') }}
Email で照合するため、同じ人が重複して申し込んでも、データが更新され、重複行は追加されません。
3. 確認メールの送信
Send Email または Gmail ノードを使います。
{{ $('Form Trigger').item.json['姓名'] }} 様
「{{ $('Form Trigger').item.json['場次'] }}」の講座にお申し込みいただき、ありがとうございます。
お申し込みを受け付けました。イベントの前日に、リマインダーをお送りします。
直前のノードは Google Sheets なので、$('Form Trigger') を使ってフォームの元データを読み取ります。
4. 管理者への通知
Telegram または Slack ノードを接続し、「新規申し込み:名前 / セッション」を送信します。
応用:毎日申し込み状況をメールで送信
[Schedule 毎日 18:00] ─▶ [Google Sheets:Get Rows] ─▶ [Summarize:セッションごとに集計] ─▶ [Send Email]
Summarize ノードで、Fields to Split By に「セッション」を選び、Aggregation に Count を選択すると、各セッションの申し込み人数を取得できます。
よくある質問
データ量が多いと遅くなったり、エラーになったりする
Google Sheets API にはレート制限があります。大量に書き込む場合は、次の方法を試してください。
- 1 行ずつ呼び出すのではなく、複数行をまとめて書き込む
- Loop Over Items で分割し、間に Wait を入れる
数万件を超える場合は、PostgreSQL や MySQL などのデータベース、または n8n 組み込みの Data Tables(バージョンによって利用可能)への移行をおすすめします。
読み取った数値が文字列になる
読み取り結果はスプレッドシートのセル形式に影響されます。比較や計算の前に Number() で変換してください。
列が見つからない
1 行目が列名になっていることと、列名の前後に余分な空白がないことを確認してください。列名を変更した場合は、ノードで列を再読み込みする必要があります。
更新日 2026年10月12日