Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
マルチモジュールアーキテクチャへの移⾏と 開発プロセス改善の取り組み Sep 2nd, 2023 Natsumi Oishi Rakuten Group, Inc.
Slide 2
Slide 2 text
2 Natsumi Oishi Rakuten Group, Inc. Rakuten Rakuma
Slide 3
Slide 3 text
3 ラクマのこれまで
Slide 4
Slide 4 text
4 Objective-C to Swift Conversion (~2022) 👋
Slide 5
Slide 5 text
5 Architecture MVC MVP MVVM シンプルな ViewController のみ UIHostingController (SwiftUI) UIKit 製の ViewController
Slide 6
Slide 6 text
6 これから何をしていくか 🤔
Slide 7
Slide 7 text
7 Topics 1. SwiftUI の拡⼤、Interface Builder の削除 2. マルチモジュールアーキテクチャへの移⾏ 3. Gitブランチ戦略とリリースプロセスの⾃動化 4. リリースプロセスにおけるドキュメンテーション
Slide 8
Slide 8 text
8 SwiftUI の拡⼤、Interface Builder の削除
Slide 9
Slide 9 text
9 新しい技術を 積極的に取り⼊れていきたい 💪
Slide 10
Slide 10 text
10 Interface Builder は メンテナンスしづらい 🥺
Slide 11
Slide 11 text
11 How to proceed • ViewController / Viewコンポーネントを SwiftUI へ • 新規画⾯は SwiftUI で検討 • 残りの xib / storyboard をリストアップ • ⼿が空いている⼈が⾃由に着⼿ • UIKit or SwiftUI → 実装者が選択 SwiftUIの拡⼤、Interface Builderの削除
Slide 12
Slide 12 text
12 How to proceed • 現状の SwiftUI で実装が困難なものをすり合わせ • TextField 系 • Pull to refresh (iOS 16未満) • スクロールによる追加読み込み(ページング) SwiftUIの拡⼤、Interface Builderの削除
Slide 13
Slide 13 text
13 UI Framework (ViewController) UIKit SwiftUI SwiftUIの拡⼤、Interface Builderの削除
Slide 14
Slide 14 text
14 SwiftUI SwiftUIの拡⼤、Interface Builderの削除
Slide 15
Slide 15 text
15 UIKit TextField × Pull to refresh × ページング × SwiftUIの拡⼤、Interface Builderの削除
Slide 16
Slide 16 text
16 The number of Interface Builder files 0 40 80 120 160 2021年8⽉ 2022年8⽉ 2023年8⽉ storyboard xib • LaunchScreen • 廃⽌予定の ViewController SwiftUIの拡⼤、Interface Builderの削除
Slide 17
Slide 17 text
17 Problems 🤔 • 仕様の把握漏れによるバグがテスト中に発覚 • Interface Builder 上の設定を忘れがち • 実装途中に SwiftUI で実装不可能と判明 • 代替のコンポーネントで実装 • 実装前に実装可能か調査が必要 SwiftUIの拡⼤、Interface Builderの削除
Slide 18
Slide 18 text
18 Problems 🤔 • 親の View (UIKit) のコードが複雑になる • UIHostingController の view を UIView として扱うとシンプルに • サイズ可変な View コンポーネントのレイアウト崩れ • 画⾯全体を SwiftUI に書き換えてしまった⽅が楽 SwiftUIの拡⼤、Interface Builderの削除
Slide 19
Slide 19 text
19 マルチモジュールアーキテクチャへの移⾏
Slide 20
Slide 20 text
20 Purpose 🖊 • 責務の分離 • ローカルのテストの⾼速化 マルチモジュールアーキテクチャへの移⾏
Slide 21
Slide 21 text
21 AS-IS マルチモジュールアーキテクチャへの移⾏
Slide 22
Slide 22 text
22 Multi-Module Ph1 マルチモジュールアーキテクチャへの移⾏
Slide 23
Slide 23 text
23 Multi-Module Ph2 マルチモジュールアーキテクチャへの移⾏
Slide 24
Slide 24 text
24 Multi-Module Ph3 マルチモジュールアーキテクチャへの移⾏
Slide 25
Slide 25 text
25 Multi-Module Ph4, Ph5 Ph4 Ph5 マルチモジュールアーキテクチャへの移⾏
Slide 26
Slide 26 text
26 Migration Policy 🧭 • ⼀気に理想の形へ進めない • 前のフェーズが完了していなくても次のフェーズに進む • 現在 Ph3 の状態だが、 前段階の移⾏作業も同時並⾏で⾏なってい る マルチモジュールアーキテクチャへの移⾏
Slide 27
Slide 27 text
27 Good 👍 • 責務を分離できた • 移⾏時に Unit Test の実装漏れに気づけた • テストカバレッジ向上 💪 • モジュールごとに Unit Test を実⾏できる • ローカルでのUnit Testが⾼速化 マルチモジュールアーキテクチャへの移⾏
Slide 28
Slide 28 text
28 Problems 🤔 • CIのビルド時間が増加 • M1マシンで許容範囲に • 同時の移⾏作業で project.pbxproj がコンフリクト • モジュール追加時に必要な設定を忘れがち • 移⾏時のみの悩みになるはず マルチモジュールアーキテクチャへの移⾏
Slide 29
Slide 29 text
29 Gitブランチ戦略と リリースプロセスの⾃動化
Slide 30
Slide 30 text
30 Previous Gitブランチ戦略とリリースプロセスの⾃動化
Slide 31
Slide 31 text
31 Previous • develop ブランチで開発・QA • リリース直前に master へマージ • リリースは master からアーカイブ Gitブランチ戦略とリリースプロセスの⾃動化
Slide 32
Slide 32 text
32 Previous Gitブランチ戦略とリリースプロセスの⾃動化
Slide 33
Slide 33 text
33 NEW Gitブランチ戦略とリリースプロセスの⾃動化
Slide 34
Slide 34 text
34 NEW • develop ブランチを廃⽌ • QA開始時に release ブランチを作成 • リリースは tag からアーカイブ Gitブランチ戦略とリリースプロセスの⾃動化
Slide 35
Slide 35 text
35 NEW Gitブランチ戦略とリリースプロセスの⾃動化
Slide 36
Slide 36 text
36 Problems 🤔 • Pull Request の⼀覧が取得できず • バージョンに含まれる差分 ≠ master / release ブランチ間の差分 • リリース作業にも変更が必要 • できるだけアクション数を減らしたい Gitブランチ戦略とリリースプロセスの⾃動化
Slide 37
Slide 37 text
37 リリースプロセスの⾃動化 (Bitrise) 1. tag を⽣成 2. アプリのアーカイブ 3. AppStore へアップロード 4. GitHub のリリースページ作成 Bitrise Gitブランチ戦略とリリースプロセスの⾃動化
Slide 38
Slide 38 text
38 リリースプロセスの⾃動化 (Bitrise) 1. Slack から workflow を実⾏ 2. ⼿動でAppStoreに submit 🚀 Gitブランチ戦略とリリースプロセスの⾃動化
Slide 39
Slide 39 text
39 リリースプロセスの⾃動化 (GitHub Actions) • 差分があれば Pull Request を⾃動⽣成 • PR の description にリストアップ • 最新のタグと⽐較 GitHub Actions Gitブランチ戦略とリリースプロセスの⾃動化
Slide 40
Slide 40 text
40 Gitブランチ戦略とリリースプロセスの⾃動化
Slide 41
Slide 41 text
41 Problems & Next Action 🌟 • Bitrise と GitHub Actions のメンテナーが偏りがち • ハンズオン等で触れる機会を作る
Slide 42
Slide 42 text
42 リリースプロセスにおけるドキュメンテーション
Slide 43
Slide 43 text
43 Problems 🤔 • 仕様の把握漏れでバグ発⽣ • 影響範囲があいまい → QAに時間が掛かる • 不必要な確認作業が増加 • 実装からリリースまでのタイムラグは増加 リリースプロセスにおけるドキュメンテーション
Slide 44
Slide 44 text
44 Problems 🤔 • 修正内容の社内への共有不⾜ • GitHub の Milestone : アプリエンジニア以外不向き • iOS / Android で共通の修正を確認しにくい リリースプロセスにおけるドキュメンテーション
Slide 45
Slide 45 text
45 Document for release details リリースプロセスにおけるドキュメンテーション
Slide 46
Slide 46 text
46 Document for release details • 変更の種別 • 新機能・仕様変更 • 不具合修正 • リファクタリング リリースプロセスにおけるドキュメンテーション
Slide 47
Slide 47 text
47 Document for release details • Pull Request のリンク • QAの要否 • Impact Level • QAのターゲットOS / デバイス リリースプロセスにおけるドキュメンテーション
Slide 48
Slide 48 text
48 Impact Level リリースプロセスにおけるドキュメンテーション
Slide 49
Slide 49 text
49 まとめ
Slide 50
Slide 50 text
50 Summary 1. SwiftUI の拡⼤、Interface Builder の削除 2. マルチモジュールアーキテクチャへの移⾏ 3. Gitブランチ戦略とリリースプロセスの⾃動化 4. リリースプロセスにおけるドキュメンテーション
Slide 51
Slide 51 text
51 円滑かつ安全にやっていきたい 💪
Slide 52
Slide 52 text
Thank you for listening!