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

REALITY iOSアプリを支える開発効率化

gree_tech
November 11, 2021

REALITY iOSアプリを支える開発効率化

GREE Tech Conference 2021 で発表された資料です。
https://techcon.gree.jp/2021/session/Session-12

gree_tech

November 11, 2021
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. 7 • 2018.8- 8人 • 2021.11現在 26人 ◦ SV, Unity,

    NativeAppの3チーム ◦ NativeApp Team(iOS: 5, Android: 4) REALITY エンジニアリングチーム規模
  2. 8 • 2018.8- 8人 • 2021.11現在 26人 ◦ SV, Unity,

    NativeAppの3チーム ◦ NativeApp Team(iOS: 5, Android: 4) REALITY エンジニアリングチーム規模 規模感によって以下の2点が変わる ・開発効率化のニーズ ・実際に取り組めるもの
  3. 11 • 2018.8- 8人 • 課題: 『定型的な作業を人がしたくない』 ◦ ex) アプリのリリース申請作業

    • 対応: CI/CD導入 → リリース申請作業の自動化 REALITY 開発効率化のニーズの変化
  4. 12 •2021.11現在 26人 • 課題: 『複数人が並行で作業を効率よく進められる仕組み』 ◦ ex) • 1.

    CI/CDのW/F並行利用増 → オンプレSVに支障 • 2. iOS: 1アプリケーションターゲットのみで開発 → 効率的な並行作業に支障 REALITY 開発効率化のニーズの変化
  5. • 改善Week ◦ 2ヶ月に1度実施 ◦ 品質改善をテーマとしたタスクのみ1週間実施 • Github Issueで作成し以下のラベルのついたもの •

    bug / devops / enhancement ◦ 新機能開発はエンジニア全員原則STOP 21 開発効率化を支える改善施策
  6. 26 • - 2020.11 Jenkins ◦ 利用W/F数, エンジニア数, 並列ビルド増加 ◦

    問題 • CPU負荷増 → iMac Pro再起動 • コロナ禍での物理出社の懸念 CI/CD環境の移行
  7. 27 • - 2020.11 Jenkins ◦ 利用W/F数, エンジニア数, 並列ビルド増加 ◦

    問題 • CPU負荷増 → iMac Pro再起動 • コロナ禍での物理出社の懸念 ⇨ クラウド CI/CDツールの検討 CI/CD環境の移行
  8. 28 • - 2020.11 Jenkins ◦ 利用W/F, エンジニア数増加 • iMacのCPU使用率が逼迫

    → マシン再起動 • コロナ禍での物理出社の懸念 CI/CD環境の移行
  9. 29 • - 2020.11 Jenkins ◦ 利用W/F, エンジニア数増加 • iMacのCPU使用率が逼迫

    → マシン再起動 • コロナ禍での物理出社の懸念 ⇨ クラウド CI/CDツールの検討 CI/CD環境の移行
  10. 30 • 2020.11- Jenkins/Bitrise ◦ Jenkinsから主要なW/Fの移行は完了済み • Bitrise選定理由 ◦ Native

    Appに特化した機能の多さ ◦ 4vCPUのビルドマシンが使える ◦ 競合サービスと比較した際のコスト(当時) CI/CD環境の移行
  11. 31 • bitrise.ymlでW/Fをgit管理 • 主な主要W/F ◦ testing: Build + Unit

    Test ◦ release: ストア申請 ◦ gardening: CocoaPodsのOSS更新 ◦ testflight_dev: 開発用APIの向き先でTest Flight App作成 CI/CD環境の移行
  12. • ex) Credentialな情報をどこに格納するか ◦ 現在: Bitrise Secrets • 1つのCI/CDサービスに依存してる仕組み ◦

    今後: 外部のストレージサービスを利用 • ex) GCP Secret Manager 36 CI/CD環境の移行
  13. 39 • 問題: アプリの設定を変更する際、ビルドをし直す必要 ◦ ex) メンテナンス中の画面を修正, テストしたい • APIのレスポンス値にメンテナンス状態が欲しい

    • 他の開発に影響, その後の遷移がブロック • 別環境にアクセスできるように変更 • URL文字列の書き換えの都度ビルドが必要 設定専用ミニアプリ
  14. 43 • 良かった ◦ アプリ側で都度修正, ビルドが不要なサーバー接続先 の動的差し替えを実現 ◦ SwiftUIで画面作成 •

    プロダクト側から完全に独立し依存問題が無い + UIもシンプルで良かったため活用 設定専用ミニアプリ
  15. • -2021.2 全てのソース: 1Application Target ◦ アーキテクチャ: MVVM, レイヤードアーキテクチャ ⇨

    責務の分離 ◦ ◦ XcodeGen導入済み ⇨ xcodeprojectファイルの競合問題の回避 ◦ 48 マルチモジュール化
  16. • 問題2: 依存問題 ◦ Bastard Injection • DIの仕組みの整備が必要 ◦ 神(Singleton

    Manager)クラスの存在 • 疎結合な状態を作り出せていない • 新しい技術の導入のし辛さ • 変更した際の影響範囲の広さ etc. 50 マルチモジュール化
  17. • 問題 ◦ 依存問題 • Bastard Injection • DIの仕組みの整備不足 •

    神(Singleton Manager)クラスの存在 • 疎結合な状態を作り出せていない ◦ 新しい技術の導入のし辛さ ◦ 変更した際の影響範囲の広さ etc. 51 マルチモジュール化 モジュール分離 = マルチモジュール化
  18. 54 • 対応: チームで定期的に話し合う時間を作る ◦ REALITY iOSのアーキテクチャについて話し合う時間 を新たに用意 ⇨ あきべん。

    ◦ 週に1回・iOSメンバー全員が参加し実施 ◦ 最近の主な話題 • マルチモジュール化, SwiftUIの導入, DI改善 etc. マルチモジュール化
  19. 55 • 対応: チームで定期的に話し合う時間を作る ◦ 理由: チームの協力が必要不可欠 • 影響範囲が膨大 •

    目的 + 新しい設計ルールをチーム全員が理解, 協力しあう必要 • 目的に沿っているか定期的に確認する時間が必要 マルチモジュール化
  20. • Coreモジュール ◦ 多くのclassでprotocolによる抽象化 → 移行が容易 • Domain, Infrastructure層の移行は可視性の変更だ けで対応ができた

    ◦ 1ファイルに複数の定義があるor多くの依存の持ってい るオブジェクトの移行は大変 60 マルチモジュール化
  21. • extension系モジュール ◦ AppleFramework Extensions • UIKit, Foundation系 ◦ ThirdPartyLib

    Extensions • RxSwift等のOSS系 ◦ Reality Extensions • 上記2つのモジュールのWrapper • どのextension系モジュールをimportすべきかを 意識しない作り 61 マルチモジュール化
  22. • RealityUIComponentsモジュール ◦ IBLinter • Interface Builderファイルの静的検査 • custom_moduleチェック •

    その他: 制約重複, autolayout不正チェック ◦ 既存のwarning数を減らした上で利用して いきたい 65 マルチモジュール化
  23. • Featureモジュール ◦ 機能単位のミニアプリを作成 ◦ 必要最低限の依存解決でビルド実行 • ビルド時間 平均9秒 •

    ビルド時間の大幅な改善 • プレビューサイクルの大幅な改善 ◦ 画面遷移も通常の導線を跨ぐ必要無し 67 マルチモジュール化
  24. • 対応: DI改善 ◦ uber/needleをDIシステムに採用 • 理由 • 依存解決コードを自動生成 •

    登場人物が少ない • 安全で無い依存注入はビルドエラーで変数名, 型, 階層を指摘 69 マルチモジュール化
  25. • 課題/今後の展望 ◦ モジュール形式 • framework → Swift Package •

    project.pbxproj の変更に悩まされない ◦ 将来的なXcodeGenからの脱却 • link設定はdynamic ◦ 起動時間短縮のためにstatic linkの検討も 合わせて実施予定 81 マルチモジュール化
  26. • 通信速度改善を目指した取り組み ◦ Protocol Buffers ◦ スキーマ定義 • SV/Native Appでソースコードの自動生成

    • 実装, コミュニケーションコスト双方の削減 87 REALITY iOS 開発効率化の今後の展望
  27. 91