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
41
DTD_ML開発で役立つ依存注入の基本
BrainPad
May 29, 2025
Tweet
Share
More Decks by BrainPad
See All by BrainPad
白金鉱業Meetup_Vol.20 効果検証ことはじめ / Introduction to Impact Evaluation
brainpadpr
1
84
DTD_アジャイル開発組織立ち上げのためのモブプログラミング
brainpadpr
0
51
DTD_生成AIに負けないために新卒一年目は_品質_にオールインしました
brainpadpr
0
77
【OptimizationNight】数理最適化のラストワンマイルとしてのUIUX
brainpadpr
2
680
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
29
15k
BrainPad_Company_202508
brainpadpr
2
280k
DTD_BQによる生成AIのバッチ処理とデータエンジニアリング
brainpadpr
0
120
DTD_クラウド×オンプレ連携で実現するデータ収集基盤の構築事例
brainpadpr
1
80
「ビジネス現場でのデータ分析者」 東京大学 GCI 2025 Summer
brainpadpr
2
2.8k
Other Decks in Technology
See All in Technology
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
360
roppongirb_20250911
igaiga
1
250
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
230
Apache Spark もくもく会
taka_aki
0
140
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
210
テストを軸にした生き残り術
kworkdev
PRO
0
220
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
400
組織を巻き込む大規模プラットフォーム移行戦略 〜50+サービスのマルチリージョン・マルチプロダクト化で学んだステークホルダー協働の実践〜 / Platform migration strategy engaging all stakeholders
toshi0607
2
200
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
10
75k
AIがコード書きすぎ問題にはAIで立ち向かえ
jyoshise
1
280
株式会社ログラス - 会社説明資料【エンジニア】/ Loglass Engineer
loglass2019
4
65k
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
390
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Code Review Best Practice
trishagee
71
19k
YesSQL, Process and Tooling at Scale
rocio
173
14k
For a Future-Friendly Web
brad_frost
180
9.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Thoughts on Productivity
jonyablonski
70
4.8k
Optimizing for Happiness
mojombo
379
70k
Typedesign – Prime Four
hannesfritz
42
2.8k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
How GitHub (no longer) Works
holman
315
140k
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 話しきれないこと