第3回東京公共交通オープンデータチャレンジで最優秀賞を頂いたUpNextの、メジャーバージョンアップにそろそろ取り掛かってみます。せっかくなので、ソース公開だけでなく、試行錯誤含めた開発過程を記録公開していくことに、チャレンジします。今回は第ゼロ回です。
#1. UpNextとは
UpNextは、現在の位置情報をもとに、交通オープンデータと照合して、最寄りの駅や今乗っている電車の時刻表を自動表示させるスマホアプリです。Flutterで作られています。操作を一切しなくても最適なナビ情報を表示できるのが、独自な部分です。位置や速度や時刻をもとに、歩いているのか、電車に乗っているのか、さらにはどの電車に乗っているのかを自動判別することで、これを実現しています。
Githubにソースが公開されています。
#2. V2開発目標
V2作成にあたって、以下のような開発目標を立ててみました。
##A. 旧版アーキで限界だった性能や精度の改善
旧版で不満だったのは、主に2点です。1つ目は、都心などで周辺に駅が多い場合に、交通オープンデータのAPIアクセスが多くなってフリーズに近い状態になってしまうことです。2つ目は、駅の位置情報と実際の駅ホームがかなり離れている場合が多く(特に東京駅京葉線は500m程度離れています)、駅判定の精度が高められないことです。
APIアクセスの件は、APIアクセスのキャッシュや先読みにより軽減はできますが、限界を感じていました。またAPIアクセスを前提としていると、嬉しいことにアプリ利用者が増えた際に、オープンデータAPIのセンター側にインパクトが大きくなります。よって、V2では、事前にデータダンプAPIを使って静的データは取得しておき、現在の運行情報などリアルタイム情報のみ動的に取得することにします。また、これにより、一部鉄道の電車時刻表情報など提供されていない情報について、旧版では動的に計算生成していたものを、事前生成しておくことが可能になり、性能改善も期待されます。
駅の位置情報の件は、交通オープンデータだけでは限界があります。そのため、交通オープンデータのサイトで紹介されていた他の機関のオープンデータを探索し、国交省のデータか使えそう、と目星をつけました。
これらの事前のデータ収集と前処理をPythonで記述し、得られたデータをもとにしたV2アプリをFlutterで記述することにします。
項 | 項目 | 備考 |
---|---|---|
A1 | 静的データの事前取得 | 路線や時刻表といった数か月有効な静的データについて、都度必要な分を取得していたのを、事前一括取得してアプリに最初から保持させる。 |
A2 | 国交省の鉄道位置データの活用 | 国交省で提供されている駅位置や路線位置データを活用して、交通オープンデータと掛け合わせる。 |
##B. 旧版で対応しきれなかった積み残し対応
性能や精度の改善に手間をとられて、対応しきれなかった点について、対応することを目標にします。
項 | 項目 | 備考 |
---|---|---|
B1 | UIの改善 | Flutterの基本のリスト表示だけを使っていたが、もっとカラフルに鉄道路線図っぽく表示させる。できれば地図表示も行う。 |
B2 | 多言語対応 | 日本語以外にも対応させる。 |
B3 | iOS対応 | Androidだけの対応であったが、iOSにも対応させる。Flutter利用のため技術的課題は少ない。Appleの審査を通す手間と年貢支払いだけの問題である。 |
##C. 内部的な開発スタイルの刷新
その他、内部的には以下のような、開発スタイルの刷新を行います。ちなみに、C1/C2は、すでに準備ができ、GitHubと連携してVSCodeでコミット〜PUSHができる状態になりました。
項 | 項目 | 備考 |
---|---|---|
C1 | GitHubによる版数管理 | 従来は版数管理をしていなかった。今回は開発過程を記録公開するため、GitHubを利用する。なおV1のGitHub公開は開発完了後にファイルコピーをしただけである。 |
C2 | VSCodeの利用 | 従来はFlutter/Dartだけで作っておりAndroidStudioを利用。今回は前処理にPythonも使う予定であり、よい機会なのでVSCodeで開発する。 |
C3 | テストの記述 | 個人開発なのでテストは書いていない。しかしUpNextにおいて、ある程度の規模の開発となる中で複雑なバグを踏んだ時、テストの必要性は痛感していた。勉強を兼ねて、ちゃんとテストを書くことにする。 |
#3. 今後の展開
今後、開発が進捗した段階で、開発記録を投稿していきます。お楽しみにしてください。