1.4K Views
May 27, 24
スライド概要
ウェルスナビ株式会社 技術広報チームの公式アカウントです。
ビジネスをグロースするモバイルアプリの アーキテクチャの考え⽅ 北原 幹也 2024-05-22 アーキテクチャを突き詰める Online Conference 1
⾃⼰紹介 北原 幹也(Kitahara Mikiya) ウェルスナビ株式会社 フロントエンド開発 / ディレクター 経歴 ● 2023年7⽉⼊社 ● モバイルアプリ開発チーム:チーム責任者 ● 新規事業:テックリード 入社理由 ● “働く世代に豊かさを” という解決したいミッションへの共感 2 @2024 WealthNavi Inc.
アジェンダ 1. 本資料の概要 2. Androidアプリの推奨アーキテクチャが解決したい課題 3. モバイルアプリを取り巻く環境 4. モバイルアプリアーキテクチャの判断観点 5. まとめ 3 @2024 WealthNavi Inc.
1. 本資料の概要 2. Androidアプリの推奨アーキテクチャで解決したい課題 3. モバイルアプリを取り巻く環境 4. モバイルアプリアーキテクチャの判断観点 5. まとめ 4 @2024 WealthNavi Inc.
1. 本資料の概要 概要 ビジネスを成⻑させるうえでモバイルアプリは重要な⼿段の1つであり、 変化するビジネス要求に対して耐えうるアーキテクチャを選定する必要があります。 しかしながらモバイルアプリのコードベース観点のみで判断した場合、 本来考慮が必要な影響要因を⾒逃して要求を満たせないアーキテクチャを選択してしまい、 いざ、運⽤をしてみるとさまざまな問題が発⽣してしまう可能性があります。 5 @2024 WealthNavi Inc.
1. 本資料の概要 そこで今回は...... ■ Androidアプリの推奨アーキテクチャがどんな変化を考慮しているのか? ■ モバイルアプリの対応を⾏う⼈‧チームはどのように視野を広げていくと良いのか? ■ 各観点をどのような判断をしていくのが良いのか? の⼀例を整理してみました。 6 @2024 WealthNavi Inc.
1. 本資料の概要 2. Androidアプリの推奨アーキテクチャで解決したい課題 3. モバイルアプリを取り巻く環境 4. モバイルアプリアーキテクチャの判断観 5. まとめ 7 @2024 WealthNavi Inc.
2. Androidアプリの推奨アーキテクチャを構成する3つの要素 2-1. アーキテクチャに関する共通の原則 ● Androidアプリの推奨アーキテクチャを定義するために必要な原理‧原則 ○ テストのしやすさ、堅牢性、追跡のしやすさ etc. を考慮している ■ アーキテクチャを設計する際に考慮した主な原則*1 ● 関⼼の分離 ○ コンポーネントのライフサイクルに関連する多くの問題を回避し、クラスのテストのしやすさを向上 ● UIをデータモデルで操作する ○ データモデル クラスに基づいて構築でき、アプリのテストのしやすさと堅牢性を⾼める ● 信頼できる唯⼀の情報源(SSOT) ○ データに対する変更が追跡しやすくなり、それによりバグを⾒つけやすくなる ● 単⽅向データフロー (UDF) ○ データの整合性の保証が向上し、間違いの発⽣が減り、デバッグが簡単になる (*1) Google for Developers アプリ アーキテクチャ ガイド (2 22 2024) 8 @2024 WealthNavi Inc.
2. Androidアプリの推奨アーキテクチャを構成する3つの要素 2-2. Androidアプリを構成するレイヤ*1 ● アプリを拡張し、堅牢性を⾼め、テストしやすくする推奨アーキテクチャを構成するレイヤ ● UIレイヤ ○ アプリデータを画⾯に表⽰ ○ ユーザー操作や外部⼊⼒によってデータが変更されるた びに反映してUIを更新 ● ドメインレイヤ (optional) ○ 複雑なビジネスロジック ○ 再利⽤される単純なビジネスロジックをカプセル化 ○ 必要な場合のみ使⽤する ● データレイヤ ○ アプリがデータを作成、保存変更する⽅法を決定する (*1) Google for Developers アプリ アーキテクチャ ガイド (2 22 2024) 9 @2024 WealthNavi Inc.
2. Androidアプリの推奨アーキテクチャを構成する3つの要素 2-3. モジュール化 *2 ● コードベース拡⼤時に発⽣するスケーラビリティ、読みやすさ、コード品質の低下を回避する⼿法 ● モジュール分割の例 ○ アプリモジュール *3 ■ アプリケーションのエントリポイント ○ 機能モジュール ■ 機能の独⽴化した部分に特化したモジュール ○ データモジュール ■ 特定ドメインのデータとロジックをカプセル化する ○ テストモジュール ■ テスト時に必要なコードを分離する ○ 共通モジュール ■ UIモジュール、ネットワークモジュール etc. (*2) Google for Developers Androidアプリのモジュール化のガイド(2 22,2024) (*3) Google for Developers 一般的なモジュール化パターン(2 22,2024) 10 @2024 WealthNavi Inc.
Androidの推奨アーキテクチャの思想から守りたいもの 保守性 (Maintainability) の維持 ● 保守性が低下すれば、アプリケーションの運⽤‧改善が遅れてビジネスの機会損失につながる 保守性*5 maintainability モジュール性 再利⽤性 解析性 ≒ 理解容易性 修正性 ≒ 変更容易性 試験性 ≒ テスト容易性 *6 *4 (*4) Boehm, Brown, and Lipow's 23 Quality Characteristics (1976) (*5) 独立行政法人情報処理推進機構つながる世界のソフトウェア品質ガイドあたらしい価値提供のための品質モデル活用のすすめ(5 29,2015) (*6) Takuto Wada 質とスピード(2022春版、質疑応答用資料付き(5 9,2022) 11 @2024 WealthNavi Inc.
1. 本資料の概要 2. Androidアプリの推奨アーキテクチャで解決したい課題 3. モバイルアプリを取り巻く環境 4. モバイルアプリアーキテクチャの判断観点 5. まとめ 12 @2024 WealthNavi Inc.
3. モバイルアプリを取り巻く環境 ここまでの情報はAndroidアプリアーキテクチャのガイドラインとして公開されています 推奨事項とベスト プラクティスは、さまざまなアプリに適⽤できます。それにより、アプリの スケーリングを可能にし、品質と堅牢性を⾼め、テストを容易にすることができます。 ただし、これらはガイドラインとみなし、必要に応じて各⾃の条件に適応させる必要があります。 *1 ここまではあくまでガイドラインであり、 みなさまが運用しているモバイルアプリが置かれている状況を 把握して、適宜問題に対応していかなければならない (*1) Google for Developers アプリ アーキテクチャ ガイド (2 22 2024) 13 @2024 WealthNavi Inc.
3. モバイルアプリを取り巻く環境 アプリエンジニアがモバイルアプリを開発‧提供し、ユーザーが利⽤して課題解決を⽬指す アプリエンジニア 開発 利用 モバイルアプリ ユーザー 課題解決 14 @2024 WealthNavi Inc.
3. モバイルアプリを取り巻く環境 実際にはもっとたくさんの登場⼈物がいて、それぞれが時間とともに変化していく 企業 プロダクトマネージャー 課題 アプリエンジニア UIデザイナー バックエンド エンジニア QA 開発 社会 ・ 環境 カスタマー サーバー 端末・OS API 利用 利用 モバイルアプリ ユーザー DB インフラ 課題解決 サードパーティ ライブラリ OSアップデート SDKアップデート プラットフォーム ・Apple ・Google 通信キャリア・端末メーカー 15 @2024 WealthNavi Inc.
3. モバイルアプリを取り巻く環境 実際にはもっとたくさんの登場⼈物がいて、それぞれが時間とともに変化していく 企業 プロダクトマネージャー 課題 UIデザイナー アプリエンジニア QA 開発 社会 ・ 環境 バックエンド エンジニア サーバー 端末 さまざまな変化要因と不確実性の高さに対して API DB 柔軟に対応できるアーキテクチャ = 変更容易性の高いアーキテクチャ 利用 利用 インフラ モバイルアプリ ユーザー が求められます。 カスタマー 課題解決 サードパーティ ライブラリ OSアップデート SDKアップデート プラットフォーム ・Apple ・Google 通信キャリア・端末メーカー 16 @2024 WealthNavi Inc.
3. モバイルアプリを取り巻く環境 取り巻く環境からみたコードベース以外の考慮すべき観点 ● 新旧OSや端末の互換性 ○ OSやSDKのアップデートに対して、互換性をもつコードが書けること ■ モバイルアプリはいつアップデートされるかわかりません。 ■ 特にAndroidはOSのアップデートはユーザーに依存します。 ● トラブルシューティング ○ クラッシュやエラーが発⽣したときに調査がしやすいアーキテクチャであること ■ モバイルアプリはネットワークや端末などユーザーの環境依存します。 ■ ヒアリング結果等で素早く原因が特定できるように設計を⾏う必要があります。 ● チームビルディング (採⽤‧オンボーディング) ○ 社内‧社外で情報を得やすい考え⽅を取り込んだアーキテクチャであること ■ ⼀般的に普及しているアーキテクチャであれば経験がある開発者が多い ■ また、理解容易性の⾼いアーキテクチャであればすぐに活躍することができる 17 @2024 WealthNavi Inc.
1. 本資料の概要 2. Androidアプリの推奨アーキテクチャで解決したい課題 3. モバイルアプリを取り巻く環境 4. モバイルアプリアーキテクチャの判断観点 5. まとめ 6. 7. 18 @2024 WealthNavi Inc.
4. モバイルアプリアーキテクチャの判断観点 アーキテクチャの⽅向性:保守性の維持 保守性 変更容易性 アーキテクチャ 理解容易性 テスト容易性 19 @2024 WealthNavi Inc.
4. モバイルアプリアーキテクチャの判断観点 アーキテクチャの⽅向性:保守性の維持に影響を与える要因 保守性 アーキテクチャ 要因 変更容易性 ・ユーザーの状況変化に追従 ・社会環境の変化 ・モバイルOSやSDKの進化 ・サードパーティライブラリの状況変化 ・ビジネス上重要な機能の可用性 理解容易性 ・採用やオンボーディング時の受入 ・トラブルシューティングの対応容易性 ・既存アプリとの保守関係性 テスト容易性 ・安心して利用できる品質の保証・維持 ・素早くデリバリーが実施する 20 @2024 WealthNavi Inc.
4. モバイルアプリアーキテクチャの判断観点 - 基準の⼀例 アーキテクチャの⽅向性:保守性の維持に影響を与える要因をどの程度守れるか? 保守性 アーキテクチャ 要因 変更容易性 ・ユーザーの状況変化に追従 ・社会環境の変化 ・影響範囲の最小化 ・モバイルOSやSDKの進化 ・変更頻度でのグループ化 ・サードパーティライブラリの状況変化 ・不確実性の高さによる分割 ・ビジネス上重要な機能の可用性 理解容易性 ・採用やオンボーディング時の受入 ・初回コミットの速さ ・トラブルシューティングの対応容易性 ・プルリクエストのマージ速度 ・既存アプリとの保守関係性 ・アーキテクチャに関する資料の充実度 ・各層のテストカバレッジ ・安心して利用できる品質の保証・維持 ・品質を担保できるテスト実施時間 ・素早くデリバリーが実施する テスト容易性 21 @2024 WealthNavi Inc.
4. モバイルアプリアーキテクチャの判断観点 - 基準の⼀例 アーキテクチャの⽅向性:保守性の維持‧向上に影響を与える要因をどの程度守れるか? 保守性 要因 ・ユーザーの状況変化に追従 ・社会環境の変化 ・影響範囲の最小化 ・モバイルOSやSDKの進化 ・変更頻度でのグループ化 ・サードパーティライブラリの状況変化 ・不確実性の高さによる分割 ・ビジネス上重要な機能の可用性 変更容易性 開発観点・ビジネス観点において、保守性を アーキテクチャ 理解容易性 ・採用やオンボーディング時の受入 どの程度まで守りたいか ・初回コミットの速さ ・トラブルシューティングの対応容易性 ・プルリクエストのマージ速度 どのレベル守らないと行けないか ・既存アプリとの保守関係性 ・アーキテクチャに関する資料の充実度 を担当チームや組織で認識を揃え、定期的に計測する。 ・各層のテストカバレッジ ・安心して利用できる品質の保証・維持 ・品質を担保できるテスト実施時間 ・素早くデリバリーが実施する テスト容易性 22 @2024 WealthNavi Inc.
1. 本資料の概要 2. Androidアプリの推奨アーキテクチャで解決したい課題 3. モバイルアプリを取り巻く環境 4. モバイルアプリアーキテクチャの判断観点 5. まとめ 23 @2024 WealthNavi Inc.
5. まとめ ■ モバイルアプリのアーキテクチャも他のソフトウエアアーキテクチャと多分に漏れず 保守性:変更容易性、理解容易性、テスト容易性 の維持を担保できるかに重きを置いている ■ 保守性に影響を与える要因に対してどの程度守るのか?を定量的な指標を⽤意して、 担当するメンバーと合意、健康診断的に数値を⾒える化しておく ■ モバイルアプリの対応を⾏う⼈‧チームは コードベースから視野を広げ様々な変更要因を知り、周りと認識を合わせる。 モバイルアプリに置かれるビジネス事情やチーム事情に応じて 適切にアーキテクチャを選定し、指標の数値に応じて適切に変化させていく 24 @2024 WealthNavi Inc.
【重要な注意事項】 ● 本資料は、断定的判断を提供するものではなく、情報を提供することのみを⽬的としており、いか なる種類の商品も勧誘するものではありません。最終的な決定は、お客様⾃⾝で判断するものと し、当社はこれに⼀切関与せず、また、⼀切の責任を負いません。 ● 本資料には将来の出来事に関する予想が含まれている場合がありますが、それらは予想であり、ま た、本資料の内容の正確性、信頼性、完全性、適時性等を⼀切保証するものではありません。本資 料に基づいて被ったいかなる損害についても、当社は⼀切の責任を負いません。また、当社は、新 しい情報や将来の出来事その他の情報について、更新⼜は訂正する義務を負いません。 ● 本資料を利⽤することによりお客様に⽣じた直接的損害、間接的損害、派⽣的損害その他いかなる 損害についても、当社は⼀切の責任を負いません。 商号等:ウェルスナビ株式会社 金融商品取引業者 関東財務局長(金商) 第2884号 加入協会:日本証券業協会 一般社団法人日本投資顧問業協会 25 @2024 WealthNavi Inc.
ご清聴ありがとうございました 26 @2024 WealthNavi Inc.
Appendix.Ⅰ ウェルスナビでは複数の開発系ポジションで採⽤を強化しています。 主な採⽤中職種 ● ● ● ● ● バックエンド開発エンジニア エンジニアリングマネージャー モバイルエンジニア(Android) SRE ITサービスマネジメント 採⽤情報詳細 ● 下記URL(QRコード)よりご確認ください。 https://hrmos.co/pages/wealthnavi 採⽤に関する お問い合わせ先 ● ● 「カジュアルに話を聞いてみたい」という温度感でも構いません。 ウェルスナビ採⽤チーム([email protected])までご連 絡お待ちしております。 27 @2024 WealthNavi Inc.
Appendix.Ⅱ 定期的にWealthNavi開発(技術‧組織)に関する情報を発信しています。 開発者ブログ 技術広報に関する お問い合わせ先 https://zenn.dev/p/wn_engineering ● ● ウェルスナビ技術広報チーム([email protected]) 28 @2024 WealthNavi Inc.