0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code から Connected Sheets のデータコネクタを繋ぐ

0
Posted at

はじめに

Claude Codeに「このBigQueryクエリを、スプレッドシートにConnected Sheetsのデータソースとして挿して」と頼めるようにしたい。そう思って自動化を試みたところ、API自体は単純な一方で、認証まわりに引っかかりどころが多くありました。

本記事では、Connected SheetsのデータソースをAPIで追加する手順と、前提となるADC(Application Default Credentials)の仕組みを紹介します。

やりたかったこと

Connected Sheetsは、スプレッドシートからBigQueryを直接参照できる機能です。データソースの追加は普段UIで行いますが、これをClaude Codeから一言で実行できるようにしたい。

記事執筆時点(2026年8月)では、Google Workspace系のCLI(gogcli / Google Workspace CLI)はデータコネクタの追加に対応しておらず、生のSheets API(spreadsheets.batchUpdateのaddDataSource)を叩く必要があります。

そしてこのAPIは、spreadsheetsとbigquery.readonlyの両スコープを持ったトークンを要求します。この「トークンを用意する」が本記事の本題です。

前提知識:gcloudのcredentialは2セットある

手順に入る前に、前提を整理します。gcloudにはloginコマンドが2つあります。

gcloud CLI認証 ADC (Application Default Credentials)
コマンド gcloud auth login gcloud auth application-default login
保存先 ~/.config/gcloud/credentials.db ~/.config/gcloud/application_default_credentials.json
使うのは誰 gcloudコマンド自身 ライブラリ経由の自作コード
スコープ GCP管理系で固定 --scopesで変更可能

この2つは完全に独立したファイルです。片方を再発行しても、もう片方には一切触れません。

「gcloudは通ってるのにスクリプトが401」「スクリプトは動くのにgcloudがReauthentication required」という一見矛盾した状態は、この分離のせいで普通に起きます。

今回Sheets APIを叩くのは自作コード側なので、必要なのはADCの方です。

ライブラリはADCをどう見つけるか

Pythonのgoogle.auth.default()は次の順でcredentialを探します。

① 環境変数 GOOGLE_APPLICATION_CREDENTIALS が指すファイル
② ~/.config/gcloud/application_default_credentials.json  ← ADC loginが書く場所
③ GCE / Cloud Run等のメタデータサーバー

①が設定されていると②は無視されます。「loginし直したのに古いサービスアカウントで動く」ときは、まず①の環境変数を疑ってください。

認可は3つの軸で決まる

もう1つ、トラブルシューティングに効く知識です。OAuthの認可は独立した3層で決まります。

  • client_id — どのアプリとして頼むか
  • scope — 何の権限を頼むか
  • account — 誰のデータに対してか

そして重要なのがこれです。

refresh_tokenは「account × client × scope」の組に対して発行される

スコープを1つ足しただけでも、クライアントを差し替えただけでも、ブラウザでの再認可が必要になります。「前にログインしたのになぜまた認可画面?」の答えは常にここです。

手順

1. 自前のOAuthクライアントを作る

ADCのデフォルトはgcloud標準のOAuthクライアントですが、このクライアントでSheets系のスコープを要求すると、Googleが「このアプリはブロックされます」で拒否します。

gcloudは全世界に配布されるCLIなので、client secretも中身を見れば取り出せます。つまり誰でも「gcloudです」と名乗って認可画面を出せる状態です。もしこのclient_idにSheetsやGmailのスコープが許されると、Google Cloud SDKを装ったアプリがWorkspaceデータへの同意画面を正規の見た目で出せてしまいます。そのためGoogleは、このclient_idに対してGCP外のスコープをブロックしています。

なので自前のOAuthクライアントを作ります。作成にはGCPプロジェクトが必要です(個人アカウントの無料プロジェクトでも可)。

  • GCP Console →「APIとサービス」→「認証情報」→「OAuthクライアントIDを作成」
  • アプリケーションの種類はデスクトップアプリ
  • 作成したらJSONをダウンロード(以下client_secret.json)

OAuth同意画面が未設定なら先に設定が必要です。注意点として、公開ステータスが「テスト中」のままだとrefresh_tokenが7日で強制失効します。Google Workspace組織なら「内部」タイプにしておくのが楽です。

また、対象プロジェクトでSheets APIとBigQuery APIの有効化も忘れずに。

2. ADCを発行する

gcloud auth application-default login \
  --client-id-file=client_secret.json \
  --scopes=https://www.googleapis.com/auth/cloud-platform,\
https://www.googleapis.com/auth/spreadsheets,\
https://www.googleapis.com/auth/bigquery.readonly

ポイントはスコープです。前述の通りaddDataSourceはspreadsheetsとbigquery.readonlyの両方を持ったトークンを要求します。cloud-platformスコープでは代替されず、bigquery.readonlyの明示が必要です。

ブラウザが開くので認可すれば、application_default_credentials.jsonが書き換わって完了です。

3. quota projectを設定する

ユーザーcredentialのADCは「APIのクォータをどのプロジェクトに付けるか」が曖昧になりがちで、Cannot find a quota project系の警告が出ることがあります。出たらこれで解消します。

gcloud auth application-default set-quota-project YOUR_PROJECT_ID

4. addDataSourceを叩く

Pythonだとこうなります。

import google.auth
from googleapiclient.discovery import build

SCOPES = [
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/bigquery.readonly",
]

creds, _ = google.auth.default(scopes=SCOPES)
service = build("sheets", "v4", credentials=creds)

body = {
    "requests": [{
        "addDataSource": {
            "dataSource": {
                "spec": {
                    "bigQuery": {
                        "projectId": "YOUR_GCP_PROJECT",
                        "querySpec": {
                            "rawQuery": "SELECT * FROM `dataset.table` LIMIT 1000"
                        }
                    }
                }
            }
        }
    }]
}

service.spreadsheets().batchUpdate(
    spreadsheetId="YOUR_SPREADSHEET_ID", body=body
).execute()

実行すると、スプレッドシートにDATA_SOURCEタブが自動で作られ、Connected SheetsのデータソースとしてBigQueryクエリが追加されます。UIから追加した場合と同じ状態です。

image.png

5. Claude Codeに覚えさせる

ここまでの知見をCLAUDE.mdに書いておくと、以降は「このクエリをスプシにConnected Sheetsで挿して」の一言でClaude Codeが再現してくれます。

## Connected Sheetsのデータソース追加
- Sheets API `spreadsheets.batchUpdate` の `addDataSource` で追加できる(CLI不可)
- トークンは spreadsheets + bigquery.readonly の両スコープ必須
- ADCは自前OAuthクライアントで発行済み(gcloud標準クライアントはSheets系スコープ不可)
- 定期更新スケジュールだけはAPI不可、UIで設定する

認証は一度セットアップすればrefresh_tokenが生き続けるので、日常運用でやることはありません。

できないこと

APIでできないことも書いておきます。

  • 定期更新スケジュールの設定はAPI不可。ここだけUIで設定する必要があります
  • DATA_SOURCEタブはvalues APIで参照不可(Unable to parse rangeになります)。他タブの数式からも参照できないので、通常タブとして使いたい場合はUIで「抽出」タブ化が必要です

さいごに

いかがだったでしょうか。

スコープの揃ったADCさえ用意できれば、Connected Sheetsのデータソース追加はaddDataSource一発です。ぜひ試してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?