Slide 1

Slide 1 text

© GO Inc. タクシーアプリ『GO』を運営する中 発生した様々な失敗例の紹介 2024.06.18 ユーザーシステム部 / 高柳 翔 GO株式会社

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

© GO Inc. 1. 社名変更に伴うパッケージ名の更新で苦労した話 2. ランチャーに表示されるアプリ名が意図しないものになった話1 3. ランチャーに表示されるアプリ名が意図しないものになった話2 4. ある日を境にGoogle Playの評価数が激減した話 3 目次

Slide 4

Slide 4 text

© GO Inc. 普段あまり聞くことのないであろう、 失敗談や特殊な対応についてお話しします 4 目次

Slide 5

Slide 5 text

© GO Inc. どうか同じ轍を踏まないでください。 それだけが私の望みです。 5 目次

Slide 6

Slide 6 text

© GO Inc. 6 社名変更に伴う パッケージ名の更新 で苦労した話 01

Slide 7

Slide 7 text

© 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 前提

Slide 8

Slide 8 text

© 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』開始

Slide 9

Slide 9 text

© 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に商号変更

Slide 10

Slide 10 text

© GO Inc. ● 当時、ちょうど別の新サービスのローンチもあり、会社として mobitilitytechnologies.app というドメインを取得していた ● ドメインもあるからアプリのパッケージ名も app.mobitilitytechnologies.* に置き換えて いこう!となった ● そうそう社名なんて変わらないでしょw 10 パッケージ名の変更

Slide 11

Slide 11 text

© 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』開始

Slide 12

Slide 12 text

© 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億円資金調達

Slide 13

Slide 13 text

© GO Inc. 13 社名変わった

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

© GO Inc. ● そもそも前身となった『MOV』ですら元々は『タクベル』というサービス名だった ○ その名残で applicationId が com.dena.automotive.taxibell である ● パッケージ名は社名やサービス名に依存しない形の方が望ましい ○ ApplicationId は難しいので別の話 ● 変更するのであれば覚悟をもって一気に変えた方が良い 15 教訓 現状でも com.dena.automotive.taxibell.* と app.mobilitytechjnologies.* が 共存している状態のままになってしまっており、 依存解決などのタイミングで、クラスによってどちらのパッケージ名が正しいのか を確認する必要が出てきてしまっている😇

Slide 16

Slide 16 text

© GO Inc. 16 ランチャーに表示される アプリ名が 意図しないものになった話1 02

Slide 17

Slide 17 text

© GO Inc. 17 発覚

Slide 18

Slide 18 text

© GO Inc. 端末の言語設定が英語の時にだけ ランチャーの表示名が「Core」になる 18 問題

Slide 19

Slide 19 text

© 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 が表示される

Slide 20

Slide 20 text

© GO Inc. 20 前提2 ● そもそも不要な定義が存在していた ○ :legacy モジュールの app_name に「GO」が、:legacy_core モジュールの app_name に 「Core」 が定義されていた ■ 「Core」 という文字列が定義されていた理由は不明 ※マルチモジュール化を進めている最中で、data 層を :legacy_core へ、それ以外の全般(主 に UI 層) を :legacy に置いていた この時点での表示上の優先順位は :legacy > :legacy_core

Slide 21

Slide 21 text

© 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

Slide 22

Slide 22 text

© GO Inc. 22 前提4 ● 文字列リソースの移行が完了し、:android-core から文字列リソースが削除された この時点での表示上の優先順位は :legacy_core > :ui:ui-resource

Slide 23

Slide 23 text

© GO Inc. 23 前提4 ● 文字列リソースの移行が完了し、:android-core から文字列リソースが削除された この時点での表示上の優先順位は :legacy_core > :ui:ui-resource Core!!😃

Slide 24

Slide 24 text

© GO Inc. 24 原因 ● リソース読み込みは実動作を見るに :app モジュールが最優先となるが、それ以外はモ ジュールの名前による優先順位がある ● 端末の言語設定が日本語の場合に問題が健在化しなかった理由は、モジュールの名前の読 み込み順よりも、言語設定によるファイルの読み込み順(strings-ja.xml > strings.xml) の方が優先度が高いからだと考えられる ● dev/qa 環境では、本番アプリと区別すべく、ビルド時に gradle から app_name の値を 書き換えて「GO(検証)」としていたために本番リリースまで検知されなかった ● プロジェクト内に同じキー名で別のリソースを定義しているのがそもそもの間違いだった

Slide 25

Slide 25 text

© GO Inc. 25 対応 ● :legacy-core に定義されていた app_name を削除することで解消

Slide 26

Slide 26 text

© GO Inc. 26 ランチャーに表示される アプリ名が 意図しないものになった話2 03

Slide 27

Slide 27 text

© GO Inc. 27 発覚

Slide 28

Slide 28 text

© GO Inc. 端末の言語設定が英語の時にだけ ランチャーの表示名が「widgets」になる 28 問題

Slide 29

Slide 29 text

© GO Inc. 29 推察 ● プロジェクト内に「widgets」と定義されている文字列リソースは存在していない ● 何かしらのライブラリが悪さをしているのでは🤔 ○ app_name に 「widgets」という文字列が定義されている疑いがある

Slide 30

Slide 30 text

© GO Inc. 30 推察 ● プロジェクト内に「widgets」と定義されている文字列リソースは存在していない ● 何かしらのライブラリが悪さをしているのでは🤔 ○ app_name に 「widgets」という文字列が定義されている疑いがある 我々はアプリ名が意図しないものに変わってしまうことに一家言ある💪

Slide 31

Slide 31 text

© GO Inc. 31 原因 ● 不明 ○ 多分ライブラリのどれかだろう…とは思われるが、2 回目のやらかしなので調査よりも対策優先

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

© 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 が表示される

Slide 34

Slide 34 text

© GO Inc. 34 対応 ● :ui:ui-resource モジュールに定義されていた app_name を :app モジュールに移動 ○ :app モジュールに定義されているキーは、プロジェクト内で重複していても最優先 ● そもそも app_name というキー名は Android Studio でプロジェクト作成時にデフォルト で作られるキーなので利用しないほうがよいのでは? ○ app_name というキー名の利用をやめ、自分達で定義したキーをアプリ名として利用するように 修正

Slide 35

Slide 35 text

© GO Inc. 35 ある日を境に Google Playの評価数 が激減した話 04

Slide 36

Slide 36 text

© GO Inc. ● 『GO』では配車の一連のフローが完了した際に、一定の条件を満たした場合にストアレ ビューを書きませんか?というダイアログを表示しており、同意を得られた場合に Google Play に遷移させている ○ In-App Review 対応はまだできていないので、あくまでストアへの遷移まで ● とあるリリース時に、意図せずこのダイアログ表示処理が呼ばれなくなっていた 36 前提

Slide 37

Slide 37 text

© GO Inc. 37 発覚 とある日の デイリースクラム にて

Slide 38

Slide 38 text

© GO Inc. 38 レビューの遷移

Slide 39

Slide 39 text

© GO Inc. 39 レビューの遷移

Slide 40

Slide 40 text

© GO Inc. 40 レビューの遷移

Slide 41

Slide 41 text

© GO Inc. 41 調査 ● 有意に良いレビュー(☆4-☆5)が減少している ● ストアレビューをお願いするダイアログの表示周りのハンドリングが怪しそう ● Git の履歴を見て、対応された PR を特定

Slide 42

Slide 42 text

© GO Inc. 42 調査 ● 有意に良いレビュー(☆4-☆5)が減少している ● ストアレビューをお願いするダイアログの表示周りのハンドリングが怪しそう ● Git の履歴を見て、対応された PR を特定 非同期処理をレガシーな仕組みで呼び出していた箇所 ※その先でストアレビューをお願いするダイアログを表示していた

Slide 43

Slide 43 text

© GO Inc. 43 犯人は自分

Slide 44

Slide 44 text

© GO Inc. 44 対応 ● 意図せず消えていたレビュー促進ダイアログの表示ロジックを復活 ● 無事にストアレビュー数も改善した ● ストアに遷移させるだけでここまであからさまに変化があるのであれば、In-App Review を実装するとより効果が望めそう

Slide 45

Slide 45 text

© GO Inc. 45 結果

Slide 46

Slide 46 text

© GO Inc. どうか同じ轍を踏まないでください。 それだけが私の望みです。 46 まとめ

Slide 47

Slide 47 text

文章・画像等の内容の無断転載及び複製等の行為はご遠慮ください。 © GO Inc.