【受講メモ】MixLeap Live Study #63 - 移動・交通サービスを支えるヤフーのエンジニアリング
2020年11月26日に行われた「移動・交通サービスを支えるYahooのエンジニアリング」に参加しました!
ただ聞くだけでは意味がないので、受講メモとしてnoteに残しておきます。
Yahooの移動・交通サービスの歴史
1996年 Yahooジャパン
1998年 地図、路線情報
2014年 カーナビ
2017年 MAP(リニューアル)
ヤフーでのMapboxの利用について
Maxboxの紹介
6億人以上が使ったデータを交通情報などとして編集して配信しています。
ヤフーがMapboxを採用している理由は、親会社のソフトバンクとマップボックスJPが合弁会社を作っているためです。
なぜMapboxにしたか
・Mapbox移行の目的
ヤフーはこれまで少数精鋭で地図エンジンを作成
(なかなかすべてのユーザの要望に応えることは困難)
→多数精鋭でMapboxは地図プラットフォームを作っている
(より多くのユーザに価値を届けることができる)
Mapbox機能紹介
移行することによって、スクロールの感覚が滑らかになり、使っていて気持ちよくなった。
Mapbox Studio
具体的には、UIを使って簡単にビルを3Dにしたり、色を変えたり、カテゴリ別にPOIを表示したりすることができる。
Mapbox活用事例について
Mapboxに移行することで統計ツールで様々な分析をすることができる。
1.Mapboxの渋滞情報の利用
2.MTS(TilesetAPI)
3.ヤフーのMapbox利用現状
各サービスでもすでに導入済み
4.その他興味を持ったコンテンツ
データがあれば簡単すぐに可視化できる
その他、ユースケースとして、フェイスブック社が使っているものやスナップチャットというアプリを使ったりすることができる。
まとめ
Mapboxにして良かったこと1
移行する前よりできることが確実に増えた
Mapboxにして良かったこと2
地図デザインの課題解決は誰でもできるわけではなく、時間もかかるため、Studioがあることで地図デザインの敷居が低下した。
それぞれ別々のサービスごとに配信することができるようになった。
いろいろな課題に関しても、移行する上で課題はあったが、日本に会社ができたことで、そこんメンバーとコミュニケーションできるようになり、解決できるようになった。
PC版Yahoo!地図のリニューアルで苦労した話
Yahoo地図の歴史
Yahoo!地図の機能
周辺検索、住所検索、ルート検索、距離計測、雨雲・混雑、印刷など
リニューアルについて
リニューアル経緯1:レガシーなシステム
→モダンな技術への刷新が必要となる。
リニューアル後の技術
リニューアル経緯2:UIが古めかしい
→新地図デザインにあったUIへの変更が必要
その中でも、時刻指定や表示順序、料金が安い順などのソート機能により、細かい設定が可能。
ルート検索の実装で苦労した点
1.自動検索処理
→なぜ問題が起こったのか
実装にはReact Hooksを利用
useEffect:副作用の処理を関数コンポーネントで扱える
検索リクエストが実装してあるuseEffectが一度の操作で複数回呼ばれた
→対処方法
処理前に条件を追加し、処理を走らないようにする
→結果
useEffect内の条件が増え、複雑化
管理コストが大きい
2.経由地の管理
なぜ起こったのか、結果等
自動検索処理の場合と同様に、useEffectの条件判定の複雑さが原因。
さらに、フォームの多さが複雑さを増した。
→発生させないために以下のことに気をつける
・テストの拡充
従来:手動テスト、単体テスト
→時間や手間がかかる
今後:手動テスト部分を自動化したい
ルート検索の実装でスムーズに進行した点
ルート線、マーカーの描画
情報をjsonにまとめてaddLayerに渡すだけで、ルート線を地図免状に描画することができる。
Mapboxの使い方がホームページに載っているため、スムーズに実装することが可能。
まとめ
Yahoo!MAPが全力でコロナ対策に乗り出した話
Yahoo!MAPでころな文脈で再実装された機能「混雑レーダ」について
混雑レーダーとは
技術の紹介と開発エピソード
コロナ時代の攻略法6選のうち1つを紹介
アプリケーションログの可視化を極めて健全化
混雑レーダーの提供終了(1/31)
サービス運営コストとニーズのバランスを鑑み、今年(2020年)1月末に「混雑レーダー」の提供を終了。
Yahooでも感染症への対応を検討していた最中、ユーザーから”混雑レーダーを再開してほしい”という要望が何件も寄せられていた。
1.混雑レーダーの復活
混雑レーダー負荷つを掲げ、4/1にプロジェクト発足。
延命を考慮されていない実装があるなどの課題はあったが、それらを解決し、4/10にリリース完了。わずか7営業日のこと。
混雑レーダーを実現するためのシステム(概略)
許可をいただいたユーザーの位置情報をもとに統計化し、エリアごとの混雑状況を分析。
ジェネレータと呼ばれる画像生成のサーバーが統計情報を参照して、地図タイル画像を配布する。
Yahoo!JAPANの情報の取り扱いについて基本的な考え方や方針は「プライバシーセンター」としてまとめている。
2.混雑レーダーの改善
混雑レーダーの前処理を確認し、時間短縮できる部分を探し出す。
最新データの表示までの時間を可能な限り早めた。
最新2時間前→最新20分前
更新間隔1時間毎→10分毎
どうやってやったのか?
まず、プログラムを見える化する(可視化)
4月に開発されたプログラムにログを仕込んで動作の見えるかを実行した。
→可視化後動かしてみると、たまに調子が悪いことがわかった。
・対策
失敗した場合に備えリカバリー策を用意し、実装に取り組むことで混雑レーダー20分前更新を実現することができた。
・こだわり
安定をとって30分前更新にするか迷いはあったが、9割方、20分前提供ができるのであれば、その価値を提供したかった。
攻略法 アプリケーションログの可視化を極めて健全化
Yahoo社内にはログをWEBで確認できるPFがある。
ーメリット
PCを開いてサーバーにログインしなくても良い(=スマホでも確認可能)
URLでログを関係者に共有できる
→状況を把握でき、無事に問題を解決
例えば、エラーログの場合、あらゆる障害パターンを可視化でき、手順化できる。
極めると、あらゆる障害パターンに応じた最高の回避方法があり、自動で行われる(フェイルセーフ)
起こりうる異常系のパターンを一つ一つ潰していけば、最終的には人間が対応すべきことは0になる(はず。)
まとめ
1.混雑レーダーはサービス運営コストとニーズのバランスを鑑み、一度クローズされていた。
→コロナウイルスの感染拡大により復活させた。
2.混雑レーダーは、位置情報を統計化した状態で提供している。
→プライバシーに配慮。不用意に個人情報が利用できないように工夫している
3.混雑レーダー復活後、利用者として不便に感じる点(2時間前更新)を解消。
→解消するためのキーポイントはログの可視化。BE開発では可視化が特に重要。
4.YahooにはログをWEBで確認できるプラットフォームがあり、活用している。
→今後の開発に集中できるように、運用を踏まえて開発ができることが理想。
↓その他の詳細はデブサミ関西(2020)で確認
↓登壇内容をまとめた記事
Yahoo!カーナビが抱える課題とFlutterを用いた課題解決について
1.Yahooカーナビについて
・2014年サービス開始
・iOS、Android対応のスマホあぷり
・直近のアップデート
・ドライブ記録機機能の追加(2020/05)
・Mapboxシャニ地図エンジンを変更(2020/06)
・混雑予報機能の追加(2020/08)
課題1:レガシーコード
・Swift,ObjectiveーCが混在(コア部分いついてはObjectiveーCが大半)
・Java,Kotlinが混在(コア部分についてはJavaが大半)
→長年改変し続けており、仕様が固まっていないため、コードの変更によって予期せぬ副作用が発生する
課題2:人数の増減
2019/10
iOS2名→3名
Android3名→1名
OS間の差分を押さえながら開発効率を上げたい
→Flutterの導入
2.Flutterについて
マルチプラットフォーム開発
一つのソースコードで複数のプラットフォームに対応できる
→OSでの仕様差が発生しにくい&開発工数の削減ができる
部分的な導入が可能
アプリではなく、SDKという形でコンパイルを行うことで既存のプロジェクトに対して部分的な導入を行うことができる
学習環境
公式がYouTube上でパッケージやセキュリティについての回折動画を公開している
オンライン上で有志による解説記事が掲載されている
デメリット:アプリサイズの増大
部分的な導入に際してSDKという形で組み込むためアプリサイズが増大する
・現状でおよそ30MB程度
・開発を行うことができる(ほぼ使用必須の外部ライブラリも)
→ライブラリを導入する度にOSSの使用許諾の権利について調査を行う必要がある
→Dart,Flutterも含めたライブラリが頻繁に更新されるため、その都度権利関係について確認を行う手間が発生する。
3.現状、今後の展望
現状
・本番アプリにはまだ導入されていない
・現在開発中の画面のOS噛んで共通利用される部分についてはFlutterを用いて開発されている
・週一回開発チームでモブプロを行い、開発Tipsや仕様についての共有を行う
・コア機能(ex:地図面部分)は外部ライブラリ(Mapbox等)を使用している関係上導入予定なし
今後の展望
・使える部分については検討の上、積極的に導入を進める
・OSS使用のコストは許容するが、自前で開発できそうなら自前で開発
・モブプロやペアプロを使って知識の属人化を防ぐ
イベントに参加してみて
現役エンジニアさんの話が直に聞けて非常に良い経験になりました。
個人的にYahooカーナビにはかなりお世話になっているので、開発の裏側が知れてうれしかったですね。
今はまだ使う側ですが、いつか作る側として携われたら良いですね。
またイベントがあれば参加します!