こんにちは、中都です。
BigQueryに売上やアクセスのデータは入っている。でも、数字を知りたいだけなのに、そのたびにSQLを書くところから始まってしまう。僕がChatGPTとBigQueryをつないでみたかったのは、その手間を減らして「先月の売上は?」「次に何を調べる?」と会話で分析を進めたかったからです。
実際に試すと、ChatGPTが列名のエラーを調べ直し、月別売上を表にしてくれました。一方、グラフが表示されなかったり、確認を何度も押したりする場面もありました。接続方法と、使って初めて分かった手応えを、実演画像と一緒に紹介します。
動画でも解説しています
SQLの依頼待ちを減らし、自分で売上の変化を調べたい方へ
数字を一度出してもらうだけでは、分析は終わらない
「2025年の売上を月別に見たい」。表が出てきたら、今度は「落ち込んだ月は、注文数と単価のどちらが変わった?」と知りたくなります。質問のたびに集計を依頼したり、SQLを一から書いたりしていると、気になったことをその場で確かめにくいですよね。
ChatGPTからBigQueryを参照できれば、データの場所を伝え、自然な言葉で集計を頼めます。自分でSQLを書き始める前に、知りたいことを言葉にして、必要な表と集計方法をAIに相談できるのが、この連携の便益です。ただし、AIが選んだ列や集計条件が、自社の売上の定義と合うかは確認します。
この記事でできるようになること
- 接続方法を選ぶ:現在のBigQueryプラグインと、既存GPTのアクション設定を区別する。
- 接続を確かめる:Google認証、権限、プロジェクト・リージョンを確認し、自分のデータの取得まで進める。
- 分析結果を読む:月別売上の実演から、エラーの直し方、数字の照合、グラフ化で確認する点を学ぶ。
本編の実演は、クラフトビールECを想定したデモデータです。自社の売上実績ではありません。BigQueryに分析したいデータがあり、Google Cloudの設定権限を持つ方、または管理者に設定を依頼できる方を対象にしています。
最初に確認:現在の接続方法と、動画のGPTs設定は異なります
現在、新規に接続するなら、まずOpenAI公式のBigQueryプラグインの利用可否を確認してください。動画で実演したのは、GPTsの「アクション」にAPIの設定を登録する方法です。ここを同じものとして進めると、設定項目が見つからなくなります。
OpenAIの現行案内では、Free・Go・Plus・Proの個人アカウントは新しいGPTを作成できません。既存GPTの編集や、Business・Enterprise・Eduでの作成は、プランと組織の権限に依存します。GPTからプラグインへの移行も案内されています。動画の「ChatGPTに課金していれば試せる」という条件は、そのまま現在に当てはめないでください。GPTの作成・編集に関する公式案内
これから始める場合:BigQueryプラグインを確認する
- OpenAI公式のBigQueryプラグインを開き、「Install plugin」からChatGPTへ進みます。ChatGPT内の「Plugins」から探す方法もあります。
- 利用するアカウント・ワークスペースを確認して追加し、求められた接続手順に従ってGoogleアカウントを認証します。組織で制限されている場合は、管理者に利用可否を確認します。
- 新しい会話でBigQueryを指定し、まずプロジェクトIDと対象のデータセットを伝えます。下の質問例で、参照先と列名を確認します。
- 返ってきたプロジェクト・データセット・テーブルが自分の対象と合っていることを、BigQueryの画面と照合します。接続の表示だけで終えず、読み取り結果まで確認してください。
BigQueryのプロジェクト「自分のプロジェクトID」について、
売上分析に使えるデータセットとテーブルを確認してください。
売上金額と購入日時に使う列、その型、データの期間を教えてください。
データの変更は行わず、読み取った事実と推測を分けてください。
利用できる環境や機能はプラン・組織設定によって変わります。インストールや権限設定の共通操作は、プラグインの公式ガイドを参照してください。このあと掲載する画像は、動画で試したGPTsアクション方式の画面です。
GPTsアクション方式を設定する前に、準備するもの
ここからは、既存GPTの設定を見直す方、またはGPTを作成できる組織環境の方向けです。手順は「Google Cloudの準備→OAuth認証→GPTの設定→最初の取得」の順に進みます。
- Google Cloud:対象のプロジェクトID、データセット名、テーブル名、データセットのロケーション。
- Googleアカウント:そのデータを閲覧でき、クエリを実行できるアカウント。認証の設定をする人と、分析に使う人は区別します。
- ChatGPT:既存GPTを編集できる環境、またはGPT作成が許可された組織環境。
- 費用:ChatGPT側の契約に加え、BigQueryの保存・クエリ処理の費用を確認します。「接続できる」ことと「分析がすべて無料」であることは別です。
BigQueryの処理量と料金は公式料金ページで確認できます。最初は期間と集計項目を絞り、元の画面と照合できる小さな集計から始めましょう。
手順1.BigQuery APIと、分析する人の権限を確認する
Google Cloudコンソールを開き、上部のプロジェクト選択から対象を選びます。プロジェクトの表示名だけでなく、プロジェクトIDを控えてください。
上部の検索で「BigQuery API」を探し、詳細画面を開きます。「有効にする」が表示されている場合だけ有効化します。「管理」など、有効な状態の表示があれば次へ進めます。
続いて、左のメニューから「IAMと管理」→「IAM」を開き、分析に使うGoogleアカウントの権限を確認します。追加が必要なら管理者に依頼します。クエリを実行するプロジェクトではBigQuery ジョブユーザー、読み取るデータセットではBigQuery データ閲覧者など、目的に合った権限を設定します。設定後、対象アカウントと適用範囲が一覧に表示されれば確認できます。BigQueryのIAM権限
動画ではMCPの有効化も行っていますが、GPTsアクションのAPI設定と、https://bigquery.googleapis.com/mcpへ接続するリモートMCPは別の方式です。Google公式の現行MCP手順でも、BigQuery APIを有効にするとMCPが有効になります。古いターミナル操作を一律に追加する必要はありません。BigQuery MCPの公式手順
手順2.Google Auth PlatformでOAuthの利用者を設定する
Google Cloudコンソールの「すべてのプロダクト」→「Google Auth Platform」を開きます。初回は「開始」からアプリ名・サポートメール・連絡先を登録します。設定済みなら、既存のアプリ情報を確認してください。
僕は、どの環境の設定か分かるようにアプリ名へプロジェクトIDを入れていました。複数の環境がある場合は、見ただけで区別できる名前にしておくと扱いやすいです。
「対象」とテストユーザー
「対象」を開き、組織内で使うのか、組織外のアカウントも使うのかを確認します。「内部」は対応するGoogle Workspace等の組織内向けです。個人アカウントなどで試す場合は「外部・テスト中」とし、テストユーザーの追加で、あとからGoogle認証に使うメールアドレスを登録・保存します。
ここで指定するのは、BigQueryへアクセスするGoogleアカウントです。ChatGPTのログインメールと必ず同じである必要はありません。保存後、対象のアドレスがテストユーザー一覧にあることを確認してください。
「データアクセス」でスコープを確認する
「データアクセス」→「スコープを追加または削除」を開きます。後述の設定例では、読み取り用のhttps://www.googleapis.com/auth/bigquery.readonlyを使います。該当スコープを選択し、「更新」したあと、データアクセス画面でも保存します。
Googleのスコープは、同意画面で許可する範囲です。IAMは、そのアカウントが実際に操作できるデータと処理を決めます。片方だけ整っていても取得できないことがあります。外部・テスト中のアプリでは認可が期限切れになる場合があり、継続利用では公開状態や組織の方針も確認してください。Google OAuthの公式説明
手順3.OAuthクライアントとGPTのアクションを設定する
Google側でクライアントを作る
Google Auth Platformの「クライアント」→「クライアントを作成」を開き、種類は「ウェブ アプリケーション」を選びます。用途が分かる名前を付けて作成し、クライアントIDとクライアントシークレットを保管します。シークレットを記事、共有メモ、GPTの指示欄へ貼らないでください。入力するのは、次に説明する認証設定の専用欄です。
リダイレクトURIはGoogleから認証結果を戻す先です。この段階で自分のGPTの値がなければ、作成後にクライアントを編集して追加します。動画では仮の値を入れてから置き換えていましたが、最後に自分のGPTの値と一致させることが大切です。
GPTの指示と、アクションを登録する
ChatGPTのGPT一覧で既存GPTの編集画面を開きます。作成できる組織環境なら「作成」から進めます。構成画面で名前・説明を入力し、指示には対象のプロジェクトと分析のルールを書きます。
指定したBigQueryプロジェクトの分析を手伝ってください。
プロジェクトID:自分のプロジェクトID
対象データセット:自分のデータセット名
ロケーション:自分のデータセットのロケーション
最初にテーブルと列名・型を確認し、存在しない列は推測で使わないでください。
売上の定義、期間、タイムゾーンが不明なら確認してください。
データ変更を行わず、SELECTによる集計を使ってください。
クエリの見積もり処理量を確認し、合意した上限内で実行してください。
結果とともに、参照テーブル、SQL、集計期間、取得範囲を示してください。
この指示は、実演でつまずいた列名とリージョンを踏まえた質問の補足例です。指示文だけで権限を制限できるわけではないので、Google側のIAMも合わせます。
「アクション」→「新しいアクションを作成する」を開き、「スキーマ」へAPIの定義を貼り付けます。以下は、この記事用にBigQuery REST APIをもとに用意した設定例です。動画の配布コードとは区別して使ってください。
アクション設定例の全文を開く(コピー用)
openapi: 3.1.0
info:
title: BigQuery analysis example
version: 1.0.0
servers:
- url: https://bigquery.googleapis.com/bigquery/v2
paths:
/projects/{projectId}/queries:
post:
operationId: runQuery
description: Run a read-only GoogleSQL query. Inspect the schema first and use the dataset location. First estimate processing with dryRun. Do not issue writes or DDL.
x-openai-isConsequential: true
parameters:
- name: projectId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [query, location, useLegacySql, maximumBytesBilled, maxResults]
properties:
query:
type: string
location:
type: string
description: Actual BigQuery dataset location, for example asia-northeast1 or US.
useLegacySql:
type: boolean
enum: [false]
dryRun:
type: boolean
description: true estimates processing without running the query.
maximumBytesBilled:
type: string
description: Per-query billing limit in bytes, agreed with the user.
maxResults:
type: integer
minimum: 1
maximum: 1000
timeoutMs:
type: integer
minimum: 0
maximum: 10000
responses:
'200':
description: Query metadata, schema and the first page of results. If jobComplete is false or pageToken exists, use getQueryResults.
content:
application/json:
schema:
type: object
properties:
jobComplete:
type: boolean
jobReference:
type: object
properties:
projectId: {type: string}
jobId: {type: string}
location: {type: string}
schema:
type: object
properties:
fields:
type: array
items:
type: object
properties:
name: {type: string}
type: {type: string}
mode: {type: string}
rows:
type: array
items:
type: object
properties:
f:
type: array
items:
type: object
properties:
v: {}
totalRows: {type: string}
pageToken: {type: string}
totalBytesProcessed: {type: string}
errors:
type: array
items:
type: object
properties:
reason: {type: string}
message: {type: string}
/projects/{projectId}/queries/{jobId}:
get:
operationId: getQueryResults
description: Retrieve the completed query result or the next page. Keep the original location and follow pageToken until absent.
parameters:
- {name: projectId, in: path, required: true, schema: {type: string}}
- {name: jobId, in: path, required: true, schema: {type: string}}
- {name: location, in: query, required: true, schema: {type: string}}
- {name: pageToken, in: query, schema: {type: string}}
- {name: maxResults, in: query, required: true, schema: {type: integer, minimum: 1, maximum: 1000}}
responses:
'200':
description: Query result page, schema, jobComplete, totalRows and optional pageToken.
content:
application/json:
schema:
type: object
properties:
jobComplete: {type: boolean}
totalRows: {type: string}
pageToken: {type: string}
schema:
type: object
properties:
fields:
type: array
items:
type: object
properties:
name: {type: string}
type: {type: string}
mode: {type: string}
rows:
type: array
items:
type: object
properties:
f:
type: array
items:
type: object
properties:
v: {}
errors:
type: array
items:
type: object
properties:
reason: {type: string}
message: {type: string}
security:
- googleOAuth: [https://www.googleapis.com/auth/bigquery.readonly]
components:
schemas: {}
securitySchemes:
googleOAuth:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://accounts.google.com/o/oauth2/v2/auth
tokenUrl: https://oauth2.googleapis.com/token
scopes:
https://www.googleapis.com/auth/bigquery.readonly: Read BigQuery data
上の定義を先頭から末尾までコピーすると、SQLを実行するrunQueryと、結果の続きを取得するgetQueryResultsを登録できます。スキーマのエラーがないことと、アクション名が表示されることを確認します。接続後は小さな集計で試してください。
設定例では1回の応答を最大1,000行とし、続きを取得するための項目も含めています。返ってきた最初の表を、そのまま全件の結果と思い込まないでください。処理が完了しているか、続きがあるかを確認します。また、課金対象の処理量上限を指定するようにしています。上限を超えるクエリは失敗するため、エラーを0件の結果と読み替えないでください。クエリ実行の公式仕様/結果取得の公式仕様
OAuthを選び、認証情報を入力する
アクションの「認証」の設定を開き、「OAuth」を選びます。次の値を入力して保存します。
| 項目 | 入力する値 |
|---|---|
| クライアントID | 自分が作成したOAuthクライアントのID |
| クライアントシークレット | 同じOAuthクライアントのシークレット |
| 認証URL | https://accounts.google.com/o/oauth2/v2/auth |
| トークンURL | https://oauth2.googleapis.com/token |
| スコープ | https://www.googleapis.com/auth/bigquery.readonly |
| トークン交換メソッド | デフォルトのPOSTリクエスト |
保存後にGPTの設定へ戻り、表示された「コールバックURL」をコピーします。Google Auth Platformで先ほどのクライアントを開き、「承認済みのリダイレクトURI」へ追加して保存してください。GPTごとに値が異なるため、例示URLや別のGPTのURLでは認証できません。GPT ActionsのOAuth設定
最後にGPT側の設定を保存します。個人の検証であれば、共有対象を「自分だけ」にしてから確定します。組織環境では、その環境の共有ポリシーに従ってください。
僕が試したときは、ここまでの準備に手間がかかりました。Claudeの接続と比べると、My GPTsを作ってアクションや認証を入れる部分は、正直「若干面倒くさいですね」と感じたところです。現在これから始める方に、最初にプラグインの利用可否を確認してほしいのも、この設定の違いがあるためです。
手順4.Google認証を済ませ、データを取得する
保存したGPTを開き、自分のプロジェクトIDと対象のリージョンを伝えます。最初の呼び出しでGoogleへのサインインが表示されたら、先ほどテストユーザーとIAMに設定したGoogleアカウントを選び、表示されたアクセス内容を確認して認証します。
データセットのロケーションは、BigQueryで対象データセットを開いた詳細から確認できます。東京ならasia-northeast1ですが、すべてのデータが東京にあるわけではありません。表示された値を使います。
プロジェクト「自分のプロジェクトID」、ロケーション「実際のロケーション」で、
閲覧できるデータセットを確認してください。
対象のデータセットは「自分のデータセット名」です。
続いて、その中のテーブル名と列名・型を確認してください。
僕もここで「リージョンを設定する必要があるのか」と気づきました。GPTの指示へ最初から対象の場所を書いておけば、会話の途中で伝え直すことを減らせます。接続先の名前だけでなく、データの場所と期間まで渡すと、最初の行き違いを減らせます。
月別売上を聞くと、列名のエラーを調べ直してくれた
次に、クラフトビールECを想定したデータで「2025年の売上を月ごとに出して」と頼みました。ここで一度、存在しないorder_dateという列を使ってエラーになりました。
すると、ChatGPTが自分でテーブルの列構成を取りに行き、購入日時を表すdate_timeを見つけて、集計を進め直したんです。ここは「おお、すごい」と思いました。単にSQLを書いて終わるだけでなく、返ってきたエラーをもとに、次に調べるものを変えていました。
ただし、回答中には「売上金額は割引後の最終金額と思われます」という推測もありました。列名を見つけられたことと、その数字が自社の売上定義に合っていることは、別に確認します。税込・税抜、返品、キャンセル、割引の扱いを伝えてから、仕事の判断に使いましょう。
自分のデータで試すなら、たとえば次のように条件を添えて聞けます。
対象は「自分のプロジェクトID.データセット名.テーブル名」です。
2026年1月1日から8月31日までの売上を、月別に集計してください。
購入日時と売上金額に使う列を、先に確認してください。
月の区切りは日本時間です。返品・キャンセル・割引の扱いが分からなければ質問してください。
実行するSQLと見積もり処理量を示し、確認後に実行してください。
結果は月・売上金額の表にし、元データと照合できる条件を添えてください。
SQLが初めから完全でなくても、調べ直して先へ進めるのは頼もしいです。その一方で、AIが補った業務上の意味まで正しいとは限らない。この両方を押さえて使うのがよいと思います。
売上の変化からGA4や検索流入まで調べたい場合は、Synapse MCPで普段のツールをAIにつなぐ方法も、この記事の末尾で紹介しています。
グラフ化で止まったこと、Claudeと比べて感じた違い
表が出たので、続いて「これをグラフで出して」と頼みました。ところが、この実演ではコードは出たものの、期待したグラフが表示されませんでした。
もう一つ気になったのが、処理のたびに出る確認でした。僕が比較した環境では、Claudeは続けて複数のSQLを書き、分析を進めてくれる印象がありました。ChatGPTではその都度確認を押す場面があり、「分析を任せている間に自分は別の作業をする」という使い方には、ストレスの違いを感じました。
なので、当時の僕の正直な感想は「本格的な分析ならClaudeも検討してほしい」です。ただし、これは2026年2月公開の実演で使ったモデル・接続方式に対する感想です。現在の全モデルを同じ条件で比較した評価ではありません。確認の出方もアクションの設定や組織の方針で変わります。
AIを選ぶときは、接続できたかだけでなく、必要な分析が終わるまでの手間と、結果を確かめやすいかを見てください。同じ小さな集計を試すと、自分の仕事での違いが分かりやすくなります。Claude側の接続は、Web版ClaudeとBigQueryのMCP接続手順にまとめています。
接続・分析で止まったときの確認箇所
| 止まった場面 | 確認すること |
|---|---|
| GPTの「作成」がない | 個人アカウントの新規作成制限、組織の権限。現在のBigQueryプラグインを確認する。 |
| Google認証で止まる | 実際に使うGoogleアカウントがテストユーザーに登録されているか。内部・外部の対象が合うか。 |
| redirect_uri_mismatchが出る | そのGPTのコールバックURLが、Google側の承認済みリダイレクトURIと完全に一致するか。 |
| 認証できたのに取得できない | 認証したアカウントのIAM、対象プロジェクト・データセット、クエリ実行権限。 |
| テーブルが見つからない | プロジェクト・データセット・テーブル名と、データセットのロケーション。 |
| 列名のエラー | テーブルの実際の列名と型を取得してから、SQLを作り直す。 |
| 表は出たがグラフがない | 表の取得結果と、グラフ用コードの実行エラーを分けて確認する。再取得を繰り返す前に、取得済みの表を使う。 |
まとめ:つないだ次に、何を判断するためのデータかを決める
ChatGPTとBigQueryをつなぐと、自然な言葉からデータを調べ、集計まで進められます。僕の実演でも、列名のエラーを調べ直して月別売上を出すところまで進みました。一方、グラフ出力と確認の手間には課題が残りました。
僕が伝えたいのは、データを連携すること自体が目的ではない、ということです。BigQueryにつないでも、分析したいデータが入っていなければ始まりません。これからは、社内のデータを集め、数字の意味をそろえて、AIが判断材料に使えるようにすることに、ますます価値が出てくると考えています。
まずは、元の数字と照合できる月別売上などを一つ選び、自分の環境で取得してください。データを蓄積する段階なら、BigQueryの接続ガイドや、BigQueryとスプレッドシートの連携・自動更新も参考になります。普段のGA4や売上表を入口に始めたい方は、次の方法も使えます。
Synapse MCPで、普段使っているツールのデータをAIに聞く
売上の変化を見たあと、「サイトへの流入は変わった?」「検索から来る人は減っていない?」と調べたくなることがあります。こうした分析を始める入口が、普段使っているGA4やSearch Console、Googleスプレッドシートのデータです。
Synapse MCPは、これらのツールのデータをAIから参照できるようにするサービスです。CSVを出力して貼り付ける作業を減らし、取得した数字をもとに次の質問へ進めます。BigQueryへの直接接続は本編の方法を使い、ここではGA4・Search Consoleの別の実演で、その使い方を紹介します。
1.使うデータを接続して、対象を確かめる
Synapse MCPで分析する店舗・案件を開き、GA4を追加します。Google認証を済ませ、対象のプロパティを選びます。検索流入も調べる場合は、同じサイトのSearch Consoleを追加します。
AIへの接続設定でMCPリンクを発行し、ChatGPTまたはClaudeへ登録・認証します。画面ごとの操作はGA4のMCP接続ガイド、検索データの準備はSearch Consoleの接続ガイドで説明しています。
2.表で数字を確かめ、グラフで変化を見る
接続後は、いつもAIに質問するように、対象サイトと期間を伝えます。関連記事の実演では、Search Consoleのクリック数・表示回数などを、Claudeが会話の中へ表として返しています。
続いてGA4の数字をグラフにすると、アクセスが増えた日・減った日を見つけやすくなります。
表が返り、その数字を会話でグラフへ進められる。この別の実演を紹介した記事で、僕は「控えめに言って便利でしかないです」と書きました。集計表を受け取って終わらず、気になった変化の次に何を調べるかまで、その場でAIと相談できます。
自分のデータで試すなら、まずは次のように期間をそろえて聞いてください。「自分のサイト名」は接続したサイトへ置き換えます。
接続したGA4の「自分のサイト名」について、プロパティ名とIDを確認してください。
2026年9月14日〜20日と、9月7日〜13日のセッション数を日別に取得してください。
各7日間の合計と増減数を表にし、変化の大きい日を示してください。
続けてグラフにしてください。原因は断定せず、次に調べる流入元やページを提案してください。
同じサイトのSearch Consoleも接続したら、「同じ日付で、クリック数と表示回数も日別に出して」と続けられます。GA4のセッション数とSearch Consoleのクリック数は別の指標なので、数値を足し合わせず、それぞれの変化を見ます。質問例は、そのまま試せるように追加したものです。
売上がGoogleスプレッドシートにまとまっている場合は、その表を接続する方法もあります。「接続した売上表の『月次売上』タブA1:C13を読み、列名・通貨・対象期間を確認してから、月別売上と前月との差を出して」と頼めます。シート名・範囲は自分の表に合わせ、表が更新された日時も確認してください。掲載したGA4の画像は、この売上表の実行例ではありません。
自分のGA4をつないで、最初の数字を取得する
- Synapse MCPに登録・ログインし、分析する店舗・案件でGA4を追加する。
- Google認証後に自分のプロパティを選び、AIへの接続設定からMCPリンクを発行する。
- ChatGPTまたはClaudeへ登録・認証し、新しい会話で接続先を使える状態にする。
- 「自分のサイトの、7日前から昨日までのセッション数を日別に教えて。プロパティ名と実際の開始日・終了日も示して」と聞く。
自分のプロパティ名・期間と日別の数字が返ったら、GA4でも同じ条件にして照合します。登録だけで終わらず、自分のデータが返るところまで進めてみてください。
新規フリー契約は14日間、3サービス・各媒体1アカウントまでで、自動課金はありません。利用できる媒体やその後の料金は料金ページで確認できます。AI側の接続機能や利用量の条件は別途適用されます。出力から報告文までの流れは、GA4の週次レポートをAIで作る方法もご覧ください。
