一人十郷 - takuminasuno.com 一人十郷
takuminasuno.com
ビジネス
2025/06/02

ChatGPTのチャット画面から分析指示を書いて、BigQueryにアクセスさせてデータ分析させる話

こんにちは。那須野です。

今日はデータ分析の話です。Google製のDWHであるBigQueryにデータを貯めていったときに「どう活用を広げるか」は課題として挙がりがちですが、その一つの解決策として最近流行りの生成AIが出てくるだろうなと思ったので、実際にやってみた内容を備忘録としてまとめておきます。

なお、本記事は2025年6月2日時点での内容です。投稿時にはClaudeという生成AIがMCPクライアントに対応していてBigQueryデータ分析の先行事例が多数投稿されるようになっていますが、ChatGPTでも頑張ればできなくもないので、今日はその工夫について書いてみようと思います。

ChatGPTのGUI画面からBigQueryにアクセスしてデータ分析する、とは?

そもそもどんなことをやろうとしているのかを図解すると、こんなイメージですね。ChatGPTの通常のチャット画面からやりたい分析を書くと、BigQueryにアクセスして分析して、結果を返してくれます。

BigQueryにアクセスするためのハブとしてCloud Runを使っているのがポイントで、あとは最低限のセキュリティを担保するために、アプリケーションとAPIの制限をかけたAPIキーを認証に使っています。

 

ちなみにCloud Runは、無料枠が以下のように用意されているので、BigQueryと同様にちょっとした利用であれば無料で使えるところがポイントです。

最初の 180,000 vCPU 秒/月
最初の 360,000 GiB 秒/月
200 万リクエスト/月
※最新情報はこちらを確認しましょう。

 

それでは実際の環境構築を見ていきましょう。

環境構築の手順

まず前提として以下の条件が揃っていることが重要です。

  1. ChatGPT Plusなどの有料アカウントがある。(※有料のCustom GPTのアクション機能を利用してBigQueryへのアクセスを定義するため)
  2. Google Cloudプロジェクトを持っており、以下のAPIを有効化している。
    • Cloud Run Admin API
    • Cloud Build API
    • BigQuery API
    • Secret Manager API

 

それでは具体的な手順です。

①認証情報の作成

  1. Cloud Run経由でのアクセスに最低限のセキュリティ対策を施すため、APIとサービスの認証情報を開き、画面上部の「認証情報を作成」ボタンを押し、「APIキー」を選びます。
  2. 名前=「chatgpt-bg-connector-api-key」などのように付けつつ、アプリケーションの制限=「ウェブサイト」にしてウェブサイトに「https://chatgpt.com/」を追加し、APIの制限=「キーを制限」を選んでAPIのプルダウンから「Cloud Run Admin API」を選んで「保存」ボタンを押し、APIキーをコピペします。
  3. Secret Managerを開き、「シークレットを作成」ボタンを押し、名前=「chatgpt-bg-connector-secret」などのように付けつつ、APIキーをシークレットの値として入力し、最後に一番下の「シークレットを作成」ボタンを押します。

②サービスアカウントの作成

  1. サービスアカウントの画面を開き、接続に使うサービスアカウントを例えば「chatgpt-bg-user@以下略」などのような名前で作成し、以下のロールを付与しつつ、サービスアカウントの「鍵」タブから「キーを追加」で「新しい鍵を作成」をクリックし、キーのタイプ=「JSON」にて「作成」をしておきます。
    • BigQuery Data Viewer
    • BigQuery Job User
    • Secret Manager のシークレット アクセサー

③Cloud Run関数の作成

  1. Cloud Runを開いて画面上の「関数を作成」をクリックし、例えばサービス名=chatgpt-bq-connector、リージョン=asia-northeast1、ランタイム=Python 3.13に設定します。
  2. 続いて認証については最低限のセキュリティ対策ということで「Cloud IAM を使用して受信リクエストを認証する」をONにしたまま「Allow unauthenticated invocations」にチェックを入れて、画面一番下の「作成」ボタンを押します。
  3. エディタ画面が開かれたら、main.pyとrequirements.txtに以下2つのコードを貼り付け、関数のエントリポイントをを「run_bq」に書き換えます。

  4. 画面上にある「新しいリビジョンの編集とデプロイ」を押し、デプロイ画面を表示します。
  5. 表示されたコンテナタブにて、まずはコンテナイメージURLを確認し、デプロイするコンテナが表示されていることを確認しましょう。(※もしここでデモコンテナが表示される場合、何かしらの作業ミスをしている可能性があります。そのまま作業を進めてもエラーが出かねないため、Cloud Runの関数を一度削除して再作成をした方が良い可能性があります。)
  6. コンテナの設定で、メモリ=512MiB、CPU=1、リクエストのタイムアウト=60秒、インスタンスあたりの同時リクエスト数=50にしつつ、リビジョンスケーリングにてインスタンスの最小数=0、最大数=5に設定します。(分析するユーザー数やデータの重さによって微調整する)
  7. 変数とシークレットタブにて、「環境変数として公開されるシークレット」として名前=「EXPECTED_API_KEY」としつつシークレットには冒頭で作成したシークレットを宛がい、バージョン=「latest」にします。
  8. セキュリティタブにて、サービスアカウントに②で作ったものを設定します。
  9. 画面一番下の「デプロイ」ボタンを押すとデプロイが完了。改めてURL(サービスURL)が表示されているので、コピーしておきます。

④マニフェストファイルの公開

  1. 以下のようなマニフェストファイルを作成します。なお、servers[0].urlはさきほどコピーしたサービスURLに置き換えておきます。
  2. Cloud Storageにてバケットを作成し、権限タブにて「公開アクセス防止を削除」をクリックして「確認」を押し、画面下にある権限にて「Grant Access」ボタンから新しいプリンシパル=「allUsers」、ロール=「Storage オブジェクト閲覧者」を設定し、一番下の「保存」ボタンを押します。「このリソースを一般公開してもよろしいですか?」と聞かれるので、そのまま「一般公開アクセスを許可」を押して公開します。
  3. 続いてこのバケットに、上述のマニフェストファイルをアップロードし、ファイルの公開URLを取得します。

⑤Custom GPTの作成

  1. ChatGPTにアクセスし、画面左タブから「GPT」を選び、画面右上の「作成する」ボタンを押します。
  2. 画面上の「構成」タブを押し、「名前」と「説明」と「指示」を適当に入力後、分析力を強化するために機能の「コードインタープリターとデータ分析」はONにしておきましょう。また、検索ができると変に外部に情報を求めてしまうので、機能で「ウェブ検索」はOFFにすることも検討しましょう。
  3. 最後にアクションにある「新しいアクションを作成する」をクリックし、認証は認証タイプ=「APIキー」を選びつつ取得していたAPIキーを転記し、2個目の認証タイプ=「カスタム」を選んでカスタムヘッダーの名前=「x-api-key」と入力して「保存する」ボタンを押します。
  4. 続いてスキーマにて「URLからインポートする」ボタンを押して、先ほどコピーしていた公開URLを入力して「インポートする」ボタンを押し、OpenAPIスキーマが正しく反映されていることを確認したうえで画面右上の「作成する」ボタンを押し、GPTを共有する先を「自分だけ」ないし「リンクを受け取った人」に変更して「保存する」ボタンを押したら完了です。

⑥チャットでデータ分析の指示

  1. ChatGPT画面で作成したGPTを選択し、好きに分析指示を出します。
  2. 最初は「BigQueryデータ分析 が chatgpt-bq-connector-{hash}.{region}.run.app に通信しようとしています」と確認が出るので「常に許可する」ボタンを押すと以降は確認がでなくなったうえで実行されて、アクセスできる範囲でいい感じにデータを見て集計して結果を返してくれます。

簡単ですね!

トグルを押せば実行したSQLも確認できるのもよい感じです!

追伸:グラフが文字化けしているのは、日本語が文字化けするPythonチャートの欠点です。このあたりもカスタムプロンプトで制御しないといけませんね。。

 

上手く分析できるようにするコツ

チャットで分析できるとはいっても、実務として上手く機能させるようにするにはGPTの指示(カスタムプロンプト)を中心に細かい部分での最適化が重要になってきます。ここでは特に気を付けた方が良いことを洗っておきましょう。

①デフォルト環境の指示

デフォルトのプロジェクトやデフォルトのデータセットを定義してあげると、都度のチャットで細かく指定しなくても分かってくれることが多いです。利用方法に合わせて検討しましょう。

②スキーマ事前調査の指示

GPTが分析する際に、データセットやテーブルの名前、カラムの名前をミスしてエラーを起こすと非常に面倒です。事前にしっかりとスキーマを調べてから分析SQLを実行するよう指示することで回避しやすいです。

③可視化の指示

特に指示しないとアウトプットは文章や表で返ってきます。グラフが望ましい場合はグラフを指定しましょう。なお、漏れなく日本語が文字化けするのでちゃんと制御させましょう。

④サービスアカウントの権限制御

良くも悪くもサービスアカウントのアクセスできるデータセットやテーブルが分析対象になります。余計なデータには権限を付与しないことでセキュリティリスクを軽減するだけでなく、見るべきデータだけが見えるようにすることで分析の正確性を高めることができます。

⑤descriptionの徹底

やり方にもよりますが、基本的にはChatGPTがデータを理解するのに使えるのはデータセットやテーブル、カラム名に次いでdescriptionが有効と思われます。徹底して書いておくことで、ChatGPTが適切にデータを把握して期待通りの分析をしてくれやすくなるでしょう。

 

これらを踏まえたGPTの指示は、例えば以下のような形です。ご参考までにどうぞ。

同じカテゴリーの投稿もどうぞ!
Dataformによるデータパイプラインの構築と運用の進め方【基本の総集編】
ビジネス
2025/03/17
Dataformによるデータパイプラインの構築と運用の進め方【基本の総集編】
SQLによるデータ分析のレベル感の所感について
ビジネス
2025/03/11
SQLによるデータ分析のレベル感の所感について
Dataform上でSQLを書いてBigQueryにある小売業の売上データ分析をしてみた
ビジネス
2025/01/27
Dataform上でSQLを書いてBigQueryにある小売業の売上データ分析をしてみた
ConoHa VPSにインストールしていたMetabaseに急にアクセスできなくなった問題を解決した話【503 Service Unavailable】
ビジネス
2024/11/14
ConoHa VPSにインストールしていたMetabaseに急にアクセスできなくなった問題を解決した話【503 Service Unavailable】
ConoHa VPSで作ったWordPressサイトを完全削除した手順メモ
ビジネス
2024/11/10
ConoHa VPSで作ったWordPressサイトを完全削除した手順メモ
ブログ著者について
那須野 拓実(なすの たくみ)。たなぐら応援大使(福島県棚倉町)。トリプレッソを勝手に応援していた人。元語学屋。時々写真垢とか手芸垢。山とか滝とか紅葉とかが好き。本業はナレッジマネジメントとかデータ分析とかの何でも屋。コロナワクチン接種済み。