Google MCP Toolbox for Databases と BigQuery で Google Sheets を SQL 操作するガイド
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 目次 [#i24c27f7]
#contents
* Google MCP Toolbox for Databases と BigQuery で Google ...
** はじめに [#f5e2454a]
AIでエクセルやスプレッドシートに直接アクセスする際、最大...
*** 解決アプローチ:BigQuery 外部テーブルとDDL定義による...
この問題を解決する鍵は、**事前のスキーマ定義** にあります...
さらにデータ抽出は汎用的な SQL で実行できるため、以下のメ...
- ✅ **トークン消費の最適化**:必要な部分のみBigQuery経由...
- ✅ **標準化されたデータ操作**:SQLの豊富な機能を活用
- ✅ **AI統合の簡素化**:構造化されたデータアクセス
管理上よく使うSQLのクエリを試行錯誤しながら見つける必要が...
*** 検証目標 [#u314860b]
今回は、プロジェクト管理の WBS を Google Sheets で管理し...
このツールにより、Google Sheets のデータを BigQuery 外部...
進め方としては、BigQueryでSQLを使ってスプレッドシートをあ...
** MCP Toolbox for Databases とは [#x6c4782c]
**Model Context Protocol (MCP) Toolbox for Databases** は...
- 🛡️ **セキュアな接続**: 認証とアクセス制御
- ⚡ **高性能**: 接続プーリングと最適化
- 🔧 **SQL標準対応**: DDL/DML/DQLすべてサポート
- 🌐 **多DB対応**: PostgreSQL, MySQL, BigQuery など
GitHub リポジトリ: https://github.com/googleapis/genai-to...
** 今回のユースケース: WBS 管理 [#aa17e217]
Google Sheets で WBS(Work Breakdown Structure)を管理し...
*** 参考スプレッドシート(ひな形) [#fa2a6743]
公開用のひな形シートはこちらです(右側に2ヶ月分のガントチ...
https://docs.google.com/spreadsheets/d/13x7TnzwSTLSsBcJno...
*** 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 の配下...
+ **外部テーブル作成**
データセット内で「テーブルを作成」を選択し、ソースを **Dr...
スキーマは上記のフィールド名で手動定義し、ヘッダー行を 3 ...
+ **権限設定**
クエリを実行するユーザーやサービスアカウントに、BigQuery ...
*** 2. Docker 環境で MCP サーバーを構築 [#cdad23c4]
今回は Docker Compose を利用して MCP サーバーを起動します...
**** docker-compose.yml [#vf81a1f4]
services:
genai-toolbox:
# 最新バージョンに更新
image: us-central1-docker.pkg.dev/database-toolbox/to...
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.j...
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を使う際に使えるコマンドやパラメータの仕様 [...
https://googleapis.github.io/genai-toolbox/resources/tool...
**** 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_APPLICATIO...
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_da...
CAST(status AS STRING) as status,
CAST(completed_date AS DATE) as completed_date,
CAST(estimated_start_date AS DATE) as estimated...
CAST(estimated_end_date AS DATE) as estimated_e...
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(*)...
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 でサービスアカウントを作成し、BigQ...
+ サービスアカウントのキーを JSON 形式で生成し、credentia...
+ スプレッドシート(テンプレート)にこのサービスアカウン...
** SQL 操作例(外部テーブル) [#hb7fd42c]
BigQuery 外部テーブルを経由すれば、通常のテーブルと同様に...
*** 現在進行中のタスク確認 [#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 com...
ROUND(SUM(CASE WHEN status = '完了' THEN 1 ELSE 0 END) ...
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 d...
FROM `obsidian-460615.pm_agent.wbs01`
WHERE status != '完了'
AND DATE_DIFF(estimated_end_date, CURRENT_DATE(), DAY) ...
ORDER BY estimated_end_date ASC;
** 動作確認 [#n454ec73]
*** ツールの一覧取得 [#yfa4ece1]
curl http://localhost:5000/api/toolset
@modelcontextprotocol/inspector は Google が公開している ...
- **目的**:MCP Toolbox やその他の MCP 対応サーバーに接続...
- **使い方**:npx @modelcontextprotocol/inspector と実行...
- **汎用性**:BigQuery 用に限らず、PostgreSQL、MySQL、Spa...
*** ツールの実行 [#b4d3c1aa]
npx @modelcontextprotocol/inspector
# 表示されたページから `Transport Type` を「STDIO」から「...
# ブラウザのURLをみると、トークン<YOUR_SESSION_TOKEN>がか...
** Claude Desktop との統合例 [#ka6054eb]
MCP サーバーが起動していれば、Claude Desktop から外部テー...
** まとめ [#lcb9de79]
- Google Sheets のデータを直接扱うのではなく、**BigQuery ...
- MCP Toolbox for Databases は BigQuery を含む各種データ...
- データセットやテーブル名はプロジェクトごとに変更できま...
- 適切な権限付与と設定を行えば、AI アシスタントから WBS ...
以上、BigQuery を活用した新しい構成の全文でした。実際の環...
終了行:
* 目次 [#i24c27f7]
#contents
* Google MCP Toolbox for Databases と BigQuery で Google ...
** はじめに [#f5e2454a]
AIでエクセルやスプレッドシートに直接アクセスする際、最大...
*** 解決アプローチ:BigQuery 外部テーブルとDDL定義による...
この問題を解決する鍵は、**事前のスキーマ定義** にあります...
さらにデータ抽出は汎用的な SQL で実行できるため、以下のメ...
- ✅ **トークン消費の最適化**:必要な部分のみBigQuery経由...
- ✅ **標準化されたデータ操作**:SQLの豊富な機能を活用
- ✅ **AI統合の簡素化**:構造化されたデータアクセス
管理上よく使うSQLのクエリを試行錯誤しながら見つける必要が...
*** 検証目標 [#u314860b]
今回は、プロジェクト管理の WBS を Google Sheets で管理し...
このツールにより、Google Sheets のデータを BigQuery 外部...
進め方としては、BigQueryでSQLを使ってスプレッドシートをあ...
** MCP Toolbox for Databases とは [#x6c4782c]
**Model Context Protocol (MCP) Toolbox for Databases** は...
- 🛡️ **セキュアな接続**: 認証とアクセス制御
- ⚡ **高性能**: 接続プーリングと最適化
- 🔧 **SQL標準対応**: DDL/DML/DQLすべてサポート
- 🌐 **多DB対応**: PostgreSQL, MySQL, BigQuery など
GitHub リポジトリ: https://github.com/googleapis/genai-to...
** 今回のユースケース: WBS 管理 [#aa17e217]
Google Sheets で WBS(Work Breakdown Structure)を管理し...
*** 参考スプレッドシート(ひな形) [#fa2a6743]
公開用のひな形シートはこちらです(右側に2ヶ月分のガントチ...
https://docs.google.com/spreadsheets/d/13x7TnzwSTLSsBcJno...
*** 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 の配下...
+ **外部テーブル作成**
データセット内で「テーブルを作成」を選択し、ソースを **Dr...
スキーマは上記のフィールド名で手動定義し、ヘッダー行を 3 ...
+ **権限設定**
クエリを実行するユーザーやサービスアカウントに、BigQuery ...
*** 2. Docker 環境で MCP サーバーを構築 [#cdad23c4]
今回は Docker Compose を利用して MCP サーバーを起動します...
**** docker-compose.yml [#vf81a1f4]
services:
genai-toolbox:
# 最新バージョンに更新
image: us-central1-docker.pkg.dev/database-toolbox/to...
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.j...
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を使う際に使えるコマンドやパラメータの仕様 [...
https://googleapis.github.io/genai-toolbox/resources/tool...
**** 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_APPLICATIO...
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_da...
CAST(status AS STRING) as status,
CAST(completed_date AS DATE) as completed_date,
CAST(estimated_start_date AS DATE) as estimated...
CAST(estimated_end_date AS DATE) as estimated_e...
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(*)...
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 でサービスアカウントを作成し、BigQ...
+ サービスアカウントのキーを JSON 形式で生成し、credentia...
+ スプレッドシート(テンプレート)にこのサービスアカウン...
** SQL 操作例(外部テーブル) [#hb7fd42c]
BigQuery 外部テーブルを経由すれば、通常のテーブルと同様に...
*** 現在進行中のタスク確認 [#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 com...
ROUND(SUM(CASE WHEN status = '完了' THEN 1 ELSE 0 END) ...
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 d...
FROM `obsidian-460615.pm_agent.wbs01`
WHERE status != '完了'
AND DATE_DIFF(estimated_end_date, CURRENT_DATE(), DAY) ...
ORDER BY estimated_end_date ASC;
** 動作確認 [#n454ec73]
*** ツールの一覧取得 [#yfa4ece1]
curl http://localhost:5000/api/toolset
@modelcontextprotocol/inspector は Google が公開している ...
- **目的**:MCP Toolbox やその他の MCP 対応サーバーに接続...
- **使い方**:npx @modelcontextprotocol/inspector と実行...
- **汎用性**:BigQuery 用に限らず、PostgreSQL、MySQL、Spa...
*** ツールの実行 [#b4d3c1aa]
npx @modelcontextprotocol/inspector
# 表示されたページから `Transport Type` を「STDIO」から「...
# ブラウザのURLをみると、トークン<YOUR_SESSION_TOKEN>がか...
** Claude Desktop との統合例 [#ka6054eb]
MCP サーバーが起動していれば、Claude Desktop から外部テー...
** まとめ [#lcb9de79]
- Google Sheets のデータを直接扱うのではなく、**BigQuery ...
- MCP Toolbox for Databases は BigQuery を含む各種データ...
- データセットやテーブル名はプロジェクトごとに変更できま...
- 適切な権限付与と設定を行えば、AI アシスタントから WBS ...
以上、BigQuery を活用した新しい構成の全文でした。実際の環...
ページ名: