$30 off During Our Annual Pro Sale. View Details »

DI整備でneedleを使った話

 DI整備でneedleを使った話

kamui_project

October 31, 2022
Tweet

More Decks by kamui_project

Other Decks in Technology

Transcript

  1. DI整備でneedleを使った話
    2022/10/31 #79 potatotips

    View Slide

  2. 自己紹介
    name: かむい @kamui_project
    company: REALITY Inc.
    potato tips latest presentation: #62

    View Slide

  3. 弊社のDI整備のお話

    View Slide

  4. note紹介
    第1弾: needleでDI改善に取り組み始めた話
    第2弾: needleでモジュール間の画面遷移を実
    現した話
    第3弾: ↑をSwiftUIで実現した話
    「REALITY needle」
    で検索すると出てきます

    View Slide

  5. プロダクト環境の背景
    リリース: 2018/8/4〜現在
    主な出来事: 機能拡充, iOS新技術の積極採用, EN積極採用
    View作成: UIKit → SwiftUI / UIKit
    チーム文化: プレゼンテーションロジックのUnit Testは
    積極的に書いている

    View Slide

  6. プロダクト環境の背景
    リリース: 2018/8/4〜現在
    主な出来事: 機能拡充, iOS新技術の積極採用, EN積極採用
    View作成: UIKit → SwiftUI / UIKit
    チーム文化: プレゼンテーションロジックのUnit Testは
    積極的に書いている
    → initializerのパラメータにデフォルト引数が
    有ったり無かったり
    → Bastard Injection

    View Slide

  7. Bastard Injection
    ● DIのアンチパタン
    ● デフォルト引数 → Testabilityの観点では問題は無い
    ● DIの動機として他クラスへの依存を減らしたい
    ○ 依存対象をI/Fに留めたい
    ○ 結合が強くなる
    弊社のDI整備 ⇨ Bastard Injectionの解消 + DIルールの整理
    ● DIルールの整理
    ○ 依存はI/Fに留める, ViewControllerの初期化ルール 等
    ■ 依存解決のためのコードを書く手間🤔
    ■ コンパイラセーフ🤔
    DIの課題と整備

    View Slide

  8. View Slide

  9. ● オブジェクト間の依存解決コードをコンパイル時に自動
    生成してくれるツール
    ○ AndroidのDaggerと似ている
    ○ コンパイル時にDI注入の安全性を確保
    ■ 自信を持ってコード変更ができる
    ● DI構造が階層的且つ実装上の登場人物が少なくシンプル
    ● 誤ったDI注入があった際には問題箇所の変数名・型・階
    層をエラー文で教えてくれる
    とは

    View Slide

  10. とは
    https://github.com/uber/needle/blob/master/README.md

    View Slide

  11. とは
    https://note.com/reality_eng/n/n124fd7da93c3

    View Slide

  12. とは
    https://note.com/reality_eng/n/n124fd7da93c3

    View Slide

  13. 現在の状況と今後の展望
    https://note.com/reality_eng/n/n124fd7da93c3

    View Slide

  14. 現在の状況と今後の展望
    https://note.com/reality_eng/n/nbe40c0e17690

    View Slide

  15. 現在の状況と今後の展望

    View Slide

  16. ● 課題: Bastard InjectionなDIをしていた箇所が多く存在
    ● アクション: DIの整備を進めていく中で、依存問題解決のコー
    ド生成をneedleを使い自動化
    ● 現状: 起動画面ほか複数の画面で導入・拡充を進める
    ● 今後の展望: モジュール間の画面遷移もneedleの仕組みを介す
    形で実現していきたい
    まとめ

    View Slide

  17. 最後に

    View Slide

  18. 最後に

    View Slide