トラブルシューティング

動画: 2019 年のワークショップでのエラー処理に関する講演をご覧ください

エラーの原因には、不適切な環境設定やソフトウェアのバグ、ユーザーからの無効な入力があります。いずれにしても、そのエラーの原因を突き止めて、コードを修正したり、ユーザーによるエラーを処理するロジックを追加したりする必要があります。このガイドでは Google Ads API のエラーをトラブルシューティングするためのヒントについて説明します。

接続性を確保する

  1. Google Ads API にアクセスできるようにし、正しい設定を行ってください。レスポンスから HTTP エラーが返された場合は、それらに慎重に対処し、使用する予定のサービスにご自身のコードからアクセスしていることを確認してください。

  2. サービスで認証を受けるために、認証情報がリクエストに埋め込まれています。特にクライアント ライブラリを使用せずに呼び出しを処理する場合は、Google Ads API のリクエストとレスポンスの構造をよく理解してください。各クライアント ライブラリには、設定ファイルに認証情報を含める方法に関する指示が準備されています(クライアント ライブラリの README を参照してください)。

  3. 正しい認証情報を使用してください。クイックスタートに沿って、必要な正しい認証情報を取得しましょう。たとえば、次のレスポンス エラーは、ユーザーが無効な認証資格情報を送信したことが原因です。

    {
      "error": {
        "code": 401,
        "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. Visit https://developers.google.com/identity/sign-in/web/devconsole-project.",
        "status": "UNAUTHENTICATED",
        "details": [
          {
            "@type": "type.googleapis.com/google.rpc.DebugInfo",
            "detail": "Authentication error: 2"
          }
        ]
      }
    }
    

上記の手順を行っても問題が解決しない場合は、Google Ads API のエラーのトラブルシューティングを行います。

問題を判別する

Google Ads API は通常、レスポンス内のエラーのリストを含む JSON エラー オブジェクトとしてエラーを報告します。これらのオブジェクトには、エラーコードと、それが発生した理由を詳しく説明するメッセージが含まれています。これは問題を特定するための最初のヒントになります。

{
  "errors": [
    {
      "errorCode": { "fieldMaskError": "FIELD_NOT_FOUND" },
      "message": "The field mask contained an invalid field: 'keyword/matchtype'.",
      "location": { "operationIndex": "1" }
    }
  ]
}

Google のすべてのクライアント ライブラリは、レスポンスのエラーをカプセル化する例外をスローします。これらの例外をキャプチャして、ログまたはトラブルシューティング画面にメッセージを出力することから始めましょう。この情報をアプリケーションでログに記録された他のイベントと統合することで、問題の原因を把握できます。ログでエラーを特定したら、その意味を理解する必要があります。

エラーの調査

  1. よくあるエラーの説明をご覧ください。エラー メッセージ、関連する API リファレンス、エラーの回避方法と処理方法が説明されています。

  2. よくあるエラーに関するドキュメントにエラーが具体的に記載されていない場合は、リファレンス ドキュメントをお調べのうえ、エラー文字列を見つけてください。

  3. サポート チャンネルで、API での経験を共有している他のデベロッパーを検索してください。同じ問題に遭遇し、それを解決した可能性があります。

  4. どこにも記載されていないエラーに遭遇した場合は、そのエラーについてフォーラムに投稿してください。

  5. 検証やアカウント制限の問題のトラブルシューティングについては、Google 広告のヘルプセンターをご覧ください。Google Ads API は、Google 広告サービスの主なルールと制限を継承しています。

  6. ブログ投稿がアプリケーションのトラブルシューティングの参考になる場合もあります。

エラーを調査したら、根本的な原因を特定します。

原因を特定する

例外メッセージを調べて、エラーの原因を調べます。レスポンスを確認してから、リクエストを調べて、考えられる原因を探します。一部の Google Ads API エラー メッセージには、GoogleAdsErrorlocation フィールドに fieldPathElements が含まれており、リクエスト内のエラーが発生した場所を示しています。次に例を示します。

{
  "errors": [
    {
      "errorCode": {"criterionError": "CANNOT_ADD_CRITERIA_TYPE"},
      "message": "Criteria type can not be targeted.",
      "trigger": { "stringValue": "" },
      "location": {
        "operationIndex": "0",
        "fieldPathElements": [ { "fieldName": "keyword" } ]
      }
    }
  ]
}

問題のトラブルシューティングを行う際に、アプリケーションが API に間違った情報を提供している可能性があります。デバッグに役立つように、Eclipse(主に Java の開発に使用される無料のオープンソース IDE ですが、他の言語用のプラグインもあります)などのインタラクティブ開発環境(IDE)を使用することを強くおすすめします。IDE では、ブレークポイントを設定したり、コードを 1 行ごとにステップ実行したりすることができます。

リクエストがアプリケーションの入力と一致していることを確認します(たとえば、キャンペーンの名前がリクエストと一致するようにしてください)。実施するアップデートと一致するフィールド マスクを送信します。Google Ads API ではスパース アップデートがサポートされています。mutate リクエストでフィールド マスクからフィールドを省略すると、API で無視されます。オブジェクトを取り出し、変更を加えて元に戻すアプリケーションの場合、更新をサポートしていないフィールドに書き込んでいる可能性があります。リファレンス ドキュメントでフィールドの説明を確認し、フィールドの更新のタイミングや更新の可否に制限があるかどうかを確認します。

サポートの利用方法

問題をすべて自力で特定し解決できるとは限りません。フォーラムで質問して、大勢のデベロッパーに疑問点を公開すれば、同じ問題に遭遇したことのあるデベロッパーを見つけることができるかもしれません。

お問い合わせの際には、できるだけ多くの情報を提供するよう心がけてください。たとえば、次のような項目を含めることをお勧めします。

  • 不要な情報を削除した JSON リクエストとレスポンス - 開発者トークンや AuthToken などの機密情報は忘れずに削除してください。
  • コード スニペット - 言語固有の問題や API の操作についてのサポートを求めている場合は、コードのスニペットを提供すると、行おうとしていることの説明に役立ちます。
  • RequestId - 本番環境でのリクエストであれば、この情報は、Google Developer Relations チームのメンバーがリクエストを探し出すのに役立ちます。ログにプロパティとして requestId を登録することをおすすめします。ログはレスポンス エラーの不要な情報を削除した例外が含まれているだけでなく、requestId 単独の場合よりも多くの情報を得られるからです。
  • ランタイムやインタープリターのバージョンやプラットフォームなどの補足情報もトラブルシューティングの役に立ちます。

問題の解決方法

問題を特定でき、解決方法が判明したら、実際に修正を加えて修正箇所をテストします。このとき、できればテスト アカウントを使用することをおすすめします。ただし、特定の本番用アカウントのデータにのみ起こるバグの場合には、本番環境でテストする必要があります。

共有する

フォーラムに記載のなかったエラーに関して質問を投稿し、その解決策を見つけた場合は、それをスレッドに追加することをご検討ください。デベロッパーが同じ問題に遭遇した際に、その問題解決に役立てることができます。

次のステップ

問題の解決の過程で、コードを改良して問題の発生を未然に防ぐ方法がみつかる場合があります。

適切な一連の単体テストを作成することで、コードの品質と信頼性を大幅に向上させることができます。また、新しい変更をもすぐにテストできるため、以前の機能を壊すことがありません。トラブルシューティングに必要なすべてのデータを入手するには、優れたエラー処理方法もかなめとなります。