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

モバイルアプリにおける技術的負債とは

 モバイルアプリにおける技術的負債とは

こちらのイベントの登壇資料です
モバイルアプリの技術的負債 みんなで学ぶ Lunch LT

Sadashi Ota

April 10, 2023
Tweet

More Decks by Sadashi Ota

Other Decks in Technology

Transcript

  1. © Kakaku.com Inc. All Rights Reserved. 自己紹介 太田 定志(おおた さだし)

    • 2018年 株式会社カカクコム入社 • 食べログアプリ開発部 基盤チーム リーダー • アプリ開発部 23名(内、基盤チーム 8名) • Android/iOSは半々ぐらい • 主にAndroidアプリを担当 • 初めてAndroid触ったのは2010年 • 最近の業務 • アーキテクチャの見直し、リファクタリング、OS/ライブラリのアップ デート、リリースフローの最適化、CI/CDの改善、開発環境の整備、採 用、チームビルディング などなど、、、 • 趣味 • 漫画、アニメ鑑賞(割となんでも)、バスケ(主に観戦) • Twitter • sada(@sadashi_ota) • Qiita • sadashi 2 TWITTER, TWEET, RETWEET and the Twitter logo are trademarks of Twitter, Inc. or its affiliates. The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.
  2. © Kakaku.com Inc. All Rights Reserved. 目次 1. 食べログについて 2.

    技術的負債とは 3. モバイルアプリでの技術的負債 4. まとめ 3
  3. © Kakaku.com Inc. All Rights Reserved. 食べログとは? 月間9,400万人*を超える国内最大規模のグルメサービス ※PC、スマートフォンアプリ、スマートフォンサイトの合計 独自のランキングやユーザーの口コミ・写真

    をもとに、様々なジャンルの人気のレストラン、 目的や予算にぴったりのお店が見つかり、 簡単にネット予約できます。 *2022年12月現在。サイトを訪れた人をブラウザベースで数えた利用者数です(特定のブラウザ、OS等によっては一定期間経過後に再訪した利用者を重複計測する場合があります)。 モバイル端末のウェブページ高速表示に伴う利用者数の重複や、第三者による自動収集プログラムなどの機械的なアクセスについては可能な限り排除して計測しています。 なお、食べログにおいては、2022年2月をもってAMP(Accelerated Mobile Pages)対応を終了いたしました。 食べログについて 5
  4. © Kakaku.com Inc. All Rights Reserved. 食べログについて 6 食べログAndroidアプリ •

    アプリ初版リリース(2011/12/13)から10年以上経過 • 2014年フルリニューアル以降、ずっとサービスの改善を継続してきた • 現在のソースコードは38万ステップぐらい • 画面数は100を超える規模 • 機能もたくさん • 店舗の検索 • 店舗の詳細情報閲覧 • 口コミ投稿 • 口コミ閲覧 • 予約 • 保存(ブックマーク的なもの) • 認証(複数プロバイダ) • 課金(Play Billingを利用した定期購入) • ユーザー間でのメッセージのやり取りやフォロー • 色々なコンテンツ配信 • The Tabelog Award、百名店、食べログマガジン など
  5. © Kakaku.com Inc. All Rights Reserved. 食べログについて 7 本日話したいこと •

    現在の食べログAndroidアプリは技術的負債を返済するべくリアーキテクチャを実施中 • そのリアーキテクチャをしながら気づいた技術的負債との向き合い方についてお話します • 技術的な話はあまりしません • こんな話ができればと思っています • 技術的負債とはどんなものなのか • どのように対処していくべきなのか • 実際にどんなことをやってきたかは、1月にテックブログを書いたのでよかったら読んでください • 食べログAndroidアプリの技術的負債解消への道のり
  6. © Kakaku.com Inc. All Rights Reserved. 9 技術的負債とは • 技術的負債とはどのように生まれるのか?という説明でマーティン・ファ

    ウラー氏は以下の4事象を定義しました • Reckless(無謀な) / Prudent(慎重な) • Deliberate(意図的に) / Inadvertent(意図的でない) (マーティン・ファウラー, https://martinfowler.com/bliki/TechnicalDebtQuadrant.html, 2009) • 今回はこの中でもInadvertent(意図的でない)に着目 • 長く運用しているケースはこれに悩まされていることが多い(気がする) • 意図的でない(=偶発的に生まれる)技術的負債 • ではそれが技術的負債だとどのように気が付くのか?
  7. © Kakaku.com Inc. All Rights Reserved. 12 技術的負債とは そのため、まずは明確化 •

    認識できてないならそれを知るところから • 理想が曖昧ならそれを明確にする これらに必要なことは学び
  8. © Kakaku.com Inc. All Rights Reserved. 13 技術的負債とは 技術的負債というとネガティブな印象だけど、 それを認識できたときは学びがあった証拠なので

    もっとポジティブに考えてもいい(はず) 個々人の成長も技術的負債を返済する足がかりに なる。 大事なのは負債を作り込んだことではなく いち早く負債を認識すること。
  9. © Kakaku.com Inc. All Rights Reserved. 15 技術的負債とは 明確になったら、まずは小さいうちに対処するのがベター。 溜め込んでしまうと

    • 負債の返済にかかるコストもどんどん大きくなる • 負債を溜め込んでいる間も開発効率は下がっている とはいえ、様々な理由で 負債が大きくなってしまうことはある
  10. © Kakaku.com Inc. All Rights Reserved. 16 技術的負債とは 大きくなってしまった負債を返済するには? 理想とのギャップが曖昧で大きいままだと結構辛い。

    そのため、できるだけ明確にして小さくできるとよい。 小さくすると色々メリットがある。 • 早くリリースできる • 重要な箇所に集中できる • 学びが得られる(理想がより具体的になる)
  11. © Kakaku.com Inc. All Rights Reserved. 17 技術的負債とは 食べログAndroidアプリのリアーキテクチャでは リファクタリングと画面毎のミニリライトを実施しています。

    画面毎にミニリライトする理由は画面自体も 新しいライブラリ(ViewBinding)で作り直しているためです。 このように対応進めることで、 フルリプレイスよりは短いスパンでのリリースを実現しています。 神クラス UI UI UI UI UI 新UI ロジック 神クラス
  12. © Kakaku.com Inc. All Rights Reserved. 19 モバイルアプリでの技術的負債 モバイルアプリではどんな負債があるか? 基本的に変化が激しいので陳腐化しやすい

    例えば、AndroidのUI周り(ざっくり) • 標準API(findViewById) • Butter Knife • Data Binding • Kotlin Android Extensionのsynthetics • View Binding • Jetpack Compose
  13. © Kakaku.com Inc. All Rights Reserved. 22 モバイルアプリでの技術的負債 部分的に変更できる構成にする 責務や依存関係の整理といった基本的なこと。

    品質特性の保守性を高めることで変化に強くなる。 • 品質副特性 • モジュール性 • 再利用性 • 解析性(≒わかりやすさ) • 修正性(≒変更のしやすさ) • 試験性(≒テストのしやすさ) これをしっかりやっておくと、部分的な移行がスムーズにできる。 もし保守性が低いならそれをリファクタリングにより改善する必要がある。
  14. © Kakaku.com Inc. All Rights Reserved. 23 モバイルアプリでの技術的負債 さらに、環境起因の技術的負債も多い。 例:Androidの場合

    • TargetSdkVersionの更新 • Google Play アプリの対象APIレベル要件が決まっている • これに伴い周辺の環境・ライブラリもアップデートが必要になるケースも • Play Billing Libraryのアップデート • リリースから2年以内に更新が必要になる この辺りはアナウンスがあるから計画的に実施できるが、 更新内容次第では優先度は気にしたほうがいい。
  15. © Kakaku.com Inc. All Rights Reserved. 24 モバイルアプリでの技術的負債 具体的なアプローチとして私たちのチームでは 週1で勉強会の時間を確保しています。

    内容の一例 • 新しいもののキャッチアップ • 公式ドキュメントの読み合わせ • 他社事例を参考にディスカッション • 設計やリファクタリングについての勉強 • 技術的負債に関しての勉強 この会だけですべては賄えないですが、 これ学びのきっかけにして習慣付けるために実施しています。
  16. © Kakaku.com Inc. All Rights Reserved. 26 まとめ • 技術的負債を対処するのに大事なこと

    • いち早く認識する • 曖昧な部分はなるべく明確にする • できるだけ小さく対処する • そのために必要なこと • 継続的な学び • 新しいものにはアンテナを貼ってキャッチアップ • 設計やリファクタリングの手法 • 保守性を高める • 現時点で保守性が低いならそれを改善する方法を学ぶ • リファクタリング
  17. © Kakaku.com Inc. All Rights Reserved. 最後に 27 We are

    hiring!!! • 一緒にAndroidのリアーキテクチャやりませんか? • もちろんAndroid以外のエンジニアも募集してます • カジュアル面談大歓迎ですのでお気軽にご連絡ください • https://hrmos.co/pages/kakakucom/jobs/1011510
  18. © Kakaku.com Inc. All Rights Reserved. ご清聴ありがとうございました 28 Android is

    a trademark of Google LLC. Kotlin is a registered trademark of the Kotlin Foundation.