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

タクシーアプリ『GO』を運営する中発生した様々な失敗例の紹介

 タクシーアプリ『GO』を運営する中発生した様々な失敗例の紹介

GO TechTalk #27 タクシーアプリ『GO』AndroidでのreCAPTCHA導入・WebADBでの自動化 で発表した資料です。

■ YouTube
https://www.youtube.com/live/QN57jX1P-ik?si=e7nXI9IHJswlfksY&t=347

■ connpass
https://jtx.connpass.com/event/320032/

GO Inc. dev

June 21, 2024
Tweet

More Decks by GO Inc. dev

Other Decks in Programming

Transcript

  1. © GO Inc. 2 自己紹介 GO株式会社 ユーザーシステム部2G GM 高柳 翔

    (@sobachanko) アパレル店員・ホテルマンなどを経て未経験でエンジニアへ Android 歴は 15 年程(日本で最初に発売された HT-03A から) 2019 年 DeNA オートモーティブ事業部に join 2023 年 4 月に子が産まれ、家と車を買いました 保育園の洗礼をがっつり浴びていて最近はずっと体調不良 先日、隣の高堂さんとマラソン大会に出たため筋肉痛です  ノリで 12 月にフルマラソンに出ることになりました @sobachanko
  2. © GO Inc. • 弊社は 2020 年 4 月に JapanTaxi

    と DeNA の MOV/DRIVE CHART 事業が統合してでき た会社 • 統合に際して Mobility Technologies に社名が変わっている • タクシーアプリとしては『JapanTaxi』と『MOV』の 2 つがあったが、 統合後は『MOV』をベースに『GO』にリニューアルして運営していくことになった • 『MOV』の applicationId は com.dena.automotive.taxibell • applicationId は Google Play の一意の識別子となるため変えるのは難しい • とはいえ、JapanTaxi 出身の人も居るし、統合を知らずに新しく入ってくる人も居る中、 中身のパッケージ名までも 『MOV』 ベースのままというのは微妙じゃない…?という議 論があった • 変えよう! 7 前提
  3. © GO Inc. 『GO』アプリの前身である『日本交通タクシー配車』が GPSを活用したタクシーアプリとして2011年に誕生したのがはじまり。 2020年にJapanTaxiとDeNAのMOV/DRIVE CHART事業が統合しMobility Technologiesが誕生。 その後、GO株式会社へ社名変更。今は『GO』アプリを起点に、移動の社会課題解決を目指す多様な事業を手掛けている。 2011

    2012 2013 2015 2016 2017 2018 2019 2020 2021 2022 8 沿革 2023 2013/11 「Uber」ハイヤー 配車スタート 2018/9 「DiDi」 大阪でスタート 2019/4 「S.RIDE」 東京でスタート 2015年8月 JapanTaxiに 商号変更 2017年3月 「JapanTaxi Wallet」 日本初の到着前決済 2018年12月 『MOV』へ リニューアル 2018年4月 『タクベル』 神奈川でスタート 2021年11月 『GO BUSINESS』 リリース 2020年9月 『GO』 全国11エリアでスタート 2014 2020年4月 JapanTaxiとDeNAの MOV/DRIVE CHART事業が統合し Mobility Technologiesに商号変更 2023年4月 GO株式会社に商号変更 ゴールドマン・サックスより 100億円資金調達 2023年9月 『GO』 全国45都道府県に拡大 2022年12月 「タクシー産業 GXプロ ジェクト」開始 2019年6月 『DRIVE CHART』 提供開始 2011年1月 『日本交通タクシー配車』 東京でスタート 日本初のタクシーアプリ 2023年10月 チップ機能 『GO CALL Pro』 開始 2023年3月 『GO Reserve』 『GO Crew』開始 2012年12月 『日本交通タクシー配車』 日本初のネット決済 2023年12月 求人特化サイト 『GOジョブ』開始 2023年12月 「ニセコモデル」 開始 2016年7月 フリークアウトとの 合弁会社株式会社 IRIS設立 2017年6月 トヨタ自動車・未来創生ファ ンドより資金調達 2023年10月 フィデリティ・インターナショナル ・両備グループから資金調達 2023年11月 May Mobilityに出資 2023年11月 インバウンド対応 複数台配車機能 開始 2023年12月 フリークアウト・ホールディン グスから資金調達 2024年1月 株式上場準備開始 2024年1月 「日本型ライドシェア」 導入支援開始 2024 2024年6月 EV充電サービス『 GO Charge』開始
  4. © GO Inc. 『GO』アプリの前身である『日本交通タクシー配車』が GPSを活用したタクシーアプリとして2011年に誕生したのがはじまり。 2020年にJapanTaxiとDeNAのMOV/DRIVE CHART事業が統合しMobility Technologiesが誕生。 その後、GO株式会社へ社名変更。今は『GO』アプリを起点に、移動の社会課題解決を目指す多様な事業を手掛けている。 2011

    2012 2013 2015 2016 2017 2018 2019 2020 2021 2022 9 沿革 2023 2013/11 「Uber」ハイヤー 配車スタート 2018/9 「DiDi」 大阪でスタート 2019/4 「S.RIDE」 東京でスタート 2015年8月 JapanTaxiに 商号変更 2017年3月 「JapanTaxi Wallet」 日本初の到着前決済 2018年12月 『MOV』へ リニューアル 2018年4月 『タクベル』 神奈川でスタート 2021年11月 『GO BUSINESS』 リリース 2020年9月 『GO』 全国11エリアでスタート 2014 2023年4月 GO株式会社に商号変更 ゴールドマン・サックスより 100億円資金調達 2023年9月 『GO』 全国45都道府県に拡大 2022年12月 「タクシー産業 GXプロ ジェクト」開始 2019年6月 『DRIVE CHART』 提供開始 2011年1月 『日本交通タクシー配車』 東京でスタート 日本初のタクシーアプリ 2023年10月 チップ機能 『GO CALL Pro』 開始 2023年3月 『GO Reserve』 『GO Crew』開始 2012年12月 『日本交通タクシー配車』 日本初のネット決済 2023年12月 求人特化サイト 『GOジョブ』開始 2023年12月 「ニセコモデル」 開始 2016年7月 フリークアウトとの 合弁会社株式会社 IRIS設立 2017年6月 トヨタ自動車・未来創生ファ ンドより資金調達 2023年10月 フィデリティ・インターナショナル ・両備グループから資金調達 2023年11月 May Mobilityに出資 2023年11月 インバウンド対応 複数台配車機能 開始 2023年12月 フリークアウト・ホールディン グスから資金調達 2024年1月 株式上場準備開始 2024年1月 「日本型ライドシェア」 導入支援開始 2024 2024年6月 EV充電サービス『 GO Charge』開始 2020年4月 JapanTaxiとDeNAの MOV/DRIVE CHART事業が統合し Mobility Technologiesに商号変更
  5. © GO Inc. 『GO』アプリの前身である『日本交通タクシー配車』が GPSを活用したタクシーアプリとして2011年に誕生したのがはじまり。 2020年にJapanTaxiとDeNAのMOV/DRIVE CHART事業が統合しMobility Technologiesが誕生。 その後、GO株式会社へ社名変更。今は『GO』アプリを起点に、移動の社会課題解決を目指す多様な事業を手掛けている。 2011

    2012 2013 2015 2016 2017 2018 2019 2020 2021 2022 11 沿革 2023 2013/11 「Uber」ハイヤー 配車スタート 2018/9 「DiDi」 大阪でスタート 2019/4 「S.RIDE」 東京でスタート 2015年8月 JapanTaxiに 商号変更 2017年3月 「JapanTaxi Wallet」 日本初の到着前決済 2018年12月 『MOV』へ リニューアル 2018年4月 『タクベル』 神奈川でスタート 2021年11月 『GO BUSINESS』 リリース 2020年9月 『GO』 全国11エリアでスタート 2014 2020年4月 JapanTaxiとDeNAの MOV/DRIVE CHART事業が統合し Mobility Technologiesに商号変更 2023年4月 GO株式会社に商号変更 ゴールドマン・サックスより 100億円資金調達 2023年9月 『GO』 全国45都道府県に拡大 2022年12月 「タクシー産業 GXプロ ジェクト」開始 2019年6月 『DRIVE CHART』 提供開始 2011年1月 『日本交通タクシー配車』 東京でスタート 日本初のタクシーアプリ 2023年10月 チップ機能 『GO CALL Pro』 開始 2023年3月 『GO Reserve』 『GO Crew』開始 2012年12月 『日本交通タクシー配車』 日本初のネット決済 2023年12月 求人特化サイト 『GOジョブ』開始 2023年12月 「ニセコモデル」 開始 2016年7月 フリークアウトとの 合弁会社株式会社 IRIS設立 2017年6月 トヨタ自動車・未来創生ファ ンドより資金調達 2023年10月 フィデリティ・インターナショナル ・両備グループから資金調達 2023年11月 May Mobilityに出資 2023年11月 インバウンド対応 複数台配車機能 開始 2023年12月 フリークアウト・ホールディン グスから資金調達 2024年1月 株式上場準備開始 2024年1月 「日本型ライドシェア」 導入支援開始 2024 2024年6月 EV充電サービス『 GO Charge』開始
  6. © GO Inc. 『GO』アプリの前身である『日本交通タクシー配車』が GPSを活用したタクシーアプリとして2011年に誕生したのがはじまり。 2020年にJapanTaxiとDeNAのMOV/DRIVE CHART事業が統合しMobility Technologiesが誕生。 その後、GO株式会社へ社名変更。今は『GO』アプリを起点に、移動の社会課題解決を目指す多様な事業を手掛けている。 2011

    2012 2013 2015 2016 2017 2018 2019 2020 2021 2022 12 沿革 2023 2013/11 「Uber」ハイヤー 配車スタート 2018/9 「DiDi」 大阪でスタート 2019/4 「S.RIDE」 東京でスタート 2015年8月 JapanTaxiに 商号変更 2017年3月 「JapanTaxi Wallet」 日本初の到着前決済 2018年12月 『MOV』へ リニューアル 2018年4月 『タクベル』 神奈川でスタート 2021年11月 『GO BUSINESS』 リリース 2020年9月 『GO』 全国11エリアでスタート 2014 2020年4月 JapanTaxiとDeNAの MOV/DRIVE CHART事業が統合し Mobility Technologiesに商号変更 2023年9月 『GO』 全国45都道府県に拡大 2022年12月 「タクシー産業 GXプロ ジェクト」開始 2019年6月 『DRIVE CHART』 提供開始 2011年1月 『日本交通タクシー配車』 東京でスタート 日本初のタクシーアプリ 2023年10月 チップ機能 『GO CALL Pro』 開始 2023年3月 『GO Reserve』 『GO Crew』開始 2012年12月 『日本交通タクシー配車』 日本初のネット決済 2023年12月 求人特化サイト 『GOジョブ』開始 2023年12月 「ニセコモデル」 開始 2016年7月 フリークアウトとの 合弁会社株式会社 IRIS設立 2017年6月 トヨタ自動車・未来創生ファ ンドより資金調達 2023年10月 フィデリティ・インターナショナル ・両備グループから資金調達 2023年11月 May Mobilityに出資 2023年11月 インバウンド対応 複数台配車機能 開始 2023年12月 フリークアウト・ホールディン グスから資金調達 2024年1月 株式上場準備開始 2024年1月 「日本型ライドシェア」 導入支援開始 2024 2024年6月 EV充電サービス『 GO Charge』開始 2023年4月 GO株式会社に商号変更 ゴールドマン・サックスより 100億円資金調達
  7. © GO Inc. • そもそも前身となった『MOV』ですら元々は『タクベル』というサービス名だった ◦ その名残で applicationId が com.dena.automotive.taxibell

    である • パッケージ名は社名やサービス名に依存しない形の方が望ましい ◦ ApplicationId は難しいので別の話 • 変更するのであれば覚悟をもって一気に変えた方が良い 14 教訓
  8. © GO Inc. • そもそも前身となった『MOV』ですら元々は『タクベル』というサービス名だった ◦ その名残で applicationId が com.dena.automotive.taxibell

    である • パッケージ名は社名やサービス名に依存しない形の方が望ましい ◦ ApplicationId は難しいので別の話 • 変更するのであれば覚悟をもって一気に変えた方が良い 15 教訓 現状でも com.dena.automotive.taxibell.* と app.mobilitytechjnologies.* が 共存している状態のままになってしまっており、 依存解決などのタイミングで、クラスによってどちらのパッケージ名が正しいのか を確認する必要が出てきてしまっている😇
  9. © GO Inc. 19 前提1 • 文字列リソースのキー名が複数モジュールにまたがって重複していた場合、:app が最優 先となり、:app モジュール以外はモジュール名の昇順で優先順位が付けられる模様

    ◦ Android Developer 等に明確な記載はないが、実動作的にはこれっぽい モジュール名 app_name の値 hoge hoge fuga fuga piyo piyo 例1 fuga が表示される モジュール名 app_name の値 abc abc hoge hoge app app 例2 app が表示される
  10. © GO Inc. 20 前提2 • そもそも不要な定義が存在していた ◦ :legacy モジュールの

    app_name に「GO」が、:legacy_core モジュールの app_name に 「Core」 が定義されていた ▪ 「Core」 という文字列が定義されていた理由は不明 ※マルチモジュール化を進めている最中で、data 層を :legacy_core へ、それ以外の全般(主 に UI 層) を :legacy に置いていた この時点での表示上の優先順位は :legacy > :legacy_core
  11. © GO Inc. 21 前提3 • アプリの多言語化に伴いローカライゼーションツールを導入し、複数モジュールに同じ文字 列リソースが存在していた ◦ このタイミングでマルチモジュール化が少し進んで、前提

    2 の :legacy モジュールに定義さ れていた文字列リソースは :android-core に移動済み • :android-core モジュールと :ui:ui-resource モジュールにローカライゼーション ツールからインポートされた文字列リソースが入っていた ◦ 多言語化の過渡期で、理想は :ui:ui-resource モジュールにだけ存在すべきだったが、移 行が追いついておらず、 :legacy から役割を渡された :android-core にも同じファイルを インポートしていて、どちらのモジュールからでも参照できるようにしていた この時点での表示上の優先順位は :android-core(旧:legacy) > :legacy_core > :ui:ui-resource
  12. © GO Inc. 24 原因 • リソース読み込みは実動作を見るに :app モジュールが最優先となるが、それ以外はモ ジュールの名前による優先順位がある

    • 端末の言語設定が日本語の場合に問題が健在化しなかった理由は、モジュールの名前の読 み込み順よりも、言語設定によるファイルの読み込み順(strings-ja.xml > strings.xml) の方が優先度が高いからだと考えられる • dev/qa 環境では、本番アプリと区別すべく、ビルド時に gradle から app_name の値を 書き換えて「GO(検証)」としていたために本番リリースまで検知されなかった • プロジェクト内に同じキー名で別のリソースを定義しているのがそもそもの間違いだった
  13. © GO Inc. 30 推察 • プロジェクト内に「widgets」と定義されている文字列リソースは存在していない • 何かしらのライブラリが悪さをしているのでは🤔 ◦

    app_name に 「widgets」という文字列が定義されている疑いがある 我々はアプリ名が意図しないものに変わってしまうことに一家言ある💪
  14. © GO Inc. 32 対応 • :ui:ui-resource モジュールに定義されていた app_name を

    :app モジュールに移動 ◦ :app モジュールに定義されているキーは、プロジェクト内で重複していても最優先
  15. © GO Inc. 33 対応 • :ui:ui-resource モジュールに定義されていた app_name を

    :app モジュールに移動 ◦ :app モジュールに定義されているキーは、プロジェクト内で重複していても最優先 モジュール名 app_name の値 hoge hoge fuga fuga piyo piyo 例1 fuga が表示される モジュール名 app_name の値 abc abc hoge hoge app app 例2 app が表示される
  16. © GO Inc. 34 対応 • :ui:ui-resource モジュールに定義されていた app_name を

    :app モジュールに移動 ◦ :app モジュールに定義されているキーは、プロジェクト内で重複していても最優先 • そもそも app_name というキー名は Android Studio でプロジェクト作成時にデフォルト で作られるキーなので利用しないほうがよいのでは? ◦ app_name というキー名の利用をやめ、自分達で定義したキーをアプリ名として利用するように 修正
  17. © GO Inc. • 『GO』では配車の一連のフローが完了した際に、一定の条件を満たした場合にストアレ ビューを書きませんか?というダイアログを表示しており、同意を得られた場合に Google Play に遷移させている ◦

    In-App Review 対応はまだできていないので、あくまでストアへの遷移まで • とあるリリース時に、意図せずこのダイアログ表示処理が呼ばれなくなっていた 36 前提
  18. © GO Inc. 42 調査 • 有意に良いレビュー(☆4-☆5)が減少している • ストアレビューをお願いするダイアログの表示周りのハンドリングが怪しそう •

    Git の履歴を見て、対応された PR を特定 非同期処理をレガシーな仕組みで呼び出していた箇所 ※その先でストアレビューをお願いするダイアログを表示していた
  19. © GO Inc. 44 対応 • 意図せず消えていたレビュー促進ダイアログの表示ロジックを復活 • 無事にストアレビュー数も改善した •

    ストアに遷移させるだけでここまであからさまに変化があるのであれば、In-App Review を実装するとより効果が望めそう