Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DI整備でneedleを使った話
Search
kamui_project
October 31, 2022
Technology
0
280
DI整備でneedleを使った話
kamui_project
October 31, 2022
Tweet
Share
More Decks by kamui_project
See All by kamui_project
String Catalog
tony1224
1
2.2k
meetup_201910.pdf
tony1224
0
160
potatotips_201906.pdf
tony1224
0
80
potatotips_201905.pdf
tony1224
1
470
andfactory_201903.pdf
tony1224
0
1.2k
Dividing Model into layers and implementing Unit Test
tony1224
1
1.2k
WWDC18 cherry-pick Xcode 10 beta
tony1224
0
300
Other Decks in Technology
See All in Technology
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
660
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
360
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
260
S3アクセス制御の設計ポイント
tommy0124
3
210
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
230
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3.2k
Terraformで構築する セルフサービス型データプラットフォーム / terraform-self-service-data-platform
pei0804
1
200
メルカリIBISの紹介
0gm
0
400
Django's GeneratedField by example - DjangoCon US 2025
pauloxnet
0
160
今日から始めるAWSセキュリティ対策 3ステップでわかる実践ガイド
yoshidatakeshi1994
0
120
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
120
Bedrock で検索エージェントを再現しようとした話
ny7760
2
110
Featured
See All Featured
Building an army of robots
kneath
306
46k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Side Projects
sachag
455
43k
BBQ
matthewcrist
89
9.8k
RailsConf 2023
tenderlove
30
1.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Transcript
DI整備でneedleを使った話 2022/10/31 #79 potatotips
自己紹介 name: かむい @kamui_project company: REALITY Inc. potato tips latest
presentation: #62
弊社のDI整備のお話
note紹介 第1弾: needleでDI改善に取り組み始めた話 第2弾: needleでモジュール間の画面遷移を実 現した話 第3弾: ↑をSwiftUIで実現した話 「REALITY needle」
で検索すると出てきます
プロダクト環境の背景 リリース: 2018/8/4〜現在 主な出来事: 機能拡充, iOS新技術の積極採用, EN積極採用 View作成: UIKit →
SwiftUI / UIKit チーム文化: プレゼンテーションロジックのUnit Testは 積極的に書いている
プロダクト環境の背景 リリース: 2018/8/4〜現在 主な出来事: 機能拡充, iOS新技術の積極採用, EN積極採用 View作成: UIKit →
SwiftUI / UIKit チーム文化: プレゼンテーションロジックのUnit Testは 積極的に書いている → initializerのパラメータにデフォルト引数が 有ったり無かったり → Bastard Injection
Bastard Injection • DIのアンチパタン • デフォルト引数 → Testabilityの観点では問題は無い • DIの動機として他クラスへの依存を減らしたい
◦ 依存対象をI/Fに留めたい ◦ 結合が強くなる 弊社のDI整備 ⇨ Bastard Injectionの解消 + DIルールの整理 • DIルールの整理 ◦ 依存はI/Fに留める, ViewControllerの初期化ルール 等 ▪ 依存解決のためのコードを書く手間🤔 ▪ コンパイラセーフ🤔 DIの課題と整備
None
• オブジェクト間の依存解決コードをコンパイル時に自動 生成してくれるツール ◦ AndroidのDaggerと似ている ◦ コンパイル時にDI注入の安全性を確保 ▪ 自信を持ってコード変更ができる •
DI構造が階層的且つ実装上の登場人物が少なくシンプル • 誤ったDI注入があった際には問題箇所の変数名・型・階 層をエラー文で教えてくれる とは
とは https://github.com/uber/needle/blob/master/README.md
とは https://note.com/reality_eng/n/n124fd7da93c3
とは https://note.com/reality_eng/n/n124fd7da93c3
現在の状況と今後の展望 https://note.com/reality_eng/n/n124fd7da93c3
現在の状況と今後の展望 https://note.com/reality_eng/n/nbe40c0e17690
現在の状況と今後の展望
• 課題: Bastard InjectionなDIをしていた箇所が多く存在 • アクション: DIの整備を進めていく中で、依存問題解決のコー ド生成をneedleを使い自動化 • 現状:
起動画面ほか複数の画面で導入・拡充を進める • 今後の展望: モジュール間の画面遷移もneedleの仕組みを介す 形で実現していきたい まとめ
最後に
最後に