gcloud CLIで広告データ基盤を管理する|セットアップからBigQuery操作・自動化まで
目次
- gcloud CLIとは
- セットアップ手順
- Google Cloud SDKのインストール
- 初期設定と認証
- プロジェクトの設定
- bqコマンドの基本操作
- データセットとテーブルの一覧・詳細
- データセットとテーブルの作成
- データのロードとエクスポート
- 実用例1:bq queryでアドホック分析
- 基本的なクエリ実行
- 結果のCSV出力
- 実用例2:スケジュールクエリの設定
- スケジュールクエリの作成
- スケジュールクエリの一覧と管理
- 実用例3:データ転送の管理
- Google広告データ転送の設定
- データ転送の確認と管理
- 実用例4:テーブルのバックアップとスナップショット
- テーブルコピー
- タイムトラベルクエリ
- 運用のベストプラクティス
- プロジェクトとデータセットの命名規則
- アクセス制御
- クエリ費用の監視
- シェルスクリプトとの組み合わせ
- まとめ
gcloud CLIとは
gcloud CLIは、Google Cloudのリソースをターミナルから操作するためのツールです。ブラウザでGoogle Cloudコンソールにログインしなくても、コマンドひとつでプロジェクトの設定やBigQueryのテーブル管理ができます。
GUIのコンソールは直感的ですが、繰り返し同じ操作をする場面ではCLIが効率的です。特に広告データ基盤の運用では、テーブルの作成、スケジュールクエリの設定、データ転送の管理などを頻繁に行います。CLIであればこれらの操作をスクリプト化でき、手順の再現性が確保されます。
GUIとCLIの使い分けを整理します。
| 操作 | GUIコンソール | gcloud / bq CLI |
|---|---|---|
| 初回のプロジェクト作成 | 適している | 可能だが画面のほうが楽 |
| データセット・テーブルの確認 | 適している | bq ls / bq show で十分 |
| アドホックなSQL実行 | 適している | bq query でも可能 |
| テーブルの定期作成・更新 | 手順が煩雑 | スクリプト化に適している |
| スケジュールクエリの管理 | 可能 | bq mk --transfer_config で一括管理 |
| データ転送の設定 | 可能 | CLIなら設定を再現可能 |
| バッチ処理・自動化 | 不向き | シェルスクリプトで自動化可能 |
日常の確認業務はGUIコンソール、繰り返しの操作や自動化はCLIという使い分けが実用的です。
セットアップ手順
Google Cloud SDKのインストール
Google Cloud SDKをインストールすると、gcloud と bq の両方のコマンドが使えるようになります。
# Windows(PowerShell)の場合
# Google Cloud SDK インストーラをダウンロードして実行する
# https://cloud.google.com/sdk/docs/install にアクセスし
# 「Windows 用インストーラ」をダウンロード
# インストール後、PowerShellを再起動して確認
gcloud version
bq version
macOS / Linuxの場合は以下のコマンドでインストールできます。
# macOS / Linux の場合
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud version
初期設定と認証
インストールが完了したら、初期設定を行います。
# 初期設定ウィザードを起動する
gcloud init
# ブラウザが開くのでGoogleアカウントでログインする
# プロジェクトの選択またはIDの入力を求められる
# デフォルトリージョンは asia-northeast1(東京)を推奨
複数のGoogleアカウントを使い分ける場合は、認証を切り替えます。
# 現在の認証情報を確認する
gcloud auth list
# 別のアカウントで認証する
gcloud auth login
# アプリケーション用の認証(APIを使うスクリプト向け)
gcloud auth application-default login
プロジェクトの設定
操作対象のプロジェクトを設定します。
# 現在のプロジェクトを確認する
gcloud config get-value project
# プロジェクトを切り替える
gcloud config set project YOUR_PROJECT_ID
# 設定一覧を確認する
gcloud config list
運用メモ 複数のクライアントのプロジェクトを管理している場合、
gcloud config configurationsで名前付きの設定プロファイルを作成できます。gcloud config configurations create client-aのように作成し、gcloud config configurations activate client-aで切り替えます。プロジェクトIDの打ち間違いを防止できます。
bqコマンドの基本操作
bq コマンドはBigQuery専用のCLIです。データセットやテーブルの管理、SQLの実行が可能です。
データセットとテーブルの一覧・詳細
# プロジェクト内のデータセット一覧を表示する
bq ls
# 特定データセットのテーブル一覧を表示する
bq ls YOUR_PROJECT_ID:ad_data
# テーブルのスキーマ(カラム定義)を表示する
bq show --schema --format=prettyjson YOUR_PROJECT_ID:ad_data.raw_google_ads
# テーブルの詳細情報(行数、サイズ、パーティション)を表示する
bq show --format=prettyjson YOUR_PROJECT_ID:ad_data.raw_google_ads
データセットとテーブルの作成
# データセットを作成する(リージョンは東京)
bq mk --dataset --location=asia-northeast1 YOUR_PROJECT_ID:ad_data
# テーブルをSQLで作成する(パーティション付き)
bq query --use_legacy_sql=false "
CREATE TABLE `YOUR_PROJECT_ID.ad_data.raw_google_ads` (
date DATE,
campaign_name STRING,
impressions INT64,
clicks INT64,
cost FLOAT64,
conversions FLOAT64
)
PARTITION BY date
"
データのロードとエクスポート
# CSVファイルをテーブルにロードする
bq load --source_format=CSV --skip_leading_rows=1 YOUR_PROJECT_ID:ad_data.raw_manual_import ./data.csv date:DATE,campaign_name:STRING,impressions:INTEGER,clicks:INTEGER,cost:FLOAT,conversions:FLOAT
# テーブルのデータをCSVとしてGCSにエクスポートする
bq extract --destination_format=CSV YOUR_PROJECT_ID:ad_data.raw_google_ads gs://YOUR_BUCKET/exports/google_ads_*.csv
主要なbqコマンドの一覧を整理します。
| コマンド | 用途 | 使用例 |
|---|---|---|
bq ls | データセット・テーブル一覧 | bq ls YOUR_PROJECT_ID:ad_data |
bq show | 詳細情報の表示 | bq show --schema YOUR_PROJECT_ID:ad_data.table |
bq query | SQLの実行 | bq query --use_legacy_sql=false "SELECT ..." |
bq mk | データセット・テーブル・転送の作成 | bq mk --dataset YOUR_PROJECT_ID:ad_data |
bq rm | データセット・テーブルの削除 | bq rm -t YOUR_PROJECT_ID:ad_data.table |
bq load | データの取り込み | bq load --source_format=CSV ... |
bq extract | データのエクスポート | bq extract --destination_format=CSV ... |
bq cp | テーブルのコピー | bq cp source_table dest_table |
運用メモ
bq rmはテーブルを即座に削除します。BigQueryのテーブルには7日間のタイムトラベル機能があり、削除後もこの期間内であれば復元可能ですが、本番テーブルに対するbq rmは細心の注意を払ってください。本番操作前にbq showで対象テーブルの内容を確認する手順を習慣にしましょう。
実用例1:bq queryでアドホック分析
ターミナルからSQLを直接実行し、結果を確認する方法です。ブラウザを開かずにデータを確認したい場面で役立ちます。
基本的なクエリ実行
# 直近7日間の日別サマリーを取得する
bq query --use_legacy_sql=false --format=prettyjson "
SELECT
date,
SUM(impressions) AS impressions,
SUM(clicks) AS clicks,
SUM(cost) AS cost,
SUM(conversions) AS conversions,
SAFE_DIVIDE(SUM(cost), SUM(conversions)) AS cpa
FROM
``YOUR_PROJECT_ID.ad_data.mart_all_platforms``
WHERE
date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
GROUP BY date
ORDER BY date DESC
"
結果のCSV出力
クエリ結果をCSVファイルに保存するには、--format=csv を指定します。
# クエリ結果をCSVとしてファイルに保存する
bq query --use_legacy_sql=false --format=csv --max_rows=10000 "
SELECT
date,
platform,
campaign_name,
SUM(cost) AS cost,
SUM(conversions) AS conversions
FROM
``YOUR_PROJECT_ID.ad_data.mart_all_platforms``
WHERE
date BETWEEN '2026-06-01' AND '2026-06-18'
GROUP BY date, platform, campaign_name
ORDER BY date DESC, cost DESC
" > campaign_report.csv
出力形式のオプションを一覧にします。
| オプション | 出力形式 | 用途 |
|---|---|---|
--format=prettyjson | 見やすいJSON | ターミナルでの確認 |
--format=json | コンパクトなJSON | スクリプトでの後処理 |
--format=csv | CSV | スプレッドシートへの貼り付け |
--format=sparse | テーブル形式 | デフォルト。列幅が自動調整 |
運用メモ PowerShellで
bq queryを実行する際、SQL中のバッククォートがPowerShellのエスケープ文字と衝突することがあります。SQL内のバッククォートは2つ重ねて “(ダブルバッククォート)で記述してください。bash / zsh ではこの問題は発生しません。
実用例2:スケジュールクエリの設定
日次集計や月次レポートなど、定期的に実行するクエリをスケジュール登録できます。BigQuery Data Transfer Serviceの仕組みを利用します。
スケジュールクエリの作成
# 日次の全媒体サマリーを毎朝10時に実行するスケジュールクエリ
bq mk --transfer_config --target_dataset=ad_data --display_name="daily_summary" --data_source=scheduled_query --params="{""query"":""CREATE OR REPLACE TABLE ``YOUR_PROJECT_ID.ad_data.mart_daily_summary`` AS SELECT date, SUM(impressions) AS impressions, SUM(clicks) AS clicks, SUM(cost) AS cost, SUM(conversions) AS conversions, SAFE_DIVIDE(SUM(cost), SUM(conversions)) AS cpa FROM ``YOUR_PROJECT_ID.ad_data.mart_all_platforms`` WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) GROUP BY date ORDER BY date DESC"",""write_disposition"":""WRITE_TRUNCATE""}" --schedule="every day 10:00" --location=asia-northeast1
スケジュールクエリの一覧と管理
# 現在のスケジュールクエリ一覧を表示する
bq ls --transfer_config --transfer_location=asia-northeast1
# 特定のスケジュールクエリの詳細を確認する
bq show --transfer_config projects/YOUR_PROJECT_ID/locations/asia-northeast1/transferConfigs/TRANSFER_CONFIG_ID
# スケジュールクエリの実行履歴を確認する
bq ls --transfer_run --transfer_location=asia-northeast1 projects/YOUR_PROJECT_ID/locations/asia-northeast1/transferConfigs/TRANSFER_CONFIG_ID
スケジュールクエリは、管理画面からも確認・編集できます。初回はCLIで作成し、微調整は管理画面で行う運用が効率的です。
実用例3:データ転送の管理
Google広告やGA4のデータをBigQueryに自動転送するData Transfer Serviceも、CLIから設定できます。
Google広告データ転送の設定
# Google広告のデータ転送を設定する
bq mk --transfer_config --target_dataset=google_ads --display_name="Google Ads Transfer" --data_source=google_ads --params="{""customer_id"":""123-456-7890""}" --schedule="every day 06:00" --location=asia-northeast1
以下は、CLIで管理できるデータ転送と自動化の全体パイプラインです。
データ転送の確認と管理
# データ転送の一覧を表示する
bq ls --transfer_config --transfer_location=asia-northeast1
# 特定の転送設定の詳細を確認する
bq show --transfer_config projects/YOUR_PROJECT_ID/locations/asia-northeast1/transferConfigs/TRANSFER_CONFIG_ID
# 転送の実行履歴を確認する(直近10件)
bq ls --transfer_run --transfer_location=asia-northeast1 --max_results=10 projects/YOUR_PROJECT_ID/locations/asia-northeast1/transferConfigs/TRANSFER_CONFIG_ID
# 手動でバックフィル実行する(過去30日分)
bq mk --transfer_run --start_time="2026-05-20T00:00:00Z" --end_time="2026-06-19T00:00:00Z" projects/YOUR_PROJECT_ID/locations/asia-northeast1/transferConfigs/TRANSFER_CONFIG_ID
運用メモ Google広告のData Transfer Serviceは、デフォルトで日次実行です。転送の実行時刻はUTCで指定するため、日本時間の午前6時に実行したい場合は
21:00(UTC) を設定してください。また、Google広告のレポートデータが確定するまでに数時間かかることがあるため、あまり早い時刻に設定すると前日分のデータが不完全になる場合があります。
実用例4:テーブルのバックアップとスナップショット
データの誤削除や上書きに備え、テーブルのバックアップを取る方法です。
テーブルコピー
bq cp でテーブルを別のデータセットにコピーできます。
# テーブルをバックアップ用データセットにコピーする
bq cp YOUR_PROJECT_ID:ad_data.mart_all_platforms YOUR_PROJECT_ID:ad_data_backup.mart_all_platforms_20260619
タイムトラベルクエリ
BigQueryでは、過去7日間の任意の時点のデータを参照できます。テーブルを誤って上書きした場合の復元に使えます。
# 1時間前の状態のテーブルをクエリする
bq query --use_legacy_sql=false "
SELECT *
FROM ``YOUR_PROJECT_ID.ad_data.mart_daily_summary``
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
LIMIT 100
"
# 特定の時点のデータを別テーブルに復元する
bq query --use_legacy_sql=false --destination_table=YOUR_PROJECT_ID:ad_data.mart_daily_summary_restored "
SELECT *
FROM ``YOUR_PROJECT_ID.ad_data.mart_daily_summary``
FOR SYSTEM_TIME AS OF '2026-06-18T10:00:00+09:00'
"
| バックアップ手法 | 特徴 | 用途 |
|---|---|---|
bq cp | テーブルを丸ごとコピー | 定期バックアップ、移行前の保険 |
| タイムトラベル | 過去7日以内の任意時点を参照 | 誤操作時のデータ復元 |
| テーブルスナップショット | メタデータのみ保存で低コスト | 長期間のバージョン管理 |
| GCSエクスポート | CSV/JSONでGCSに書き出し | 外部システムとの連携、長期保管 |
運用メモ 本番環境のマートテーブルを更新するスケジュールクエリでは、
CREATE OR REPLACE TABLEではなく、一度ステージングテーブルに書き出してからbq cpで差し替える方法がより安全です。スケジュールクエリがエラーで途中終了した場合でも、本番テーブルのデータが消失しません。
運用のベストプラクティス
プロジェクトとデータセットの命名規則
命名規則を統一しておくと、チームメンバーが増えたときの理解コストが下がります。
| 要素 | 命名規則の例 | 説明 |
|---|---|---|
| プロジェクト | company-ad-analytics | 組織名 + 用途 |
| データセット(raw) | google_ads / meta_ads | 媒体名で分類 |
| データセット(mart) | ad_data | 統合データ用 |
| rawテーブル | raw_{媒体}_{粒度} | 例: raw_google_campaign_daily |
| マートテーブル | mart_{用途} | 例: mart_all_platforms |
| ビュー | v_{用途} | 例: v_campaign_summary |
| バックアップ | {元テーブル}_{日付} | 例: mart_all_platforms_20260619 |
アクセス制御
データセット単位でアクセス権限を設定できます。
# データセットのアクセス権限を確認する
bq show --format=prettyjson YOUR_PROJECT_ID:ad_data
# 特定ユーザーに閲覧権限を付与する
bq update --set_label=env:prod YOUR_PROJECT_ID:ad_data
IAMロールの使い分けを整理します。
| ロール | できること | 対象者 |
|---|---|---|
roles/bigquery.dataViewer | テーブルの閲覧、クエリの実行 | レポート閲覧者 |
roles/bigquery.dataEditor | テーブルの作成、データの追加・更新 | データ投入スクリプト |
roles/bigquery.admin | データセットの作成・削除、権限の管理 | 基盤管理者 |
roles/bigquery.jobUser | クエリの実行(データへのアクセス権は別途必要) | 分析担当者 |
クエリ費用の監視
# プロジェクトのクエリ使用量を確認する
bq query --use_legacy_sql=false "
SELECT
user_email,
COUNT(*) AS query_count,
SUM(total_bytes_processed) / POW(1024, 3) AS total_gb_scanned,
SUM(total_bytes_processed) / POW(1024, 4) * 6.25 AS estimated_cost_usd
FROM
``region-asia-northeast1``.INFORMATION_SCHEMA.JOBS
WHERE
creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND job_type = 'QUERY'
GROUP BY user_email
ORDER BY total_gb_scanned DESC
"
このクエリで、誰がどれくらいのデータをスキャンしているかを把握できます。意図せず大量スキャンが発生している場合は、パーティション条件の追加やテーブル設計の見直しを検討してください。
シェルスクリプトとの組み合わせ
CLIの真価は、スクリプト化による自動化にあります。
#!/bin/bash
# daily_backup.sh
# 毎日の広告データマートをバックアップするスクリプト
PROJECT_ID="YOUR_PROJECT_ID"
TODAY=$(date +%Y%m%d)
echo "=== バックアップ開始: ${TODAY} ==="
# マートテーブルをバックアップ
bq cp \
"${PROJECT_ID}:ad_data.mart_all_platforms" \
"${PROJECT_ID}:ad_data_backup.mart_all_platforms_${TODAY}"
# 7日前より古いバックアップを削除
CUTOFF=$(date -d "7 days ago" +%Y%m%d)
for table in $(bq ls --format=json "${PROJECT_ID}:ad_data_backup" | python3 -c "
import json, sys
tables = json.load(sys.stdin)
for t in tables:
tid = t['tableReference']['tableId']
if tid.startswith('mart_all_platforms_') and tid.split('_')[-1] < '${CUTOFF}':
print(tid)
"); do
echo "古いバックアップを削除: ${table}"
bq rm -f -t "${PROJECT_ID}:ad_data_backup.${table}"
done
echo "=== バックアップ完了 ==="
このスクリプトをcronやWindowsのタスクスケジューラに登録すれば、日次バックアップが自動化されます。
運用メモ Windowsのタスクスケジューラでbqコマンドを実行する場合、
bq.cmdのフルパス(通常はC:\Users\{ユーザー名}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\bq.cmd)を指定してください。環境変数PATHが通っていても、タスクスケジューラからは認識されないことがあります。
まとめ
gcloud CLIとbqコマンドを使いこなすことで、広告データ基盤の構築と運用を効率化できます。この記事で紹介した内容を整理します。
| 操作カテゴリ | 主要コマンド | 記事内の該当セクション |
|---|---|---|
| 初期設定・認証 | gcloud init / gcloud auth | セットアップ手順 |
| テーブルの確認 | bq ls / bq show | bqコマンドの基本操作 |
| SQLの実行 | bq query | 実用例1 |
| 定期実行の設定 | bq mk --transfer_config | 実用例2 |
| データ転送の管理 | bq ls --transfer_config | 実用例3 |
| バックアップ | bq cp / タイムトラベル | 実用例4 |
| 費用の監視 | INFORMATION_SCHEMA | 運用のベストプラクティス |
まずは gcloud init でセットアップし、bq ls と bq query でBigQueryの中身を確認するところから始めてみてください。GUIコンソールでの操作に慣れたあとにCLIを覚えると、GUIでの手順をそのままコマンドに置き換える感覚で習得できます。
運用型広告のコンサルタント。Google広告・Meta広告・Yahoo!広告を中心に10年以上の実務経験。