VS Code や PyCharm などの IDE には、Python 言語のコード補完機能が組み込まれています。
google-ads-python ライブラリは、GoogleAdsClient クラスの getter メソッドを使用して、実行時に protobuf メッセージ クラスを動的に生成します。これにより、ソースコードの静的分析に依存する IDE コード補完機能が阻害される可能性があります。
静的解析に依存するコード補完ツールとの互換性を高めるには、次のいずれかを行います。
- 動的ゲッター メソッドで型アノテーションを使用する(推奨)。
- protobuf メッセージ クラスとサービス クライアントを直接インポートします。
型ヒント付きの動的インポート
動的インポートを使用すると、ライブラリの更新全体でコードの復元力が維持されます。型アノテーションを追加すると、動的初期化のメリットを損なうことなく、IDE コード補完を有効にできます。
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.v26.resources.types.campaign import (
Campaign,
)
client = GoogleAdsClient.load_from_storage()
# Type hints allow the IDE to provide code completion suggestions while
# retaining dynamic class generation.
campaign: Campaign = client.get_type("Campaign")
直接インポート
protobuf メッセージ クラスを直接インポートすることもできます。この方法では、ゲッター メソッドを使用せずに、IDE コード補完をすぐに有効にできます。
from google.ads.googleads.v26.resources import Campaign
# The Campaign class is imported directly, enabling the IDE to read the
# class definition and make code completion suggestions.
campaign = Campaign()
直接インポートのデメリット
生成されたクラスを直接インポートすると、コード補完には役立ちますが、いくつかのトレードオフも発生します。
- 見つけにくい: 特定のクラスがどのモジュールにあるかが明確でない場合があるため、正しいインポートパスを見つけるのが難しいことがあります。
- アップグレードで脆弱になる: 生成されたクラスのディレクトリ構造は、クライアント ライブラリの新しいバージョンで変更される可能性があります。クラスを直接インポートすると、アップグレード時にコードが破損する可能性がありますが、ゲッター メソッドを使用するコードは、このような変更の影響を受けません。
手動初期化が必要:
get_serviceメソッドは、認証、トランスポート設定、gRPC インターセプター(login-customer-idやlinked-customer-idなどのヘッダーをアタッチし、ロギングを処理し、エラーをGoogleAdsExceptionでラップする)を使用してサービスを初期化してから、サービスを返します。サービスを直接インポートしてインスタンス化すると、インターセプタはバイパスされるため、認証情報とトランスポート チャネルを手動で構成する必要があります。from google.ads.googleads.v26.services.services import ( campaign_service as campaign_service_module, ) # Dynamic service getter (initializes credentials, transport, and gRPC # interceptors automatically). campaign_service = client.get_service("CampaignService") # Direct service client import (requires manual credential and interceptor # configuration). campaign_service_client = campaign_service_module.CampaignServiceClient( credentials=client.credentials, )