オープンソースの経路探索「OpenTripPlanner」をDockerで動かして岡山県で経路探索をする

見覚えのあるタイトル！と思った方はヴァル研Qiitaマニア🤔
後輩が書いた記事を~~そっくりパクって~~参考にdocker使ってどこの環境でも動くものにしてしまおう。

細かい説明は、そちらの記事にあるので、そちらを見ていただいて...()
https://qiita.com/kumatira/items/658e7b75785c854f0f69

## 今回作成したDockerfileがこちら
多少、上の記事の手順を入れ替えてますが、同じ内容です。
https://github.com/soe-j/open-trip-planner/blob/master/Dockerfile

~~~Dockerfile:Dockerfile
FROM ubuntu:latest

RUN apt-get -y update 

RUN apt-get install -y openjdk-8-jre
RUN apt-get install -y wget

RUN cd /root && \
    mkdir otp && \
    cd otp && \
    wget "https://repo1.maven.org/maven2/org/opentripplanner/otp/1.3.0/otp-1.3.0-shaded.jar" && \
    wget "http://www3.unobus.co.jp/opendata/GTFS-2018-04-15.zip" -O unobus.gtfs.zip && \
    wget "http://www.shimoden.net/busmada/opendata/GTFS_JP.zip" -O shimodenbus.gtfs.zip && \
    wget "http://loc.bus-vision.jp/gtfs/ryobi/gtfsFeed" -O ryobibus.gtfs.zip && \
    wget "http://loc.bus-vision.jp/gtfs/okaden/gtfsFeed" -O okadenbus.gtfs.zip && \
    wget "http://loc.bus-vision.jp/gtfs/chutetsu/gtfsFeed" -O chutetsubus.gtfs.zip

RUN cd /root && \
    apt install -y osmctools && \
    wget "http://download.geofabrik.de/asia/japan/chugoku-latest.osm.pbf" && \
    osmconvert chugoku-latest.osm.pbf -b=133.455201,34.274923,134.298740,35.284564 --complete-ways -o=okayama.pbf && \
    mv okayama.pbf otp/ 

ENTRYPOINT java -Xmx5G -jar /root/otp/otp-1.3.0-shaded.jar --build /root/otp/ --inMemory
~~~

このDockerfileのあるディレクトリで、以下のコマンドを実行。
Image名のkumanoは特に意味はありません。uniqになれば何でもいいです。

~~~bash
$ docker build -t kumano/otp:0.1 ./
$ docker run --name otp -p 8080:8080 kumano/otp:0.1
~~~

## docker-composeも使えるあなたはこちら
Dockerfileが同じディレクトリにある想定です。
https://github.com/soe-j/open-trip-planner/blob/master/docker-compose.yml

~~~yml:docker-compose.yml
version: "2"
services:
  otp:
    build:
      context: ./
    image: kumano/otp:0.1
    ports:
      - 8080:8080
~~~

dockerコマンドを叩く代わりに、このコマンドを実行。
docker-compose.ymlのあるディレクトリでお願いします。

~~~bash
$ docker-compose up
~~~

## さて、動作確認
buildもrun(up)もめちゃめちゃ時間がかかるので、お茶でも淹れていましょう🍵
dockerコンテナが立ち上がった後も、じわりじわりとログが流れていてOTPが起動できてないことがわかります。

~~~
otp_1  | 10:36:50.176 INFO (NetworkListener.java:750) Started listener bound to [0.0.0.0:8080]
otp_1  | 10:36:50.181 INFO (NetworkListener.java:750) Started listener bound to [0.0.0.0:8081]
otp_1  | 10:36:50.184 INFO (HttpServer.java:300) [HttpServer] Started.
otp_1  | 10:36:50.184 INFO (GrizzlyServer.java:153) Grizzly server running.
~~~
上のようにポート8080が開通したら合図です。
以下のパスを叩いてみて喜びましょう👐

#### 利用できる交通手段
~~~
http://localhost:8080/otp/routers/default/
~~~

#### Feedid一覧
~~~
http://localhost:8080/otp/routers/default/index/feeds
~~~

#### 上で取れたFeedIDの一つを使ってFeedの提供事業者を見てみる
~~~
http://localhost:8080/otp/routers/default/index/agencies/1
~~~

#### 上の情報から取れる事業者IDを使って、その事業者の全系統表示
~~~
http://localhost:8080/otp/routers/default/index/agencies/1/1260001000674/routes
~~~

#### 経路探索
~~~
http://localhost:8080/otp/routers/default/plan?fromPlace=34.656513,133.975075&toPlace=34.665495,133.918570&time=1:02pm&date=11-14-2018&mode=TRANSIT,WALK&maxWalkDistance=500&arriveBy=false&numItineraries=5
~~~
~~~
http://localhost:8080/otp/routers/default/plan?fromPlace=34.779151,134.038106&toPlace=34.665495,133.918570&time=1:02pm&date=11-14-2018&mode=TRANSIT,WALK&maxWalkDistance=500&arriveBy=false&numItineraries=5
~~~

## まとめ
Dockerを使ってこんなに手順を減らせました

~~~bash
$ git clone git@github.com:soe-j/open-trip-planner.git
$ cd open-trip-planner
$ docker-compose up
~~~
Docker最高。
@kumatira ご教示ありがとうございました！