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
DTD_ML開発で役立つ依存注入の基本
Search
BrainPad
May 29, 2025
Technology
0
8
DTD_ML開発で役立つ依存注入の基本
BrainPad
May 29, 2025
Tweet
Share
More Decks by BrainPad
See All by BrainPad
「ビジネス現場でのデータ分析者」 東京大学 GCI 2025 Summer
brainpadpr
0
13
【新卒研修資料】効果検証_因果推論 / Impact evaluation Causal inference
brainpadpr
7
1.2k
DTD_Python実行環境_データ分析を支えるVM_コンテナ_サーバーレス比較.pdf
brainpadpr
0
4
DTD_Google製最新AIエージェントサービス「Agentspace」早期アクセス体験記
brainpadpr
0
9
AWSコンテナサービスの選び方_ECS・Lambdaのユースケースと設計ポイント
brainpadpr
0
9
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
2
200
白金鉱業Meetup_Vol.19_PoCはデモで語れ!顧客の本音とインサイトを引き出すソリューション構築
brainpadpr
3
560
エンジニア応募者様向け_会社説明資料_202502
brainpadpr
0
2.3k
DTD_Python実行環境:データ分析を支えるVM/コンテナ/サーバーレス比較
brainpadpr
0
7
Other Decks in Technology
See All in Technology
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
820
Shadow DOM & Security - Exploring the boundary between light and shadow
masatokinugawa
0
580
アクセスピークを制するオートスケール再設計: 障害を乗り越えKEDAで実現したリソース管理の最適化
myamashii
1
830
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
18k
振り返りTransit Gateway ~VPCをいい感じでつなげるために~
masakiokuda
4
220
Figma Dev Mode MCP Serverを用いたUI開発
zoothezoo
1
270
(HackFes)米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
5
590
三視点LLMによる複数観点レビュー
mhlyc
0
250
ClaudeCodeにキレない技術
gtnao
1
930
毎晩の 負荷試験自動実行による効果
recruitengineers
PRO
5
200
"Découvrir le Liberland"
rlifchitz
0
120
How to Quickly Call American Airlines®️ U.S. Customer Care : Full Guide
flyaahelpguide
0
240
Featured
See All Featured
How to Ace a Technical Interview
jacobian
278
23k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
The Pragmatic Product Professional
lauravandoore
35
6.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Scaling GitHub
holman
460
140k
Why Our Code Smells
bkeepers
PRO
337
57k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
4 Signs Your Business is Dying
shpigford
184
22k
Thoughts on Productivity
jonyablonski
69
4.7k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Transcript
ML開発で役立つ依存注入の基本 2025年 5月29日 DEU TECH DRIVE
©BrainPad Inc. Strictly Confidential 2 佐藤瑞起(さとうみずき) ブレインパッド 機械学習エンジニア • 入社
• 2023年新卒入社 • 趣味 • サッカー • 映画 • 興味 • MLOps • エッジ推論 自己紹介
©BrainPad Inc. Strictly Confidential 3 今日お話しすること 1 3 2 PoCの成功後に立ちはだかる壁
依存注入に注目することの利点 依存注入のポイント
4 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 PoCは上手くいったぞ! エンジニアにコードを共有しよう まかせろ! DS
エンジニア
5 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 大きい成果物 一つの変更が全てに影響する 可読性が高いとは言えないコード ドキュメントもないため、大変な作業となる
ビジネスロジックと密なコード 製品化する上で改修が行われるコード ばかり DS エンジニア
6 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 思ったより大変な作業だぞ。。。(泣) DS エンジニア
7 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 各フェーズで目的が違う 短期で結果が求められる • コードより報告結果が重要
動作すれば良い • Notebookや関数が乱立 実験的 • 試行回数が多く、似たようなコードが多く存在 システム化 PoC 拡張性 • システムの成長を見込んだ設計が必要 保守性 • テストや例外処理など正常な動作以外もケア 運用可能性 • モニタリング、再学習 短期成果 複数回の実験 拡張性 保守性 運用可能性 最低限の動作保証
8 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 全部は難しいけど、どこをケアす ればより良い形になるかな どこから手を出すのが良さそうなんだろう DS
エンジニア
9 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 PoCから開発へ進むのに必要なこと
10 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 PoCは上手くいったぞ! アプリ化してこう で、何から手をつければ 良いんだ?
設計やテスト、例外処理、 などやらないと けど、一つ加えるだけで 全部が影響する〜 何から手をつければ良い んだ?
11 ©BrainPad Inc. Strictly Confidential PoCの成功後に立ちはだかる壁 PoCは上手くいったぞ! アプリ化してこう で、何から手をつければ 良いんだ?
設計やテスト、例外処理、 などやらないと けど、一つ加えるだけで 全部が影響する〜 何から手をつければ良い んだ? とにかく、依存注入(DI)をしよう
12 ©BrainPad Inc. Strictly Confidential 依存注入(DI)とは さまざまなソフトウェア設計の原則やパターンを 集めたものであり、コードが疎結合となるような 開発を行えるようにするものである。 引用:Dependency
Injection Principles, Practices, and Patterns
13 ©BrainPad Inc. Strictly Confidential 依存注入(DI)とは メリットがたくさん 拡張容易性 • 既存の拡張、再利用が容易となる
• 想定外の場合にも堅牢 並列開発 • 切り分けやすいため、複数人で同時 に開発ができる 保守容易性 • クラスの責務が明確に定義されるた め、保守が行いやすい テスト容易性 • 切り分けやすくなるため、テストが 行いやすくなる
14 ©BrainPad Inc. Strictly Confidential 初めの一歩としてのDI ここから始めると 「小さい労力で開発の高速化が行える」 ✓ 開発のしやすさが向上する
✓ 影響範囲が見えやすため、次の対応としてどの選択を取ってもスムーズに対応できる ✓ 依存を整理していくと感じることが増え、設計などを検討していく上でのキッカケになりやすい ✓ 把握がしやすくなる ✓ 各モジュールの関係性が見やすく、他の人でも理解しやすい ✓ 整理することでコードの理解が深まる
15 ©BrainPad Inc. Strictly Confidential 依存注入(DI)のポイント ①クラスを作る ②注入のパターンを決める ③合成を行う
16 ©BrainPad Inc. Strictly Confidential 依存注入(DI)のポイント ①クラスを作る
17 ©BrainPad Inc. Strictly Confidential クラスを作る まずは機能をまとめるレベルで良いので、クラスを作成していく ✓ 責務の分離や抽象化は意識しなくてもOK ✓
ある程度の機能単位でクラスにまとめる ✓ よくある分類: 前処理、モデル、学習、推論、データ関連 ▼前処理と学習をまとめた例
18 ©BrainPad Inc. Strictly Confidential 依存注入(DI)のポイント ②注入のパターンを決める
19 ©BrainPad Inc. Strictly Confidential コンストラクタの注入 対象のクラスが必要とする依存を全てコンストラクタの引数として定義するパターン メリット ✓ 依存が注入されることが保証
✓ 実装が簡単 ✓ 依存を静的に宣言 使える場面 デフォルトの選択として利用できる ▼コンストラクタにモデルの機能が含まれる例
20 ©BrainPad Inc. Strictly Confidential メソッドの注入 メソッドを呼び出す際に必要とされる依存をそのメソッドの引数で定義するパターン メリット ✓ メソッドの呼び出しごとに異なる依存を提供
✓ 中間情報によって依存が変わる場合の注入が容易 使える場面 メソッドを呼び出すたびに依存が変化する場合 メソッドごとに依存が違う場合 ▼前処理が適用ごとに変わる例 ▼applyするタイミングで依存が注入される
21 ©BrainPad Inc. Strictly Confidential プロパティの注入 既定の依存(ローカルデフォルト)をプロパティとして公開し、Setterで置き換えられるようにするパター ン メリット ✓
理解しやすい ✓ 事前に依存を容易する必要がない 使える場面 変更がほとんどないコンポーネントやライブラリなど ▼前処理をローカルデフォルトとして扱っている例
22 ©BrainPad Inc. Strictly Confidential 依存注入(DI)のポイント ③合成を行う
23 ©BrainPad Inc. Strictly Confidential 合成を行う 合成とは関連するモジュールを用いてアプリケーションを構築すること • 全てのモジュールをまとめて合成する •
そのため、全てのモジュールに依存する ここで合成を行う
24 ©BrainPad Inc. Strictly Confidential 合成基点 まとめて合成を行うところを合成基点と呼び、エントリポイントに可能な限り近くが良い • 依存関係が一目でわかり、手をつけやすくなる •
切り分けがしやすくなる 合成基点 Trainer TrainData Preprocessi ng Filter Model
25 ©BrainPad Inc. Strictly Confidential 合成基点の実装例 合成基点 Trainer TrainData Preprocessi
ng Filter Model 合成基点 ▼Trainerが何にどう依存しているかが一目でわかる
26 ©BrainPad Inc. Strictly Confidential 依存注入(DI)のポイント ①クラスを作る ②注入のパターンを決める ③合成を行う 3つのポイントを意識するだけで十分な効果を得られる
初めは機能単位で 良い 基本は コンストラクタ 合成基点はエント リーポイント
27 ©BrainPad Inc. Strictly Confidential その先のはなし
28 ©BrainPad Inc. Strictly Confidential DIコンテナ オブジェクト合成、介入、生存管理などさまざまなタスクを自動化するソフトウェア・ライブラリ 観点 概要 合成
• 関連するモジュールを用いて階層を構築する • 先ほど見てきたもの 生存管理 • 依存がどのくらい生存することを意図しているのかを表現したもの • 管理が複雑化し始めた場合にDIコンテナを導入するか検討するとよい 介入 • 処理の追加、振る舞いの変更を行えるようにすること • 切り替えを前提にした設計
29 ©BrainPad Inc. Strictly Confidential DIコンテナにおける合成 ✓ 依存の構成がモジュールに一元化 ✓ デコレータで簡単に設定できる
✓ 柔軟な差し替えができる ✓ オブジェクトグラフを記述することなく、自動 で合成を行ってくれる ✓ 重複を削減 ▼合成基点の例をDIコンテナで書き換えた例
30 ©BrainPad Inc. Strictly Confidential DIコンテナにおける生存管理 ✓ 生存管理もデコレータで設定可能 ✓ カスタムのデコレータも作成可能
✓ 管理用のコードを用意する必要なく、DIコンテ ナが管理してくれる ▼生存戦略を利用する例
31 ©BrainPad Inc. Strictly Confidential DIコンテナにおける介入 ✓ 介入される側(Model、Trainer)を変更する ことなく、ロジックを組み込める ✓
コード例はログを組み込んでいる ✓ モジュールで介入を設定する ▼クラスの定義(ModelとTrainerは変更なし) ▼モジュールで介入を設定
32 ©BrainPad Inc. Strictly Confidential まとめ PoCから開発へ進む際の壁 ✓ フェーズ間の目的の違いから、技術的負債が表面化 ✓
想定以上の工数を要する場合が大半 三つのステップで依存注入(DI) ① クラスを作る ② 依存パターンを決める ③ 合成を行う 開発を加速させていこう!
株式会社ブレインパッド 106-0032 東京都港区六本木三丁目1番1号 六本木ティーキューブ TEL:03-6721-7002 FAX:03-6721-7010 www.brainpad.co.jp
[email protected]
本資料は、未刊行文書として日本及び各国の著作権法に基づき保護されております。本資料には、株式会社ブレインパッド所有の特定情報が含まれており、これら情報に基づく本資料の内容は、貴社以外の第三者に開示されること、また、本資料を評価する以外の目的で、その 一部または全文を複製、使用、公開することは、禁止されています。また、株式会社ブレインパッドによる書面での許可なく、それら情報の一部または全文を使用または公開することは、いかなる場合も禁じられております。
©BrainPad Inc.
37 ©BrainPad Inc. Strictly Confidential 話しきれないこと