Route Optimization API を設定する

このドキュメントでは、Route Optimization API の使用を開始するために必要な手順について説明します。

前提条件

この手順では、Google Cloud アカウントと、課金が有効になっている Google Cloud プロジェクトを設定します。また、Route Optimization API の使用料金についても理解しておく必要があります。

  1. Route Optimization API の使用量と請求額で、使用量に対する請求と費用を確認します。
  2. Google Cloud アカウントがあることを確認します。

    Google Cloud コンソールにログインします。
  3. 課金が有効になっている Google Cloud プロジェクトがあることを確認します。

    [お支払い] ページに移動
    1. プロジェクトを選択して [お支払い] ページを開きます。
    2. [お支払い] ページで、次の操作を行います。

      • 選択したプロジェクトで課金がすでに有効になっていて、請求先アカウントが 1 つしかない場合は、[お支払い] ページが開きます。
      • 請求先アカウントが複数ある場合は、[リンクされた請求先アカウントに移動] を選択して、プロジェクトに関連付けられている請求先アカウントの詳細を表示します。
      • 請求先アカウントが存在しても、プロジェクトに関連付けられていない場合は、請求先アカウントをプロジェクトにリンクするように求めるプロンプトが表示されます。
      • 請求先アカウントが存在しない場合、または新しい請求先アカウントを作成する場合は、[請求先アカウントを管理] を選択して新しい請求先アカウントを作成します。詳細については、新しいセルフサービスの Cloud 請求先アカウントを作成するをご覧ください。

API を有効にする

Route Optimization API を使用するには、Google Cloud コンソールまたは gcloud コマンドを使用して、Google Cloud プロジェクトで API を有効にする必要があります。

API を有効にするには:

Console

  1. Google Cloud コンソールで商品ページを開きます。

    Route Optimization API を有効にする
  2. [有効にする] ボタンをクリックします。

gcloud

gcloud services enable \
    --project "PROJECT" \
    "routeoptimization.googleapis.com"

詳しくは、Google Cloud SDK、Cloud SDK のインストール、および以下のコマンドをご覧ください。

Google Maps Platform サービスでは、不正使用を防ぐため、API 呼び出しに OAuth トークンを含める必要があります。

OAuth トークンを作成する

Route Optimization API は、認証に OAuth 2.0 をサポートしています。Google は、ウェブサーバーのシナリオなど、一般的な OAuth 2.0 シナリオをサポートしています。

このドキュメントでは、開発環境で Route Optimization API 呼び出しに OAuth トークンを渡す方法について説明します。本番環境で OAuth を使用する方法については、Google での認証方法をご覧ください。

Google Maps API は、サーバーに API リクエストを送信して直接呼び出すことも、クライアント ライブラリを使用してコードを簡素化することもできます。Google マップには、Go、Java、Node.js、Python 用のクライアント ライブラリが用意されています。詳細については、Route Optimization API クライアント ライブラリをご覧ください。

OAuth の概要

デプロイ環境に応じて、いくつかの方法で OAuth を使用してアクセス トークンを作成、管理できます。

OAuth 2.0 を使用すると、アプリケーションと Google サービス間のサーバー間インタラクションを行うことができます。このシナリオでは、個々のユーザーではなく、アプリケーションに関連付けられたサービス アカウントを使用します。サービス アカウントを使用すると、ユーザーが直接関与することなく API リクエストを行うことができます。認証方法の詳細については、Google での認証方法をご覧ください。

また、Route Optimization API を Android または iOS のモバイルアプリに統合することもできます。OAuth の使用と、さまざまなデプロイ環境でのアクセス トークンの管理について詳しくは、OAuth 2.0 を使用した Google API へのアクセスをご覧ください。

OAuth スコープ

Route Optimization API で OAuth を使用するには、OAuth トークンに次のスコープを割り当てる必要があります。

https://www.googleapis.com/auth/cloud-platform

ロールの設定

このドキュメントでは、Route Optimization の Identity and Access Management(IAM)のロールと権限について説明します。IAM を使用すると、特定の Route Optimization リソースに対するアクセス権をきめ細かく設定し、他のリソースへのアクセスを防ぐことができます。IAM を使用すると、最小権限のセキュリティ原則を適用できます。この原則では、必要以上に多くの権限を付与しないことが規定されています。

プリンシパル(ユーザー、グループ、またはサービス アカウント)が Google Cloud API を呼び出す場合、そのプリンシパルにはリソースを使用するための適切な IAM 権限が必要です。プリンシパルに必要な権限を付与するには、プリンシパルに IAM ロールを付与します。

Google Cloud でのアクセス管理の概要を把握するには、IAM の概要をご覧ください。

プリンシパルに Route Optimization へのアクセスを許可する事前定義された IAM ロールは次のとおりです。

  • Route Optimization Editor (roles/routeoptimization.editor): プロジェクト内のルート最適化リソースに対する読み取り / 書き込みアクセス権をユーザーまたはサービス アカウントに付与します。これには、OptimizeTours と BatchOptimizeTours を呼び出す機能や、GetOperation を使用して長時間実行オペレーションを取得する機能が含まれます。
  • Route Optimization Viewer (roles/routeoptimization.viewer): プロジェクト内のルート最適化リソースに対する読み取り専用権限を付与します。このロールにより、OptimizeTours を呼び出し、GetOperation を使用して長時間実行オペレーションにアクセスできます。
Cloud SDK を使用してプリンシパルのバインディングを作成することで、ロールを割り当てることができます。
gcloud projects add-iam-policy-binding PROJECT \
  --member user:someone@example.com \
  --role roles/routeoptimization.editor

詳しくは、 Google Cloud コンソールを使用して IAM ロールを付与するをご覧ください。

例: ローカル開発環境で REST API 呼び出しを試す

トークンを生成する環境がなく、OAuth トークンを使用して Route Optimization API を試す場合は、このセクションの手順を使用します。

この例では、アプリケーションのデフォルト認証情報(ADC)から提供された OAuth トークンを使用して呼び出しを行う方法について説明します。ADC を使用してクライアント ライブラリから Google API を呼び出す方法については、クライアント ライブラリを使用した認証をご覧ください。

次の REST 手順は、開発またはテストにのみ使用し、本番環境では使用しないでください。

前提条件

ADC を使用して REST リクエストを行う前に、gcloud CLI を使用して ADC に認証情報を指定します。

  1. gcloud CLI をインストールして初期化します。詳細については、gcloud CLI をインストールするをご覧ください。

  2. gcloud CLI で認証します。

    gcloud auth application-default login
  3. ログイン プロセスを完了して、ADC で使用されるローカル認証情報ファイルに認証情報を保存します。

詳細については、ローカル開発環境の ADC の設定をご覧ください。

REST リクエストを行う

この例では、2 つのリクエスト ヘッダーを渡します。

  • 次のコマンドを使用してトークンを生成し、Authorization ヘッダーで OAuth トークンを渡します。

    gcloud auth application-default print-access-token

    返されるトークンのスコープは https://www.googleapis.com/auth/cloud-platform です。

  • X-Goog-User-Project ヘッダーに、課金が有効になっている Google Cloud プロジェクトの ID または名前を渡します。

OAuth トークンを使用して Route Optimization API を呼び出すには、次の手順を行います。

  1. 次のコードサンプルで、PROJECT_NUMBER_OR_ID を Google Cloud プロジェクト番号または ID に置き換えます。

    curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    --data-binary @- << EOM
    {
    "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.73881799999999,
              "longitude": -122.4161
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.79581,
              "longitude": -122.4218856
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        },
        "endLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        }
      }
    ],
    "globalStartTime": "2023-01-13T16:00:00-08:00",
    "globalEndTime": "2023-01-14T16:00:00-08:00"
    }
    }
    EOM
    
  2. curl コマンドをコピーするには、コードサンプルの [コピー] をクリックします。

  3. コマンドをターミナル ウィンドウに貼り付けて実行します。

レスポンスは次のような JSON オブジェクトです。

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-14T00:00:00Z",
      "vehicleEndTime": "2023-01-14T00:39:22Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-14T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2023-01-14T00:19:53Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "1193s",
          "travelDistanceMeters": 9007,
          "waitDuration": "0s",
          "totalDuration": "1193s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "1169s",
          "travelDistanceMeters": 9546,
          "waitDuration": "0s",
          "totalDuration": "1169s",
          "startTime": "2023-01-14T00:19:53Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2362s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2362s",
        "travelDistanceMeters": 18553
      }
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2362s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2362s",
      "travelDistanceMeters": 18553
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
    "latestVehicleEndTime": "2023-01-14T00:39:22Z"
  }
}

トラブルシューティング

この API がエンドユーザー認証情報をサポートしていないというエラー メッセージがリクエストから返された場合は、ADC 設定のトラブルシューティングをご覧ください。