BigQuery MCPサーバーの使い方（実際に試してみた）

## はじめに

BigQueryは、Googleが提供する強力なデータウェアハウスサービスですが、LLM（大規模言語モデル）と連携させようとすると、従来は複雑な設定やカスタム開発が必要でした。しかし、MCP（Model Context Protocol）サーバーを使うことで、Claude などのAIアシスタントが直接BigQueryのデータにアクセスし、自然言語でデータ分析を行うことが可能になります。この記事では、私が実際に試したBigQuery MCPサーバーの設定方法と使い方について詳しく解説します。

GitHub: https://github.com/LucasHild/mcp-server-bigquery

## BigQuery MCPサーバーとは？

MCPサーバーは、AIモデルと外部サービスを接続するための標準化されたプロトコルです。BigQuery MCPサーバーは、このプロトコルを利用して、AIアシスタントがBigQueryデータベースのスキーマを検査し、SQLクエリを実行できるようにするツールです。

主な機能は以下のとおりです：

- **SQLクエリの実行**: 自然言語での質問をSQLクエリに変換して実行
- **テーブル一覧の取得**: データベース内のすべてのテーブルを確認
- **スキーマ情報の確認**: 特定のテーブルの構造を詳細に調査
- **データの安全なアクセス**: 読み取り専用でデータにアクセス（1GBの処理制限あり）

## 必要な準備

BigQuery MCPサーバーを使用するには、以下のものが必要です：

1. **Google Cloudプロジェクト**: BigQueryが有効化されていること
2. **適切な権限**: `roles/bigquery.user`、または`roles/bigquery.dataViewer`と`roles/bigquery.jobUser`の両方
3. **認証情報**: Google Cloud CLIでの認証またはサービスアカウントキーファイル
4. **Claude Desktop**: 現時点ではMCPをサポートする唯一のLLMインターフェース

## セットアップ方法

BigQuery MCPサーバーのセットアップには二つの方法があります。簡単な方法はSmitheryを使用する方法で、より詳細な設定が必要な場合は手動設定を行います。

### 方法1: Smitheryを使った簡単インストール（推奨）

Smitheryは、MCPサーバーのインストールを自動化するツールです。以下の手順で設定できます：

1. ターミナルで以下のコマンドを実行します：

```bash
npx @smithery/cli install mcp-server-bigquery --client claude
```

2. インストーラーが以下の情報を要求します：
   - Google Cloudプロジェクトのプロジェクトコード
   - BigQueryのロケーション（例：`us-central1`、`europe-west9`など）

3. Smitheryが自動的にClaude Desktopの設定を更新し、アプリケーションを再起動します。

### 方法2: 手動設定

より詳細な制御が必要な場合は、以下の手順で手動設定を行います：

#### 1. Google Cloudとの認証

**開発用（Google Cloud CLI）**:
```bash
gcloud auth application-default login
```

**本番環境用（サービスアカウント）**:
サービスアカウントキーファイルを作成し、安全な場所に保存します。

#### 2. Claude Desktopの設定ファイルを編集

**macOS**の場合:
```
~/Library/Application\ Support/Claude/claude_desktop_config.json
```

**Windows**の場合:
```
%APPDATA%/Claude/claude_desktop_config.json
```

#### 3. 設定ファイルに以下の内容を追加

**基本設定**:
```json
{
  "mcpServers": {
    "bigquery": {
      "command": "uv",
      "args": [
        "--directory", "{{PATH_TO_REPO}}",
        "run", 
        "mcp-server-bigquery",
        "--project", "{{GCP_PROJECT_ID}}",
        "--location", "{{GCP_LOCATION}}"
      ]
    }
  }
}
```

**サービスアカウント使用時**:
```json
{
  "mcpServers": {
    "bigquery": {
      "command": "npx",
      "args": [
        "-y",
        "@ergut/mcp-bigquery-server",
        "--project-id", "your-project-id",
        "--location", "us-central1",
        "--key-file", "/path/to/service-account-key.json"
      ]
    }
  }
}
```

`{{PATH_TO_REPO}}`、`{{GCP_PROJECT_ID}}`、`{{GCP_LOCATION}}`は適切な値に置き換えてください。

## 使い方

設定が完了したら、以下の方法でBigQueryデータをClaudeと対話的に分析できます：

### 1. Claude Desktopを起動

まず、Claude Desktopアプリケーションを起動します。MCPサーバーが正しく設定されていれば、自動的に接続されます。

### 2. 自然言語でデータ分析

Claudeとの会話で、以下のような質問やコマンドを使用できます：

- **テーブル一覧の取得**:
  「BigQueryのデータベースにあるテーブルを一覧表示して」

- **テーブルスキーマの確認**:
  「sales_dataテーブルのスキーマ構造を説明して」

- **データクエリの実行**:
  「先月の売上トップ10の顧客を教えて」
  「地域別の売上合計を棒グラフで表示して」

### 3. SQLクエリの実行例

実際にCloudeに対してSQLクエリを実行する例を示します：

**例1：シンプルなデータ集計**

```
「顧客テーブル（customers）から、地域（region）ごとの顧客数を集計して、多い順に表示して」
```

Claudeは以下のようなSQLを生成して実行します：

```sql
SELECT region, COUNT(*) as customer_count
FROM `your-project-id.dataset.customers`
GROUP BY region
ORDER BY customer_count DESC;
```

**例2：複数テーブルの結合分析**

```
「2024年4月の商品カテゴリ別の売上総額を計算して、円グラフで表示して」
```

Claudeは以下のようなSQLを実行します：

```sql
SELECT 
  p.category, 
  SUM(s.quantity * s.price) as total_sales
FROM `your-project-id.dataset.sales` s
JOIN `your-project-id.dataset.products` p ON s.product_id = p.id
WHERE EXTRACT(MONTH FROM s.sale_date) = 4
AND EXTRACT(YEAR FROM s.sale_date) = 2024
GROUP BY p.category
ORDER BY total_sales DESC;
```

## 高度な使い方とヒント

### カスタム設定オプション

MCPサーバーは以下のパラメータでカスタマイズできます：

- `--project`/`--project-id`: （必須）Google Cloudプロジェクトのプロジェクトコード
- `--location`: （オプション）BigQueryのロケーション、デフォルトは'us-central1'
- `--dataset`: （オプション）特定のデータセットのみ考慮する設定
- `--key-file`: （オプション）サービスアカウントキーファイルへのパス

### データセットの制限

セキュリティ上の理由から、特定のデータセットのみにアクセスを制限したい場合：

```bash
npx @ergut/mcp-bigquery-server --project-id your-project-id --location europe-west1 --dataset sales_data --dataset marketing_data
```

### クエリ実行の制限

デフォルトでは1GBの処理制限がありますが、これはBigQuery自体の設定で調整可能です。ただし、大きな制限値を設定すると予期せぬコスト発生の可能性があるため注意が必要です。

## トラブルシューティング

### 認証エラー

エラーメッセージ：「Authorization failed: Please check your credentials」

**解決策**:
1. Google Cloud CLIで再認証：`gcloud auth application-default login`
2. サービスアカウントキーが正しいパスにあることを確認
3. サービスアカウントに適切な権限があることを確認

### 接続エラー

エラーメッセージ：「Could not connect to MCP server」

**解決策**:
1. Claude Desktopを再起動
2. 設定ファイルの構文エラーをチェック
3. MCPサーバーコマンドのパスが正しいか確認

### クエリ実行エラー

エラーメッセージ：「Query failed: Resources exceeded」

**解決策**:
1. クエリを簡素化（日付範囲を制限するなど）
2. 必要なカラムのみ選択
3. クエリにLIMIT句を追加

## セキュリティ上の注意点

BigQuery MCPサーバーを使用する際の安全性について：

1. **読み取り専用アクセス**: データの変更や削除はできない設計
2. **クエリ制限**: デフォルトで1GBの処理制限あり
3. **認証情報の管理**: サービスアカウントキーは安全に保管
4. **最小権限の原則**: 必要なデータセットのみにアクセスを制限

## 実際の使用例

私が実際に試したBigQuery MCPサーバーの活用例をいくつか紹介します：

### 経営分析レポート作成

週次の売上レポート作成が30分から3分に短縮されました。「先週の地域別・商品カテゴリ別の売上データを分析して、前週と比較したレポートを作成して」と依頼するだけで、整形されたレポートとグラフが自動生成されます。

### データ探索と洞察発見

「顧客の購買行動で最近変わった点はある？」という質問だけで、Claudeが複数のテーブルからデータを分析し、季節性や特定の顧客セグメントの変化など、見落としていた洞察を提供してくれました。

### アドホック分析の効率化

マーケティングチームからの急な分析依頼も、SQLを書く代わりに「先月のキャンペーンが売上に与えた影響を分析して、どの顧客セグメントで効果が高かったか教えて」と依頼するだけで対応できるようになりました。

## 今後の展望

BigQuery MCPサーバーはまだ開発段階にありますが、以下のような進化が期待されます：

1. **複数データソースの統合**: BigQuery以外のデータソースとの連携
2. **高度なデータ視覚化**: より洗練されたグラフやダッシュボード
3. **予測分析機能**: データに基づく将来予測やシミュレーション
4. **より多くのLLMプラットフォームへの対応**: Claude Desktop以外のAIアシスタントとの連携

## まとめ

BigQuery MCPサーバーは、データ分析の民主化を実現する強力なツールです。SQLの専門知識がなくても、自然言語でデータに問いかけることで、ビジネス上の重要な洞察を迅速に得ることができます。設定は少し手間がかかりますが、一度設定してしまえば、データとの対話が驚くほど簡単になります。

大規模データウェアハウスの力をAIの自然な対話能力と組み合わせることで、データドリブンな意思決定がかつてないほど迅速かつ直感的になりました。BigQuery MCPサーバーは、データエンジニアやアナリストだけでなく、ビジネスユーザーにとっても革新的なツールとなるでしょう。

ぜひ試してみて、あなたのデータ分析ワークフローがどのように変わるか体験してみてください。