物流2024年問題間近、配車アプリを作ることが出来るAPIを使ってみよう（前編）

# はじめに
HEREでエンジニアをしておりますkekishidaと申します。物流2024年問題間近ということで、HEREにおける物流DX向けソリューションの雄、Tour Planning APIについて紹介します。

以前、拙記事においてWaypoint sequence APIを使用して物流DXをPythonでプロトタイピングする試みをしました。

https://qiita.com/kekishida/items/872a95079503ff36b544

しかし、Waypoint sequence APIは車両１台に対する最適な配送経路を提供するもので、複数車両に荷物を割り当てるようなことはできません。今回はより**本格的に**物流DXソリューションを実装することが可能なこのTour Planning APIについて説明します。

https://www.here.com/platform/tour-planning

https://www.here.com/docs/category/tour-planning-api

# Tour Planning APIとは？
Tour Planning APIと聞くと、日本人の感覚では、旅行を計画するためのAPIなのかな？と思ってしまいますが、こちらは純粋に**物流向けに特化したAPI**となります。こちらのAPIを使用するだけで、HERE Platoformが提供する道路ネットワーク情報、トラック規制情報、リアルタイム渋滞情報などを利用した高度な配車アプリケーションを実装することが可能となります。

**但し**、使い方に少しコツが入ります。そういうわけで、皆様になかなかこのAPIを気軽に体験して頂くことが難しいという課題がありました。その様な中、つい最近、このTour Planning APIのデモサイトが日本地図対応しました。この前編ではこちらのデモサイトの使用方法について解説し、このTour Planning APIでできることを簡単に紹介したいと思います。

https://demo.tourplanning.ext.here.com

そして、後編ではより複雑なユースケースについて、Pythonを使用してプロトタイピングできればと思います。

# Tour Planningデモサイトの設定
## デモサイトへのアクセス
まずデモサイトにアクセスすると以下のようにAPIキーの設定が求められます。もしすでにHEREのアカウントを所有しており、Tour Planning 用のAPIキーを発行済みであれば、左のENTER API KEY欄にAPIキーを入力してください。すなわち、以下で説明するHEREアカウントの登録及びTour Planning API用のAPIキー発行については読み飛ばしていただいても問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/f7fd3874-38da-657d-f450-82d6acb3ee89.png)
## HEREアカウントの登録
もし、HEREのアカウントをお持ちでない場合は以下のサイトを参考にアカウントの登録をしてください。

https://qiita.com/kekomat/items/d2e29bac84a27c1ec521

https://qiita.com/Akira-Isegawa/items/a31be5893e362c6f10c3

## Tour Planning API用のAPIキー発行
次に、Tour Planning API用のAPI KeyをStep By Stepで説明いたします。
まずは、http://platform.here.comにアクセスします。
### 新しいプロジェクトを作成
1. 右上部のランチャよりプロジェクトマネージャを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/7e2596b7-6cec-26a4-feee-3ed4a509797b.png)
2. 適当なプロジェクト名とプロジェクトIDを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/65f8bace-a2ea-60c7-eb1e-17b1dd177b83.png)
3. プロジェクトが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/3866eaaf-ccd4-d4f7-3df6-45c64c4d93ad.png)
### プロジェクトとTour Planning APIサービスのリンク
1. サービスを選択し、サービスリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/044c7c63-c8b2-5d0e-9b30-1ea646b0d218.png)
2. 使用したいサービス、すなわちTour Planning APIを検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/3abf4c0f-cb4a-389c-f448-2bb644e55f9e.png)
3. リンクボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/77baf7d8-cf08-f04f-55ce-31461e36ebab.png)
4. これでプロジェクトとサービスがリンクされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/3f752bde-e4c3-96f7-b3da-8dd8d531142e.png)
### Tour Planning API用アプリの登録
1. 右上部のランチャよりアクセスマネージャを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/ca0b7bb3-433a-ca00-3350-2704a8f9f567.png)
2. 新しいアプリ登録ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/25558c83-4a0a-51b3-7fab-d159c9a9ef9c.png)
3. アプリ名と先ほどのプロジェクト名を入力し、新しいアプリを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/dcdaa5d8-058b-b256-0ee7-9ea51905524e.png)
### APIキー発行
1. 左のAPIキータブをクリックして、APIキーを発行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/00d77d1f-67d6-07c1-700c-f52d660dd6b6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/7a94e5f9-a9c3-dca4-89db-42b371d8b5de.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/9ce93128-8bda-2a84-4171-6c08411638a8.png)
以上でAPIキーの発行は終了です。
## デモサイトのAPIキー設定
デモサイトに再び戻り、右側ペインにある``ENTER API KEY``フィールドに取得したAPIキーを入力します。ついでに、``CHOOSE YOUR CURRENCY``をJapanese Yenに設定しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/42af8fbc-7a6a-634b-cdc9-1ec146b7cefc.png)

これで準備完了です。

# 京都市内での荷物配送シミュレーション
配送先については以下の記事と同一といたします。

https://qiita.com/kekishida/items/872a95079503ff36b544#シミュレーションするシナリオ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/5e6b3ab1-a3a7-090a-de16-da4d34ac9c98.png)

## 前提条件
1. 最短時間で荷物を配送する。
2. 大型のオブジェを配送するため、1車両あたり３つしか荷物を配送することができない。 
3. 車両及び要員は５人確保されている。

## 解決したい課題
配車アプリということで**必要な車両及び要員と最適な経路**となります。

## 配車計画の開始
### 手順1.車両の設定
まず配送デポを京都駅と設定します。そして、VEHICLE TYPE(車種)をCar(普通車）、MODEをCustom Fleetとすることで、より細かな設定をしております。ここでは、所有車両は５台、最大積載数は３つ、さらにコストの目安を設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/6a8a1a22-ebc9-dfcd-7a35-fa00a07731f9.png)
### 手順2. 配送先の設定
CHOOSE MODE(選択モード）をマニュアルに選択することで、ADDRESSに宛先を入力した結果を本デモサイト内で自動的に緯度経度に変換してくれます。入力が終了した後、プラスボタンをクリックすれば宛先リストが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/2d4b406f-43b6-5a55-a79a-98a3d6e03bd9.png)
以下が入力後のイメージです。それでは、ルート計画をボタンクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/1c419f48-dbf8-067a-acd9-6241682fbab6.png)

## 配車計画の結果発表！
４台が配車されました。それぞれ11:00にスタートして、最終の車両４が12:06に配送作業が終了する結果となりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/dd5b95a6-6088-c236-29ad-ea2891e66b95.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/3be08e02-858d-540e-8617-96d3f44047a8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/87499cae-c411-0c4b-91f5-b4e18326b4bf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/8e6e65d6-05c2-da22-c95f-71ea69332d25.png)
また各車両毎の右側の目のアイコンをクリックすると配送ルートの詳細について確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/6acaba94-cdd0-80b1-0bc5-d8bd467d01b3.png)
更に各拠点間のルートを確認するために、右側の矢印のアイコンをクリックすると、本来であれば、詳細な拠点間のルートが閲覧できるはずなのですが、現在Here WeGo (Web版）日本向けのサポートがされていないため、残念ながら以下の様な画面が出力されてしまいます。（日本での利用可能時期は現時点で未定です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104985/194e0f7e-3d55-0ce2-8d6f-5442f65f65d4.png)

# おわりに
いかがでしたでしょうか？本記事の説明でTour Planning APIのポテンシャルについてなんとなくご理解いただけたら幸いです。こちらのデモサイトはあくまでTour Planning APIで実現する代表的な機能を示すショーケースのようなもので、実はTour Planning API自体を正しく使用すれば、よりきめ細かなシナリオについても対応することが可能となります。具体的には、

- 配送エリアの制御
- 作業シフト時間の制御
- 再荷積の制御
- 集荷、配送作業の分割制御
- 積載量と配達する荷物数に応じた配送計画制御

など

次回後編では、より複雑なユースケースについてPython及びJupyterを使用してプロトタイピングを試みてみたいと思います。