前編の振り返りと後編の内容
前編では、マネージャーアカウントの準備からDeveloper Token申請までを解説しました。後編では、いよいよ実装フェーズに入ります。
本記事で扱う内容: - OAuth 2.0認証によるRefresh Token取得 - Pythonでの接続確認 - Claude Code/Codex CLIを活用した効率的な実装 - よくあるエラーと対処法
ステップ4:OAuth認証でRefresh Token取得
4-1. なぜRefresh Tokenが必要か
Google Ads APIはサービスアカウント認証に対応していません。必ずユーザー同意ベースのOAuth 2.0を使用し、Refresh Tokenで継続的にアクセスします。
4-2. Refresh Token取得スクリプト
以下のPythonスクリプトで、初回のRefresh Tokenを取得します:
#!/usr/bin/env python3
"""OAuth認証でRefresh Tokenを取得"""
from google_auth_oauthlib.flow import InstalledAppFlow
import os
# 環境変数から認証情報を読み込み
CLIENT_ID = os.environ.get('GOOGLE_ADS_CLIENT_ID')
CLIENT_SECRET = os.environ.get('GOOGLE_ADS_CLIENT_SECRET')
if not CLIENT_ID or not CLIENT_SECRET:
print("エラー: 環境変数 GOOGLE_ADS_CLIENT_ID と GOOGLE_ADS_CLIENT_SECRET を設定してください")
exit(1)
# OAuth設定
client_config = {
"installed": {
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
}
}
# スコープ設定(Google Ads API専用)
SCOPES = ['https://www.googleapis.com/auth/adwords']
# 認証フロー実行
flow = InstalledAppFlow.from_client_config(client_config, SCOPES)
credentials = flow.run_local_server(port=8080)
# Refresh Token表示
print("\n✅ Refresh Token取得成功:")
print(credentials.refresh_token)
print("\n⚠️ このトークンを環境変数 GOOGLE_ADS_REFRESH_TOKEN に保存してください")
4-3. 実行手順
# 必要なパッケージをインストール
pip install google-auth google-auth-oauthlib google-ads
# 環境変数を設定
export GOOGLE_ADS_CLIENT_ID="your-client-id"
export GOOGLE_ADS_CLIENT_SECRET="your-client-secret"
# スクリプト実行
python get_refresh_token.py
ブラウザが自動的に開き、Googleアカウントでの認証を求められます。承認後、ターミナルにRefresh Tokenが表示されます。
ステップ5:Pythonでの接続確認
5-1. 環境変数の準備
.envファイルを作成し、以下の情報を設定:
# .env ファイル
GOOGLE_ADS_DEVELOPER_TOKEN=your-developer-token
GOOGLE_ADS_CLIENT_ID=your-client-id
GOOGLE_ADS_CLIENT_SECRET=your-client-secret
GOOGLE_ADS_REFRESH_TOKEN=your-refresh-token
GOOGLE_ADS_LOGIN_CUSTOMER_ID=1234567890 # 親アカウント(ハイフンなし)
GOOGLE_ADS_CUSTOMER_ID=9876543210 # 子アカウント(ハイフンなし)
5-2. 接続確認スクリプト
#!/usr/bin/env python3
"""Google Ads API接続確認"""
from google.ads.googleads.client import GoogleAdsClient
from dotenv import load_dotenv
import os
# 環境変数読み込み
load_dotenv()
def main():
# 設定を辞書形式で準備
config = {
"developer_token": os.environ["GOOGLE_ADS_DEVELOPER_TOKEN"],
"client_id": os.environ["GOOGLE_ADS_CLIENT_ID"],
"client_secret": os.environ["GOOGLE_ADS_CLIENT_SECRET"],
"refresh_token": os.environ["GOOGLE_ADS_REFRESH_TOKEN"],
"login_customer_id": os.environ["GOOGLE_ADS_LOGIN_CUSTOMER_ID"],
}
# クライアント初期化
client = GoogleAdsClient.load_from_dict(config)
customer_id = os.environ["GOOGLE_ADS_CUSTOMER_ID"]
# Google Ads サービス取得
ga_service = client.get_service("GoogleAdsService")
# シンプルなクエリで接続確認
query = """
SELECT
campaign.id,
campaign.name,
campaign.status
FROM campaign
LIMIT 10
"""
# クエリ実行
response = ga_service.search(customer_id=customer_id, query=query)
# 結果表示
print("✅ 接続成功!キャンペーン一覧:")
for row in response:
print(f" - {row.campaign.name} (ID: {row.campaign.id})")
if __name__ == "__main__":
main()
Claude Code/Codex CLIの活用方法
効率的な実装のためのプロンプト例
開発を加速させるため、以下のプロンプトをClaude CodeやCodex CLIに渡します:
Google Ads APIのPythonクライアントを実装してください。
要件:
- 環境変数から認証情報を読み込む
- エラーハンドリングを適切に実装
- キャンペーン一覧を取得する関数
- 日別レポートを取得する関数
制約:
- google-ads公式ライブラリを使用
- IDはハイフンなしで処理
- ログは構造化(JSON形式)
このプロンプトにより、本番環境で使える堅牢なコードが生成されます。
よくあるハマりどころと対処法
エラー1:IDのハイフン問題
# ❌ 間違い
customer_id = "123-456-7890"
# ✅ 正しい
customer_id = "1234567890"
エラー2:スコープ不足
# ❌ 間違い(一般的なGoogleスコープ)
SCOPES = ['https://www.googleapis.com/auth/userinfo.email']
# ✅ 正しい(Google Ads専用)
SCOPES = ['https://www.googleapis.com/auth/adwords']
エラー3:親子アカウントの混同
config = {
# 親アカウント(マネージャー)
"login_customer_id": "1234567890",
# これとは別!
}
# 操作対象(子アカウント)は別途指定
customer_id = "9876543210"
エラー4:Developer Token未承認
承認待ちの場合、以下のエラーが発生します:
DEVELOPER_TOKEN_NOT_APPROVED
対処法: テストアカウントで動作確認するか、承認を待ちます。
セキュリティのベストプラクティス
1. 認証情報の管理
# .gitignoreに必ず追加
.env
*.json # クライアントシークレットファイル
2. 環境変数の暗号化
本番環境では、AWS Secrets ManagerやGoogle Secret Managerを使用:
# Google Secret Manager例
from google.cloud import secretmanager
def get_secret(secret_id):
client = secretmanager.SecretManagerServiceClient()
name = f"projects/{project_id}/secrets/{secret_id}/versions/latest"
response = client.access_secret_version(request={"name": name})
return response.payload.data.decode("UTF-8")
実装後のチェックリスト
実装完了後、以下を確認しましょう:
- [ ] Refresh Tokenを安全に保管している
- [ ] IDからハイフンを除去している
- [ ] 親子アカウントを正しく設定している
- [ ] エラーハンドリングを実装している
- [ ] ログを適切に記録している
- [ ] APIの利用制限を考慮している(15,000 operations/day)
まとめ
Google Ads APIの導入は複雑に見えますが、手順を整理すれば着実に進められます。
重要ポイントの再確認
- サービスアカウント不可:必ずOAuth 2.0を使用
- ID形式:ハイフンを必ず除去
- 親子関係:マネージャーと操作対象を明確に分離
- セキュリティ:認証情報は環境変数で管理
次のステップ
基本的な接続が確認できたら、以下に挑戦してみましょう: - キャンペーンの自動作成・更新 - パフォーマンスレポートの定期取得 - 入札戦略の自動最適化
Google Ads APIを活用することで、広告運用の自動化と効率化が実現できます。本記事を参考に、ぜひ実装にチャレンジしてください。