Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マップを速く表示するために

 マップを速く表示するために

※ 下記はGeminiによる本スライドの要約です

課題:ポート増加に伴うマップ表示の遅延
LUUPは電動マイクロモビリティのシェアリングサービスで、アプリ起動時に表示されるマップが重要な役割を担っています。 当初は約50箇所だったポート数が急増し、全ポート情報を読み込む方式では表示に著しい遅延が発生するようになりました。 これによりユーザーが利用を諦める可能性が懸念されました。

対策:必要な情報のみを取得・描画
この課題に対し、以下の2段階で対応しました。

ポート情報の取得:
課題:位置情報や車両数など、時々刻々と変化するポート情報を高頻度で取得する必要がありました。
対策:Geohashという技術を活用し、DBレコードにGeohash情報を含めることで、アプリは現在画面に表示されている範囲に必要なポート情報のみを効率的に取得できるようにしました。

アプリでのポート描画:
課題:Google Maps SDKを利用していましたが、大量のピンを描画するとパフォーマンスが低下します。
対策:画面内に表示されているピンのみを描画し、画面外に出たピンはマップから削除することで、描画負荷を軽減しました。
これらの工夫により、ポート表示速度は改善されました。

さらなるポート増加と継続的改善
しかし、2023年5月時点で約3,000箇所だったポート数は、現在13,000箇所以上にまで増加しています。 パフォーマンスを維持・向上させるため、以下の取り組みを進めています。

計測と評価: ポートが表示されるまでの時間をSLI(サービスレベル指標)として設定し、SLO(サービスレベル目標)を定義。 ダッシュボードで状況を可視化し、客観的な評価を可能にしました。

今後の対策: ポート情報のキャッシュや、ローディング表示の改善、ユーザーにとって真に必要なポートのみを表示するUI/UXの改善などを検討中です。
LUUPは今後もポート数の増加が見込まれるため、継続的なパフォーマンス計測と改善を通じて、ユーザー体験の維持・向上を目指しています。

More Decks by Atsushi Otsubo (tsuboyan)

Other Decks in Technology

Transcript

  1. Luup, Inc. - Confidential and Proprietary 2 ⾃⼰紹介 2020.04~ •

    新卒⼊社 • iOSエンジニア 2023.11~ • iOSエンジニア 株式会社Luup Software Development 部 iOS エンジニア ⼤坪 敦 (@tsuboyan)
  2. 1. ポート情報の取得 • 位置情報 (緯度経度) • 停車可能な車両の種類、許容量 • 停車中の車両の台数 •

    割引情報など 2. ポートの描画 • ピンの種類・画像の決定 • アプリのフィルター設定による絞り込み • Google Maps SDKのピン描画APIの呼び出し ポートピンの表示に必要な 2ステップ
  3. 1. ポート情報の取得 • 位置情報 (緯度経度) • 停車可能な車両の種類、許容量 • 停車中の車両の台数 •

    割引情報など 2. ポートの描画 • ピンの種類・画像の決定 • アプリのフィルター設定による絞り込み • Google Maps SDKのピン描画APIの呼び出し ポートピンの表示に必要な 2ステップ
  4. 1. ポート情報の取得 • 位置情報 (緯度経度) • 停車可能な車両の種類、許容量 • 停車中の車両の台数 •

    割引情報など 2. ポートの描画 ポートピンの表示に必要な 2ステップ 時事刻々と変化する
  5. 表示に必要なポートだけをどうやって取得するか • ポートのDBレコードにGeohashを含めている • アプリからは、マップの表示に必要な Geohash のクエリを発行することで、必要なポート情報を取 得する ポート名 ポートの住所

    緯度 経度 … Geohash 東京駅Aポート 東京都hoge 35.6 139.6 … xn76ur 東京駅Bポート 東京都fuga 35.4 139.3 … xn76ur … … … … … … 大阪駅ポート 大阪府piyo 34.9 135.8 … za65ab
  6. 表示に必要なポートだけをどうやって取得するか • ポートのDBレコードにGeohashを含めている • アプリからは、マップの表示に必要な Geohash のクエリを発行することで、必要なポート情報を取 得する ポート名 ポートの住所

    緯度 経度 … Geohash 東京駅Aポート 東京都hoge 35.6 139.6 … xn76ur 東京駅Bポート 東京都fuga 35.4 139.3 … xn76ur … … … … … … 大阪駅ポート 大阪府piyo 34.9 135.8 … za65ab
  7. ポートピンの表示に必要な 2ステップ 1. ポート情報の取得 • 位置情報 • 停車可能な車両の種類、許容量 • 停車中の車両の台数

    • 割引情報など 2. アプリでのポートの描画 Geohashを用いて、必要なポートだけを取得 できるように
  8. ポートピンの表示に必要な 2ステップ 1. ポート情報の取得 • 位置情報 • 停車可能な車両の種類、許容量 • 停車中の車両の台数

    • 割引情報など 2. アプリでのポートの描画 • ピンの種類・画像の決定 • アプリのフィルター設定による絞り込み • Google Maps SDKのピン描画APIの呼び出し
  9. アプリでのポートの描画 • マップには Google Maps SDK を利用 ◦ ポートピンを大量に表示するとその分、描画パフォーマンスも落ちる •

    画面内にあるピンのみを描画して、画面外となったピンをマップから削除することでパフォーマンス の低下を抑えている
  10. ポートピンの表示に必要な 2ステップ 1. ポート情報の取得 • 位置情報 • 停車可能な車両の種類、許容量 • 停車中の車両の台数

    • 割引情報など 2. アプリでのポートの描画 • ピンの種類・画像の決定 • アプリのフィルター設定による絞り込み • Google Maps SDKのピン描画APIの呼び出し Geohashを用いて、周囲のポートだけを取 得できるように 地図画面領域内だけ描画するように
  11. 1 LUUPとは 展開エリア 全国ポート数 13,000 箇所以上 展開都市 東京 横浜 神⼾

    京都 ⼤阪 名古屋 宇都宮 東京 ⼤阪 横浜 京都 名古屋 神⼾ 宇都宮 ※2025年4⽉時点 広島 広島 仙台 仙台 福岡 福岡 etc. 北九州
  12. • ポート情報のキャッシュ • マップやポートピンの UI / UX の改善 ◦ ポート情報が読み込み中であることがわかるように

    ◦ ユーザにとって必要なポートだけが表示されるように さらなる対策を検討中
  13. 課題:ポート数が増加しており、マップに表示のパフォーマンス低下が問題に 対策: ◦ ポートを取得する範囲を限定 (geohash の活用) ◦ 画面に見えているポートのみ描画、これ以外を削除 ◦ ポートの表示時間をSLIとして計測し、評価・改善できる状態に

    今後: ◦ ポート数はますます増加する ◦ パフォーマンス計測を継続し、適度にポート情報をキャッシュできるようにしたり、 UI/UXを改善することでユーザ体験の維持・向上を図りたい まとめ