トラブルシューティング

動画: 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" }
    }
  ]
}

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

エラーを調査する

  1. よくあるエラーの説明をご覧ください。Common Errorsドキュメントには、 最も頻繁に発生するエラーが記載されています。エラー メッセージ、関連する API リファレンス、エラーの回避方法と処理方法が説明されています。

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

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

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

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

  6. ドキュメントに記載されていないエラーが発生した場合は、 サポートにお問い合わせください。

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

原因を特定する

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

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

問題のトラブルシューティングを行う際に、アプリケーションから誤った情報が API に渡されていることが判明する場合があります。デバッグの役に立つ対話型の開発環境(IDE)の利用を強くおすすめします。たとえば、Eclipse は無償のオープンソース IDE で、主に Java での開発に使用されますが、その他の言語用のプラグインもあります。IDE では、ブレークポイントを設定したり、コードを 1 行ごとにステップ実行したりすることができます。

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

サポートの利用方法

問題をすべて自力で特定し解決できるとは限りません。サポートに お問い合わせください

サポートを求めるときは、できるだけ多くの情報を提供するよう心がけてください。たとえば、次のような項目を含めることをおすすめします。

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

問題を解決する

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

次のステップ

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

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