見出し画像

経路探索エンジンの開発者がiOSアプリ開発に挑戦してみた

🎄この記事はNAVITIME JAPAN Advent Calendar 2023の2日目の記事です。


こんにちは、5Dです。
ナビタイムジャパンの研究開発部門で公共交通機関の経路探索エンジンの開発をしています。

今回は入社以来、公共交通機関の経路探索エンジンの開発をしてきた私が、3ヶ月間、iOSアプリの開発に携わってみて感じたことをお話しします。


アプリ開発をすることになった経緯

そもそも、経路探索エンジンの開発のみを行ってきた自分がアプリ開発をすることになったのかというと、私自身、経路探索エンジンの開発に長く携わっている中で「自分が開発しているエンジンの結果が、どのように利用されて、アプリで表示されているのか?」を知りたい、と感じるようになりました。

昨年度末に、上司に相談をしたところ、『乗換NAVITIME』のアプリ開発に挑戦してみないかと話をもらい、実際に、3ヶ月間、iOSアプリの開発を行うことになりました。

いざアプリ開発へ

初めてswiftを触ってみて

開発に入る前に、一番不安に感じていたのが、言語などの技術の違いを理解するのにどのぐらい時間がかかるか?という部分でした。
実際に開発を始めてみると、swiftのコードを書くことにあたっては、あまり苦戦はしませんでした。

経路探索エンジンの開発ではC++を使用していますが、classやstructなどは、宣言の仕方に少し違いはあれど、大枠は似ているように感じたため、比較的コードを読みやすかったのが原因かもしれません。
普段触っているC++と違う部分を学びながら、コードを書くのは非常に新鮮な体験で、またswift以外の言語も触ってみたいと思いました。
実際に面白いと感じたswiftの記法をいくつかご紹介します。

<guard>

swiftのコードを読んでいて、最初に違和感があったのが、guard文でした。guard文は、条件に合致しないときに行う処理を記載し、後続の処理を行わないようにする記法です。
最初は、if文で事足りるのではないかと思い、あまりありがたみがわかりませんでした。しかしif文と違い、guardの先の処理が行われないことが明確になるというメリットがあり、最終的には使いやすい記法だと感じました。

func TestFunc() {
    guard 条件式 else { return }
    // 条件に合致した時だけ下に進む
}

<enumに情報を持たせられる>

swiftで一番驚いた記法が、enumに付加情報を持たせられることでした。
一部のcaseの時だけ、情報を持たせて、処理を変えたりすることができ、便利な反面、あまりにも個々のcase独自の情報を多く持たせすぎると、逆に処理がわかりにくくなるように感じ、扱い方が難しい記法だと感じました。

enum TestEnum {
    case withInt(a: Int)
    case withString(b: String)
}

スマートフォンの画面が小さい…

開発中にアプリを触っていて一番感じたことが、思った以上に「スマートフォンの画面が小さい」ということです。
経路探索エンジンからの返却では、経路に関する様々な情報を返却しています。ただ、いざ、その情報をスマートフォン上に表示しようと思うと、画面内に収めるようにするのが難しく、収まったとしてもかえってわかりづらくなってしまうということが往々にしてありました。
経路探索エンジンの開発では、独自のツールで経路を確認しており、アプリの画面で経路を確認することが少ないです。ですので今後は、実際にアプリで表示するとしたらどうなるかも考えたいと考えております。

バスロケーションシステム機能をリリース

そんな中、3ヶ月の開発期間で、最終的にバスロケーションシステム機能をリリースすることができました。
自分が作った画面が実際に自分のスマートフォンで動いている状況が新鮮で、普段の経路探索エンジンのリリースとは違った達成感を得られました。

最後に

3ヶ月のアプリ開発を終え、現在は、再度、経路探索エンジンの開発を行っています。
「スマートフォンの画面が小さく感じる」といった知見は、経路探索エンジンの開発を行う上でも、意識していきたいと感じる内容で、今まで開発したことのないiOSアプリ開発に、勇気を出して挑戦してみてよかったと感じました。
今後も違うサービスの開発に携わることができるようであれば、積極的に関わっていきたいです。