Nexeed Lab

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

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

「毎日同じデータをコピペしてスプレッドシートに貼り付けている」「フォームの回答を手動でまとめるのが面倒」――こういった繰り返し作業に疲れていませんか?

データ収集・整形・記録という一連の作業は、ビジネスの現場では欠かせない一方で、毎回人手をかけるには惜しいほど単純な処理です。しかし自動化しようとすると、「コードを書かなければいけないのでは?」と尻込みする方も多いのではないでしょうか。

そこで今回紹介するのが、ノーコード・ローコードのワークフロー自動化ツール n8nGoogle 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 API
  • Google 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&current_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ノードで isDuplicatefalse の場合だけ「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で解放してみてください。


参考資料

この記事をシェア

XFacebookはてブ