Slide 1

Slide 1 text

EC事業部のモバイル開発 2023 next

Slide 2

Slide 2 text

今日お話すること Section 2

Slide 3

Slide 3 text

今日お話すること ● EC事業部で開発しているモバイル(Android、iOS)アプリの概要 ● 使っている技術や課題に対してのアプローチ(Android多め) ● 2022年やったことや2023年の展望

Slide 4

Slide 4 text

モバイルアプリの概要 Section 3

Slide 5

Slide 5 text

モバイルアプリの概要とチーム体制 モバイルアプリの概要 ● ショップオーナー様向けの機能を提供 ○ 受注が入るとプッシュ通知 ○ 商品の在庫状況、受注の決済情報、入金ステータスの確認 ○ 配送伝票のバーコードを読取り受注情報に登録 ● iOSは2013年、Androidは2014年から提供開始

Slide 6

Slide 6 text

2022年やってきたこと Section 4

Slide 7

Slide 7 text

カラーミーiOS 2022年やってきたこと ● Firebase A/B Testing ● App StoreのProduct page optimization ● CocoaPods → Swift Package Manager ● マルチモジュール化 ● 一部画面のSwiftUI化、Combineの導入

Slide 8

Slide 8 text

2022年やってきたこと ● お問い合わせ機能の改良 ● Kotlin Coroutines、AAC ViewModel、Dagger Hilt、Data Store、Version Catalog、Renovateの導入 ● fastlaneとBitriseを使ったリリースフローの自動化 ● マルチモジュール化、アプリアーキテクチャガイドの実践 カラーミーAndroid

Slide 9

Slide 9 text

2022年やってきたこと アプリアーキテクチャガイド ● Googleが公式で提供している品質の高い堅牢なアプリを作成するための おすすめの方法と推奨アーキテクチャを紹介 ● アーキテクチャガイドに変更した理由 ○ Activity/Fragmentにビジネスロジックが入って巨大化 ■ Javaで書かれているためこれ以上Javaのコードは増やしたくない ○ カラーミーAndroidは歴史があるのでJavaのコードが多め ■ Javaだとより生産性の高いライブラリやフレームワークの導入が難しい

Slide 10

Slide 10 text

2022年やってきたこと ● アプリ推奨のアーキテクチャ ○ 少なくとも2つのレイヤが必要 ■ 画面にアプリデータを表示するUIレイヤ ■ アプリのビジネスロジックを含み、 アプリデータを公開するデータレイヤ ○ さらにドメインレイヤを追加することで UIレイヤとデータレイヤの間のやり取りを 簡素化し、再利用可能 * アプリの推奨アーキテクチャより (2023/01/20アクセス) https://developer.android.com/jetpack/guide?hl=ja#recommended-app-arch アプリアーキテクチャガイド

Slide 11

Slide 11 text

2022年やってきたこと ● UIレイヤ ○ 2つのもので構成されている ■ データを画面にレンダリングするUI要素 ● ViewやCompose ■ データを保持してUIに公開し、ロジックを 管理する状態ホルダー (ViewModelなど) アプリアーキテクチャガイド * UIレイヤより  (2023/01/20アクセス) https://developer.android.com/jetpack/guide?hl=ja#ui-layer

Slide 12

Slide 12 text

2022年やってきたこと ● データレイヤ ○ 2つのレイヤで構成されている ■ リポジトリクラス ● データ変更の一元管理や、ビジネス ロジックなどを管理 ■ データソース ● ファイル、ネットワークソース、ローカル データベースなど1つのデータソースのみ 処理する役割 アプリアーキテクチャガイド * データレイヤより https://developer.android.com/jetpack/guide?hl=ja#data-layer (2023/01/20アクセス)

Slide 13

Slide 13 text

2022年やってきたこと ● コンポーネント間の依存関係を管理 ○ 依存関係の注入(DI)をすることでクラスの依存関係を 構築することなく定義できる ● 依存関係の注入パターンに沿って、Hiltライブラリを使用することをおすすめ ○ HiltはAndroidフレームワーク向けに自動でいい感じにやってくれる (けど理解するまでが大変…) ○ Hiltを使わずにDIすると引数が多くなってきた時に大変 アプリアーキテクチャガイド

Slide 14

Slide 14 text

2022年やってきたこと カラーミーAndroidで実践して ● ドメインレイヤーは実装していません ○ まだ複雑な実装を行っていないため ○ まずは小さくスタート

Slide 15

Slide 15 text

2022年やってきたこと カラーミーAndroidで実践して ● 良かったこと ○ Javaのコードをあまり増やさずに実装が出来るようになった ○ テストを書きやすくなった ● 困ったこと ○ Hiltが難しい ■ アノテーションからどのようなコードが生成されるか理解が難しい

Slide 16

Slide 16 text

2022年やってきたこと カラーミーAndroidで実践して ● ViewModelの状態をJavaに公開する場合 ○ ViewModel内はCoroutinesで実装 ○ 外部にはImmutableのLiveDataで公開

Slide 17

Slide 17 text

2022年やってきたこと カラーミーAndroidで実践して ● モックをDIできるためテストを書きやすい ○ 例えばViewModelのテストを書きたい時に…

Slide 18

Slide 18 text

2022年やってきたこと ● お問い合わせ機能の改良 ● Kotlin Coroutines、AAC ViewModel、Dagger Hilt、Data Store、Version Catalog、Renovateの導入 ● fastlaneとBitriseを使ったリリースフローの自動化 ● マルチモジュール化、アプリアーキテクチャガイドの実践 カラーミーAndroid

Slide 19

Slide 19 text

2022年やってきたこと マルチモジュール ● コードベースの結びつきを弱め、コードベースの公開範囲を簡単に制御 ● ビルド時間のパフォーマンスの改善 * Androidアプリのモジュール化のガイド (2023/01/20アクセス) https://developer.android.com/topic/modularization?hl=ja ● 導入した理由 ○ コード間の公開範囲をかんたんに制御したい ○ デバッグ用のサンプルアプリを簡単に 作りたい

Slide 20

Slide 20 text

2022年やってきたこと Version Catalog ● Gradle7.0から導入されたライブラリ管理方法 ○ プロジェクト間のライブラリを一元管理可能 ○ TOMLファイルで定義 ● 管理方法を変更した理由 ○ マルチモジュール化にあたってライブラリのバージョンを一元管理したい

Slide 21

Slide 21 text

2022年やってきたこと カラーミーAndroidで実践して ● 困ったこと ○ BuildConfigを各モジュールから参照できない… ○ Version Catalogに移行してAndroid Studio上でライブラリのアップ デートを警告してくれなくなった… ● 解決策 ○ どこも参照しないモジュールにラッパークラスを作って 各モジュールがそこから参照 ■ MultiModuleとBuildConfigという記事を参考 ○ Renovateを導入

Slide 22

Slide 22 text

2022年やってきたこと ● お問い合わせ機能の改良 ● Kotlin Coroutines、AAC ViewModel、Dagger Hilt、Data Store、Version Catalog、Renovateの導入 ● fastlaneとBitriseを使ったリリースフローの自動化 ● マルチモジュール化、アプリアーキテクチャガイドの実践 カラーミーAndroid

Slide 23

Slide 23 text

2022年やってきたこと Renovate ● 依存関係を自動更新してくれるツール ○ 様々なプラットフォームに対応 ○ GradleのVersion Catalogにも対応していたのでDependabotでは なくこちらを採用 ● 自動更新したい理由 ○ Version Catalogに移行したのでAndroid Studio上で ライブラリアップデートを教えてくれなくなった ○ ライブラリアップデートを自動化したい

Slide 24

Slide 24 text

2022年やってきたこと カラーミーAndroidの設定

Slide 25

Slide 25 text

2022年やってきたこと timezone(Asia/Tokyo) タイムゾーンを東京 prHourlyLimitNone 1時間に作成するPRの上限を撤廃 automergePatch パッチレベルのPRは自動マージ schedule 営業時間外の平日に作成 enabledManagers 更新したいパッケージマネージャの設定 ここに設定されていないマネージャは無視 prConcurrentLimit Renovateが作成するPRの上限 assigneesSampleSize Assingeesに選ばれる人数 各項目の意味

Slide 26

Slide 26 text

2022年やってきたこと

Slide 27

Slide 27 text

2022年やってきたこと ● 良かった点 ○ 自動でPRを作成してくれる ○ ライブラリの詳細情報をPR本文で教えてくれる ○ ● 困った点 ○ 特になし 実践して

Slide 28

Slide 28 text

2023年の展望 Section 5

Slide 29

Slide 29 text

2023年の展望 ● アプリにログイン後1週間で強制ログアウトされる ○ ユーザの離脱を招く可能性がある ○ ● Webとモバイルの利用状況データが別々に保存され、一緒に見るための手間が かかる ○ モバイル単体での利用状況は簡単に把握できるがWebでの利用状況と一緒に把握 しにくい 現状の課題

Slide 30

Slide 30 text

2023年の展望 ● リフレッシュトークンを使ったログイン状態の維持 ○ 強制ログアウトを減らすことでユーザの離脱を防ぐ ○ iOSではすでに対応済み ○ ● アプリ利用者のデータをWebの利用者状況を管理しているBigQueryに流す ○ Webの利用状況とアプリの利用状況を簡単に比較し施策を試せるようにしたい

Slide 31

Slide 31 text

開発体験を向上しつつユーザへ 価値提供を進めます ● アーキテクチャガイドを実践することで堅牢なアプリを提供 ● Webとモバイルのデータを連動することで ユーザが求めているものを素早く正確に捉えたい まとめ