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
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DTD_ML開発で役立つ依存注入の基本
BrainPad
May 29, 2025
More Decks by BrainPad
See All by BrainPad
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
600
「ビジネス現場でのデータ分析者」 東京大学 GCI 2026 Summer
brainpadpr
3
2.4k
BrainPad_DE_202604
brainpadpr
1
14k
BrainPad AAA_AIエージェントの社会実装する上での壁 / Barriers to the Social Implementation of AI Agents
brainpadpr
1
320
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
3
460
DTD_AIエージェント開発プロジェクトのメソッドを体系化してみる
brainpadpr
1
410
DTD_Databricksことはじめ
brainpadpr
0
350
【採用候補者向け】BrainPad AAAご紹介資料
brainpadpr
0
2.6k
DTD_はじめての因子分析_理論とビジネス活用.pdf
brainpadpr
2
2.7k
Other Decks in Technology
See All in Technology
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
1
6k
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
1
240
【GCC2026】大規模言語モデルを活用した内製検索サービスの社内展開や業務活用
bandainamcostudios
PRO
0
190
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
320
2026-08-05 IBM Z開発最前線!IBM Bob Premium Package for Zって何がすごいの?
yutanonaka
0
260
20分でわかるセキュアAPI
nwiizo
2
300
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
220
モダンフロントエンド 開発研修
recruitengineers
PRO
4
770
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
280
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
280
JavaScript 研修 (2026)
recruitengineers
PRO
2
610
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
940
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Chasing Engaging Ingredients in Design
codingconduct
0
270
The Curious Case for Waylosing
cassininazir
1
460
Side Projects
sachag
455
43k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
800
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
210
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 話しきれないこと