* 目次 [#i24c27f7]
#contents
* Google MCP Toolbox for Databases と BigQuery で Google Sheets を SQL 操作する完全ガイド [#k4aea672]
** はじめに [#f5e2454a]
AIでエクセルやスプレッドシートに直接アクセスする際、最大の課題は **トークン消費の非効率性** です。表の構造を把握するために全セルにアクセスする必要があり、AIが使用できるトークン数を無駄に消費してしまいます。
*** 解決アプローチ:BigQuery 外部テーブルとDDL定義による効率化 [#z387b420]
この問題を解決する鍵は、**事前のスキーマ定義** にあります。Google Sheets のデータを Google Cloud BigQuery の **外部テーブル** として読み込むことで、シートを SQL テーブルのように扱えるようになります。外部テーブル作成時にスキーマを定義すれば、シート認識処理の負荷を大幅に軽減できます。
さらにデータ抽出は汎用的な SQL で実行できるため、以下のメリットが得られます:
- ✅ **トークン消費の最適化**:必要な部分のみBigQuery経由でアクセス
- ✅ **標準化されたデータ操作**:SQLの豊富な機能を活用
- ✅ **AI統合の簡素化**:構造化されたデータアクセス
管理上よく使うSQLのクエリを試行錯誤しながら見つける必要があります。GITなどで管理する必要があるでしょう。
*** 検証目標 [#u314860b]
今回は、プロジェクト管理の WBS を Google Sheets で管理している前提で、Google がオープンソースでリリースした **MCP Toolbox for Databases** を活用し、BigQuery を介してスプレッドシートを SQL データベースのように効率的に操作できるかを検証します。
このツールにより、Google Sheets のデータを BigQuery 外部テーブルに読み込み、MCP 経由で AI からクエリを発行することで、定義済みシートに対するトークン消費を大幅に削減できます。
進め方としては、BigQueryでSQLを使ってスプレッドシートをある程度操作できるようになったら、この **MCP Toolbox for Databases**にツールとして登録すると、AIが代わりにやってくれるようにすることができるという感じです。
** MCP Toolbox for Databases とは [#x6c4782c]
**Model Context Protocol (MCP) Toolbox for Databases** は、AI(Claude 等)とデータベースを安全に接続するために Google が開発したオープンソースツールです。SQLがある程度決まったものをツール化するのに向いています。 [#i512d837]
- 🛡️ **セキュアな接続**: 認証とアクセス制御
- ⚡ **高性能**: 接続プーリングと最適化
- 🔧 **SQL標準対応**: DDL/DML/DQLすべてサポート
- 🌐 **多DB対応**: PostgreSQL, MySQL, BigQuery など
GitHub リポジトリ: https://github.com/googleapis/genai-toolbox
** 今回のユースケース: WBS 管理 [#aa17e217]
Google Sheets で WBS(Work Breakdown Structure)を管理し、SQL でタスクを効率的に操作します。今回は Sheets を直接扱うのではなく、Sheets のデータを **BigQuery 外部テーブル** として取り込みます。
*** 参考スプレッドシート(ひな形) [#fa2a6743]
公開用のひな形シートはこちらです(右側に2ヶ月分のガントチャート付き):
https://docs.google.com/spreadsheets/d/13x7TnzwSTLSsBcJnoYyZkv3fejU-0ktQqspiqmRt4j8/edit?usp=sharing
*** WBSスプレッドシート構造 [#z5511ebb]
行3: ヘッダー(B列〜O列)
行4〜: データ開始
カラム構成:
B列: スプリント
C列: プライオリティ
D列: タスクの区分
E列: カテゴリ
F列: 概要
G列: 詳細(1件単位で記入)
H列: 担当者
I列: 予想作業日数
J列: ステータス
K列: 完了日
L列: 予想開始日
M列: 予想終了日
N列: Issue/議事録
O列: 備考
*** BigQuery 外部テーブルのスキーマ [#uadf6411]
Google Sheets の各列を次のように BigQuery フィールド名へマッピングします。外部テーブル作成時にこのスキーマを手動定義します。
|シート列|BigQueryフィールド名|説明|
|---|---|---|
|B|sprint|スプリント名|
|C|priority|プライオリティ|
|D|task_type|タスクの区分|
|E|category|カテゴリ|
|F|summary|概要|
|G|description|詳細|
|H|assignee|担当者|
|I|estimated_days|予想作業日数|
|J|status|ステータス|
|K|completed_date|完了日|
|L|estimated_start_date|予想開始日|
|M|estimated_end_date|予想終了日|
|N|issue_url|Issue/議事録リンク|
|O|notes|備考|
** セットアップ手順 [#gd0bc7b5]
*** 1. BigQuery 外部テーブルを作成 [#o284c5ce]
+ **データセット作成**
BigQuery コンソールでプロジェクト obsidian-460615 の配下に pm_agent という名前のデータセットを作成します。
+ **外部テーブル作成**
データセット内で「テーブルを作成」を選択し、ソースを **Drive** にします。ドライブの URI に公開シートの URL https://docs.google.com/spreadsheets/d/your_dataset を指定し、ファイル形式を **Google スプレッドシート**、シート範囲に WBS!B4:1004 を指定します。
スキーマは上記のフィールド名で手動定義し、ヘッダー行を 3 行スキップします。テーブル名は wbs01 とします。
+ **権限設定**
クエリを実行するユーザーやサービスアカウントに、BigQuery の権限 (roles/bigquery.jobUser など) と、対象シートの閲覧権限を付与します。
*** 2. Docker 環境で MCP サーバーを構築 [#cdad23c4]
今回は Docker Compose を利用して MCP サーバーを起動します。ディレクトリ構成やスクリプトは従来とほぼ同じですが、BigQuery 用の設定ファイルを配置します。
**** docker-compose.yml [#vf81a1f4]
services:
genai-toolbox:
# 最新バージョンに更新
image: us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:0.10.0
container_name: genai-toolbox
ports:
- "5000:5000"
volumes:
# ファイルマウントを確実に
- "./tools.yaml:/app/tools.yaml:ro"
- "./credentials.json:/app/credentials.json:ro"
- "./logs:/app/logs"
environment:
- GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
command: [
"--tools-file", "/app/tools.yaml",
"--port", "5000",
"--address", "0.0.0.0",
"--log-level", "DEBUG"
]
restart: unless-stopped
networks:
- genai-network
networks:
genai-network:
driver: bridge
**** BigQueryを使う際に使えるコマンドやパラメータの仕様 [#e096c308]
https://googleapis.github.io/genai-toolbox/resources/tools/bigquery/
**** tools.yaml(BigQuery 用) [#m5e4a41a]
まだ未検証です。
# tools.yaml - MCP Toolbox for Databases WBS管理設定
# プロジェクトマネージャー用 BigQuery WBS管理
sources:
bigquery_wbs:
kind: "bigquery"
project: "${GOOGLE_CLOUD_PROJECT}" # エラーです。
location: "US"
# credentials_path は不要(環境変数 GOOGLE_APPLICATION_CREDENTIALS を利用)
tools:
# 1. WBS全体概要取得
get_wbs_overview:
kind: bigquery-sql
description: "プロジェクトのスプリント別進捗概要を表示します"
source: bigquery_wbs
statement: |
WITH wbs_data AS (
SELECT
CAST(sprint AS STRING) as sprint,
CAST(priority AS STRING) as priority,
CAST(task_type AS STRING) as task_type,
CAST(category AS STRING) as category,
CAST(summary AS STRING) as summary,
CAST(description AS STRING) as description,
CAST(assignee AS STRING) as assignee,
CAST(estimated_days AS FLOAT64) as estimated_days,
CAST(status AS STRING) as status,
CAST(completed_date AS DATE) as completed_date,
CAST(estimated_start_date AS DATE) as estimated_start_date,
CAST(estimated_end_date AS DATE) as estimated_end_date,
CAST(issue_url AS STRING) as issue_url,
CAST(notes AS STRING) as notes
FROM `${GOOGLE_CLOUD_PROJECT}.pm_agent.wbs01`
WHERE sprint IS NOT NULL AND sprint != ''
)
SELECT
sprint,
COUNT(*) as total_tasks,
COUNTIF(status = '完了') as completed_tasks,
ROUND(COUNTIF(status = '完了') * 100.0 / COUNT(*), 1) as completion_rate,
SUM(estimated_days) as total_estimated_days,
COUNT(DISTINCT assignee) as assignee_count
FROM wbs_data
GROUP BY sprint
ORDER BY sprint
(以下、他のツール定義も同様に続く...)
**** config.yaml(MCP サーバー設定) [#la6df300]
databases:
wbs_bigquery:
type: "bigquery"
project_id: "obsidian-460615"
dataset: "pm_agent"
location: "US"
credentials_path: "/app/credentials.json"
mcp:
server:
name: "wbs-manager"
version: "1.0.0"
security:
allowed_operations: ["SELECT", "INSERT", "UPDATE"]
row_limit: 1000
**** Windows 用起動スクリプト例 [#a7293032]
@echo off
echo Starting MCP Toolbox for Databases...
docker-compose pull
docker-compose up -d
echo MCP Toolbox is running on http://localhost:8080
pause
*** 3. Google Cloud 認証の設定 [#b8b024dc]
+ Google Cloud Console でサービスアカウントを作成し、BigQuery ジョブユーザーおよびデータ閲覧者のロールを付与します。
+ サービスアカウントのキーを JSON 形式で生成し、credentials.json として保存します。
+ スプレッドシート(テンプレート)にこのサービスアカウントを閲覧者として追加します(共有ボタンからメールアドレスを招待)。
** SQL 操作例(外部テーブル) [#hb7fd42c]
BigQuery 外部テーブルを経由すれば、通常のテーブルと同様に SQL を実行できます。
*** 現在進行中のタスク確認 [#r478e2be]
SELECT
summary,
assignee,
status,
estimated_days,
estimated_end_date
FROM `obsidian-460615.pm_agent.wbs01`
WHERE status IN ('進行中', '開始済み')
ORDER BY estimated_end_date ASC;
*** 担当者別の作業負荷分析 [#i590bde4]
SELECT
assignee,
COUNT(*) as task_count,
SUM(estimated_days) as total_days,
AVG(estimated_days) as avg_days
FROM `obsidian-460615.pm_agent.wbs01`
WHERE status != '完了'
GROUP BY assignee
ORDER BY total_days DESC;
*** スプリント別進捗サマリー [#z38861b1]
SELECT
sprint,
COUNT(*) as total_tasks,
SUM(CASE WHEN status = '完了' THEN 1 ELSE 0 END) as completed_tasks,
ROUND(SUM(CASE WHEN status = '完了' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) as completion_rate
FROM `obsidian-460615.pm_agent.wbs01`
GROUP BY sprint
ORDER BY sprint;
*** 遅延リスクのあるタスク抽出 [#rb52fd6f]
SELECT
summary,
assignee,
estimated_end_date,
DATE_DIFF(estimated_end_date, CURRENT_DATE(), DAY) as days_until_deadline
FROM `obsidian-460615.pm_agent.wbs01`
WHERE status != '完了'
AND DATE_DIFF(estimated_end_date, CURRENT_DATE(), DAY) <= 7
ORDER BY estimated_end_date ASC;
** 動作確認 [#n454ec73]
*** ツールの一覧取得 [#yfa4ece1]
curl http://localhost:5000/api/toolset
@modelcontextprotocol/inspector は Google が公開している **MCP サーバー向けの汎用的な検証ツール**です。これを使います。NPM パッケージとして配布されており、npx コマンドでインストールせずに実行できます。オプションでCLIとしても実行できます(CLIは今回使わない)。
- **目的**:MCP Toolbox やその他の MCP 対応サーバーに接続し、登録されているツールやツールセットを一覧表示したり、パラメータを指定してツールの実行結果を確認したりするためのブラウザベースのインターフェースを提供します。データベース種別や言語には依存しません。
- **使い方**:npx @modelcontextprotocol/inspector と実行するとローカルにインスペクタが起動し、ブラウザに接続用のポートとトークンが表示されます。その画面から自分の MCP サーバーの URL(たとえば http://127.0.0.1:5000/mcp)を指定して接続します。
- **汎用性**:BigQuery 用に限らず、PostgreSQL、MySQL、Spanner など他のデータソース向けに構成した MCP Toolbox や、別実装の MCP サーバーにも利用できます。MCP プロトコルに対応したサーバーであれば共通してツールの確認やテストが行えます。
*** ツールの実行 [#b4d3c1aa]
npx @modelcontextprotocol/inspector
# 表示されたページから `Transport Type` を「STDIO」から「Streamable HTTP」に変更し、URLに `http://127.0.0.1:5000/mcp` を指定して接続
# ブラウザのURLをみると、トークン<YOUR_SESSION_TOKEN>がかいてあるのでメモ
** Claude Desktop との統合例 [#ka6054eb]
MCP サーバーが起動していれば、Claude Desktop から外部テーブルに対する SQL 操作が可能です。設定ファイルに MCP サーバーのエンドポイント(HTTP 経由など)を登録し、Claude に対して自然言語で問い合わせると、MCP がバックエンドで BigQuery へクエリを実行して結果を返してくれます。
** まとめ [#lcb9de79]
- Google Sheets のデータを直接扱うのではなく、**BigQuery の外部テーブル** として取り込むことで、トークン消費の無駄を解消しつつ、SQL ベースで効率的に操作できます。
- MCP Toolbox for Databases は BigQuery を含む各種データベースとのセキュアな橋渡し役を担い、AI との統合を容易にします。
- データセットやテーブル名はプロジェクトごとに変更できますが、本記事では obsidian-460615.pm_agent.wbs01 を例に設定しました。
- 適切な権限付与と設定を行えば、AI アシスタントから WBS 管理の分析や更新が簡単に行えるようになります。
以上、BigQuery を活用した新しい構成の全文でした。実際の環境に合わせてパラメータを調整してご利用ください。