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
9
DTD_ML開発で役立つ依存注入の基本
BrainPad
May 29, 2025
Tweet
Share
More Decks by BrainPad
See All by BrainPad
「ビジネス現場でのデータ分析者」 東京大学 GCI 2025 Summer
brainpadpr
1
260
【新卒研修資料】効果検証_因果推論 / Impact evaluation Causal inference
brainpadpr
7
1.3k
DTD_Python実行環境_データ分析を支えるVM_コンテナ_サーバーレス比較.pdf
brainpadpr
0
7
DTD_Google製最新AIエージェントサービス「Agentspace」早期アクセス体験記
brainpadpr
0
12
AWSコンテナサービスの選び方_ECS・Lambdaのユースケースと設計ポイント
brainpadpr
0
11
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
2
200
白金鉱業Meetup_Vol.19_PoCはデモで語れ!顧客の本音とインサイトを引き出すソリューション構築
brainpadpr
3
570
エンジニア応募者様向け_会社説明資料_202502
brainpadpr
0
2.3k
DTD_Python実行環境:データ分析を支えるVM/コンテナ/サーバーレス比較
brainpadpr
0
12
Other Decks in Technology
See All in Technology
AI Ready API ─ AI時代に求められるAPI設計とは?/ AI-Ready API - Designing MCP and APIs in the AI Era
yokawasa
20
5.3k
TROCCO今昔
gtnao
0
180
スプリントゴール未達症候群に送る処方箋
kakehashi
PRO
1
160
(HackFes)米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
5
600
無理しない AI 活用サービス / #jazug
koudaiii
0
110
Figma Dev Mode MCP Serverを用いたUI開発
zoothezoo
1
280
Step Functions First - サーバーレスアーキテクチャの新しいパラダイム
taikis
1
220
ゼロから始めるSREの事業貢献 - 生成AI時代のSRE成長戦略と実践 / Starting SRE from Day One
shinyorke
PRO
0
200
機械学習を「社会実装」するということ 2025年夏版 / Social Implementation of Machine Learning July 2025 Version
moepy_stats
1
220
公開初日に Gemini CLI を試した話や FFmpeg と組み合わせてみた話など / Gemini CLI 初学者勉強会(#AI道場)
you
PRO
0
1.6k
P2P通信の標準化 WebRTCを知ろう
faithandbrave
6
1.9k
Shadow DOMとセキュリティ - 光と影の境界を探る / Shibuya.XSS techtalk #13
masatokinugawa
0
240
Featured
See All Featured
A Tale of Four Properties
chriscoyier
160
23k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Gamification - CAS2011
davidbonilla
81
5.4k
Producing Creativity
orderedlist
PRO
346
40k
How GitHub (no longer) Works
holman
314
140k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Raft: Consensus for Rubyists
vanstee
140
7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
The Invisible Side of Design
smashingmag
301
51k
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 話しきれないこと