gcloud CLIで広告データ基盤を管理する|セットアップからBigQuery操作・自動化まで

gcloud CLIとは

gcloud CLIは、Google Cloudのリソースをターミナルから操作するためのツールです。ブラウザでGoogle Cloudコンソールにログインしなくても、コマンドひとつでプロジェクトの設定やBigQueryのテーブル管理ができます。

GUIのコンソールは直感的ですが、繰り返し同じ操作をする場面ではCLIが効率的です。特に広告データ基盤の運用では、テーブルの作成、スケジュールクエリの設定、データ転送の管理などを頻繁に行います。CLIであればこれらの操作をスクリプト化でき、手順の再現性が確保されます。

gcloud / bq コマンドのユースケース全体図ターミナルPowerShell / bash / zshgcloud init / authbq query / ls / showbq mk / load / extractbq mk —transfer_configシェルスクリプトで自動化Google Cloudプロジェクト管理IAM / サービスアカウントBigQueryデータセット / テーブル管理スケジュールクエリData Transfer ServiceGoogle広告 / GA4 転送設定CSV / GCSデータの入出力Looker Studio可視化・レポートGAS / Python定期処理・通知CLIからGoogle Cloudリソースを操作し、データ基盤の構築・運用を自動化する

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をインストールすると、gcloudbq の両方のコマンドが使えるようになります。

# 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 querySQLの実行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=csvCSVスプレッドシートへの貼り付け
--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で管理できるデータ転送と自動化の全体パイプラインです。

データ転送 → BigQuery → 可視化 のパイプラインGoogle広告Data Transfer ServiceGA4BigQuery ExportMeta / Yahoo広告API / GAS / Python06:00 実行日次エクスポート09:00 実行BigQuery rawテーブルraw_google_ads / raw_meta / …スケジュールクエリ10:00 実行 → マート更新マートテーブルmart_all_platforms / mart_dailyLooker StudioSlack通知アドホック分析データ転送 → raw蓄積 → スケジュールクエリでマート更新 → 可視化・通知

データ転送の確認と管理

# データ転送の一覧を表示する
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 showbqコマンドの基本操作
SQLの実行bq query実用例1
定期実行の設定bq mk --transfer_config実用例2
データ転送の管理bq ls --transfer_config実用例3
バックアップbq cp / タイムトラベル実用例4
費用の監視INFORMATION_SCHEMA運用のベストプラクティス

まずは gcloud init でセットアップし、bq lsbq query でBigQueryの中身を確認するところから始めてみてください。GUIコンソールでの操作に慣れたあとにCLIを覚えると、GUIでの手順をそのままコマンドに置き換える感覚で習得できます。

r
ryottaman

運用型広告のコンサルタント。Google広告・Meta広告・Yahoo!広告を中心に10年以上の実務経験。

この記事について感想やご質問を送れます

誤りの指摘、補足情報、ご質問など、お気軽にどうぞ。