* 目次 [#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 を活用した新しい構成の全文でした。実際の環境に合わせてパラメータを調整してご利用ください。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS