n8nとGoogle Sheetsを連携してデータ収集を全自動化する

「毎日同じデータをコピペしてスプレッドシートに貼り付けている」「フォームの回答を手動でまとめるのが面倒」――こういった繰り返し作業に疲れていませんか?
データ収集・整形・記録という一連の作業は、ビジネスの現場では欠かせない一方で、毎回人手をかけるには惜しいほど単純な処理です。しかし自動化しようとすると、「コードを書かなければいけないのでは?」と尻込みする方も多いのではないでしょうか。
そこで今回紹介するのが、ノーコード・ローコードのワークフロー自動化ツール n8n と Google Sheets の連携です。この組み合わせを使えば、外部APIやWebフォームから取得したデータをリアルタイムでスプレッドシートに記録する仕組みを、プログラミングの知識がなくても構築できます。
この記事では、n8nとGoogle Sheetsを連携する基本的な設定から、実務でよく使うワークフローパターン、さらに応用的なデータ加工テクニックまでを、実際の操作手順とともに丁寧に解説します。
n8nとGoogle Sheets連携の全体像
n8nとは?
n8nは、ドイツ発のオープンソースワークフロー自動化ツールです。400以上のサービスと連携でき、視覚的なフローエディタでノードをつなぐだけで自動化ワークフローを構築できます。
特徴的なのは セルフホスト可能 という点です。クラウド版(n8n.cloud)だけでなく、自社サーバーや手元のマシンで動かすことができるため、データを外部に出したくないビジネス用途にも向いています。
Google Sheets連携でできること
n8nのGoogle Sheetsノードを使うと、以下の操作をワークフロー内で自動化できます。
| 操作 | 内容 |
|---|---|
| Append Row(行追加) | 新しいデータを末尾に追加 |
| Read Rows(行読み取り) | シートからデータを取得 |
| Update Row(行更新) | 既存行の値を書き換え |
| Delete Row(行削除) | 指定した行を削除 |
| Get Sheet Names | シート名一覧を取得 |
これらを組み合わせることで、「外部APIのデータを毎朝9時にシートへ記録する」「Webhookで受け取ったフォーム回答を即座に追記する」といったワークフローが実現します。
事前準備:Google認証の設定
n8nからGoogle Sheetsを操作するには、OAuth 2.0認証 を設定する必要があります。Google側とn8n側の両方で作業が必要なため、順を追って説明します。
Google Cloud Consoleでの設定
① Google Cloud Consoleにアクセスする
Google Cloud Console にアクセスし、Googleアカウントでサインインします。
② プロジェクトを作成する
上部の「プロジェクトの選択」から「新しいプロジェクト」を選択し、任意の名前(例: n8n-automation)でプロジェクトを作成します。
③ Google Sheets API・Google Drive APIを有効化する
サイドメニューから「APIとサービス」→「ライブラリ」を開き、以下の2つのAPIを検索して有効化します。
Google Sheets APIGoogle Drive API
ポイント: Google Drive APIは、ファイルの一覧取得やスプレッドシートの検索機能に必要です。Sheetsだけ有効化してもn8nの一部機能が動作しないことがあるため、両方有効にしておきましょう。
④ OAuthクライアントIDを作成する
「APIとサービス」→「認証情報」→「認証情報を作成」→「OAuthクライアントID」と進みます。
- アプリケーションの種類: ウェブアプリケーション
- 承認済みのリダイレクトURI:
https://あなたのn8nドメイン/rest/oauth2-credential/callback- ローカル環境の場合:
http://localhost:5678/rest/oauth2-credential/callback
- ローカル環境の場合:
作成後に表示される クライアントID と クライアントシークレット をメモしておきます。
n8n側での認証設定
n8nの管理画面を開き、「Credentials」→「Add Credential」から「Google Sheets OAuth2 API」を選択します。
Client ID: (Google Cloud Consoleで取得したクライアントID)
Client Secret: (Google Cloud Consoleで取得したクライアントシークレット)
入力後「Connect my account」をクリックすると、Googleのアカウント選択画面にリダイレクトされます。使用するGoogleアカウントを選択して認証を完了させてください。
注意: 「このアプリはGoogleで確認されていません」という警告が表示される場合がありますが、自分で作成したOAuthアプリを自分で使う分には問題ありません。「詳細」→「(安全でない)サイトに移動」で進めてください。
基本ワークフロー①:スケジュール実行でAPIデータを自動記録
最初に構築するのは、毎日定刻に外部APIからデータを取得し、Google Sheetsに追記するワークフロー です。ここでは例として、無料で利用できる天気APIのデータを記録する構成を示しますが、考え方はどんなAPIにも応用できます。
ワークフロー構成
[Schedule Trigger] → [HTTP Request] → [Code(データ整形)] → [Google Sheets(Append Row)]
Step 1: Schedule Triggerノードの設定
n8nのフローエディタで「+」をクリックし、「Schedule Trigger」を追加します。
# Schedule Triggerの設定例(毎朝9時に実行)
Trigger Interval: Days
Days Between Triggers: 1
Trigger at Hour: 9
Trigger at Minute: 0
Step 2: HTTP Requestノードでデータ取得
次に「HTTP Request」ノードを追加し、データ取得先のAPIを設定します。
# HTTP Requestノードの設定例
Method: GET
URL: https://api.open-meteo.com/v1/forecast?latitude=35.6762&longitude=139.6503¤t_weather=true
Authentication: None(無料APIの場合)
Open-Meteo API は無料で使える気象APIです。東京(緯度35.67, 経度139.65)の現在の天気データをJSON形式で返してくれます。
Step 3: Codeノードでデータを整形
APIのレスポンスはそのままではシートに書き込みにくい場合があります。「Code」ノードを使ってデータを整形しましょう。
// Codeノード(JavaScriptモード)
const weather = $input.item.json.current_weather;
const now = new Date().toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' });
return [
{
json: {
timestamp: now,
temperature: weather.temperature,
windspeed: weather.windspeed,
weathercode: weather.weathercode,
is_day: weather.is_day === 1 ? '昼' : '夜'
}
}
];
Step 4: Google Sheetsノードで行追加
「Google Sheets」ノードを追加し、以下のように設定します。
# Google Sheetsノードの設定
Credential: (先ほど設定したGoogle認証情報)
Resource: Sheet Within Document
Operation: Append Row
Document ID: (スプレッドシートのURLからIDをコピー)
Sheet Name: Sheet1
Columns:
- timestamp → timestamp
- temperature → temperature
- windspeed → windspeed
- weathercode → weathercode
- is_day → is_day
Document IDの確認方法: Google SheetsのURLは
https://docs.google.com/spreadsheets/d/【ここがID】/editという形式です。/d/と/editの間の文字列がIDです。
このワークフローを保存してアクティブにすれば、毎朝9時に自動でデータが追記されます。
基本ワークフロー②:Webhookでフォーム回答をリアルタイム記録
次は Webフォームからの回答をリアルタイムでスプレッドシートに記録する ワークフローです。社内の問い合わせフォームやアンケートフォームなど、多くの場面で活用できます。
ワークフロー構成
[Webhook Trigger] → [Code(バリデーション・整形)] → [Google Sheets(Append Row)] → [Webhook Response]
Step 1: Webhookノードの設定
「Webhook」ノードを追加します。
# Webhookノードの設定
HTTP Method: POST
Path: form-submissions
Response Mode: Last Node
Response Content-Type: JSON
設定後に表示されるWebhook URLをコピーしておきます。形式は以下のようになります。
https://あなたのn8nドメイン/webhook/form-submissions
このURLをHTMLフォームの action 属性や、TypeformなどのフォームツールのWebhook設定先として指定します。
Step 2: Codeノードでバリデーション
受け取ったデータのチェックと整形を行います。
// フォームデータのバリデーションと整形
const body = $input.item.json.body;
// 必須フィールドの確認
if (!body.name || !body.email) {
throw new Error('名前またはメールアドレスが未入力です');
}
// メールアドレスの簡易バリデーション
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(body.email)) {
throw new Error('メールアドレスの形式が正しくありません');
}
// 記録用データを整形
const jstNow = new Date().toLocaleString('ja-JP', {
timeZone: 'Asia/Tokyo',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
});
return [
{
json: {
受付日時: jstNow,
氏名: body.name.trim(),
メールアドレス: body.email.trim().toLowerCase(),
お問い合わせ内容: body.message || '(内容なし)',
ステータス: '未対応'
}
}
];
Step 3: Google Sheetsに追記
Codeノードの出力をGoogle Sheetsに記録します。シートのヘッダー行にあらかじめ「受付日時」「氏名」「メールアドレス」「お問い合わせ内容」「ステータス」と記入しておき、ノードの「Column Matching」で対応付けを行います。
Step 4: Webhook Responseノードで応答を返す
最後に「Respond to Webhook」ノードを追加して、フォーム送信者にレスポンスを返します。
# Respond to Webhookノードの設定
Response Code: 200
Response Body: {"status": "success", "message": "お問い合わせを受け付けました"}
応用テクニック:シート上の既存データと照合して重複を防ぐ
実務でよくある課題が「同じデータが二重に記録されてしまう」問題です。例えばAPIポーリングで同じIDのデータが複数回取れてしまう場合など。n8nでは「Read Rows → If判定 → 条件付きAppend」というパターンでこれを解決できます。
重複チェックワークフローの構成
[Trigger] → [HTTP Request(データ取得)] → [Google Sheets(Read Rows)]
→ [Code(重複チェック)] → [IF] → [Google Sheets(Append Row)]
↘ [NoOp(何もしない)]
Codeノードでの重複チェックロジック
// 取得した新データ
const newItem = $('HTTP Request').item.json;
const newId = newItem.id;
// シートの既存データ(全行)
const existingRows = $('Google Sheets').all();
const existingIds = existingRows.map(row => row.json.id);
// 重複判定
const isDuplicate = existingIds.includes(String(newId));
return [
{
json: {
...newItem,
isDuplicate: isDuplicate
}
}
];
続くIFノードで isDuplicate が false の場合だけ「Append Row」に流れるよう条件を設定します。
# IFノードの条件設定
Condition: Boolean
Value 1: {{ $json.isDuplicate }}
Operation: Equal
Value 2: false
これで、シートにまだ存在しないデータのみ追記される仕組みが完成します。
よくあるトラブルと対処法
認証エラー(401 Unauthorized)
OAuth認証のトークンが期限切れになっている場合があります。n8nのCredentials画面から対象のGoogle認証情報を開き、「Reconnect」ボタンで再認証してください。
また、Google Cloud ConsoleのOAuthクライアント設定で「リダイレクトURI」が正しく設定されているかも確認しましょう。本番環境とローカル環境で異なるURIが必要な場合は複数登録できます。
書き込んだデータが文字化けする
日本語を含むデータを書き込む際に文字化けが発生する場合は、Codeノード内で文字列を明示的にStringにキャストするか、スプレッドシート側の書式設定を「プレーンテキスト」に変更してみてください。
レート制限エラー(429 Too Many Requests)
Google Sheets APIには利用クォータがあります。1分あたりの読み書きリクエスト数に上限があるため、大量データを一度に書き込む場合は「Split In Batches」ノードを使って小分けにし、各バッチ間に「Wait」ノードで数秒の待機を入れる構成にしましょう。
# Split In Batchesノードの設定例
Batch Size: 50 # 一度に処理する行数
# Waitノードの設定例
Wait Amount: 2
Wait Unit: Seconds
Webhookが届かない
ローカル環境でn8nを動かしている場合、外部からWebhookを受け取るには公開URLが必要です。開発・テスト用途であれば ngrok などのトンネリングツールを使ってローカルポートを外部公開する方法が手軽です。
# ngrokでn8nのポート(5678)を公開する例
ngrok http 5678
表示された https://xxxx.ngrok.io のURLをWebhookのベースURLとして使用します。
実務でのベストプラクティス
1. エラーハンドリングを必ず実装する
n8nにはノードレベルの「Error Workflow」機能があります。ワークフロー設定画面の「Error Workflow」に専用のエラー通知ワークフローを指定しておくことで、失敗時にSlackやメールで通知を受け取れます。本番運用では必ず設定しましょう。
2. スプレッドシートの構造を事前に設計する
自動記録するシートは、最初から列ヘッダーを定義しておくことが重要です。n8nのGoogle Sheetsノードはヘッダーをキーとしてデータをマッピングするため、ヘッダーが変わるとワークフローが壊れます。運用開始後にヘッダーを追加する場合は、ノード側のマッピング設定も忘れずに更新しましょう。
3. 環境変数でシートIDを管理する
ワークフロー内にスプレッドシートIDをハードコードすると、本番/ステージング環境の切り替えが大変になります。n8nの環境変数機能(n8n_variables)またはシークレット機能を使って外部化しておくと管理が楽になります。
# n8nを起動する際の環境変数設定例(docker-compose.yml)
environment:
- N8N_CUSTOM_VARIABLES_JSON={"SHEET_ID_PROD":"本番シートのID","SHEET_ID_STAGING":"検証シートのID"}
ワークフロー内では {{ $vars.SHEET_ID_PROD }} のように参照できます。
まとめ:n8n × Google Sheetsで「データ収集の自動化」を今日から始めよう
この記事では、n8nとGoogle Sheetsを連携してデータ収集を自動化する方法を解説しました。要点を振り返ります。
- Google Cloud ConsoleでOAuth認証を設定し、n8nにCredentialを登録することが出発点
- スケジュール実行 + HTTP Requestの組み合わせで、APIデータの定期収集が実現できる
- Webhook Triggerを使えば、フォーム回答などのリアルタイムデータもシートに即記録できる
- Codeノードでデータ整形・バリデーション・重複チェックなどの高度な処理も組み込める
- エラーハンドリングや環境変数管理を徹底することで、本番運用に耐えるワークフローになる
「今日から始める」という方には、まず スケジュール実行でAPIデータを記録するワークフロー から試してみることをおすすめします。無料のOpen-Meteo APIを使えばアカウント登録なしで動作確認でき、ワークフローの全体的な流れを素早く体験できます。
一度仕組みを理解してしまえば、社内データの定期収集、競合サイトの情報モニタリング、売上データの自動集計など、あらゆるデータ収集業務に応用が効きます。ぜひ業務の「毎日のコピペ作業」をn8nで解放してみてください。


