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 コンテナ自動生成ツールを実装してみた / intro-autodi
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
uhzz
May 24, 2026
Technology
890
0
Share
DI コンテナ自動生成ツールを実装してみた / intro-autodi
uhzz
May 24, 2026
More Decks by uhzz
See All by uhzz
Goで実現するGraceful Shutdown ~実運用での課題と解決策~ / Go Conference 2025
uhzz
2
1.7k
MCP調べてみました! / Exploring MCP
uhzz
2
4.1k
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
uhzz
1
2.9k
Enablement Bootcampを終えて -Enablement Bootcamp for Gopherizing 〜業務で使えるGoを学ぼう〜
uhzz
0
340
安全にQAを行える環境が整いました!- Kyash TechTalk #6 - Kyashの開発をチラ見せ
uhzz
0
870
Goのローカル開発をWorkspacesではじめよう
uhzz
1
1.1k
【Go:パッケージ管理】DepからGo Modulesへ
uhzz
0
1.2k
コードレビューで泣かないためのintSize = 32 << (^uint(0) >> 63)
uhzz
0
270
「ウチも、gRPC使えますか?」
uhzz
0
340
Other Decks in Technology
See All in Technology
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
180
AI と創る新たな世界 / A New World Created with AI
ks91
PRO
0
110
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
170
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
1.4k
新規ゲーム開発におけるAI駆動開発のリアル
202409e2
0
2.5k
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
240
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
140
Dynamic Workersについて
yusukebe
2
580
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
360
Building applications in the Gemini API family.
line_developers_tw
PRO
0
1.2k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
190
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
220
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
250
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
440
The Mindset for Success: Future Career Progression
greggifford
PRO
0
350
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
360
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Design in an AI World
tapps
1
220
Transcript
DI コンテナ自動生成ツール を実装してみた 2026/05/17 開発合宿@鳴子温泉 reo(@_uhzz_)
アジェンダ 1. gRPC とは — API 定義の標準化 2. DI とは
— 依存性注入の基本 3. autodi とは — コンセプトと既存ツールとの比較 4. まとめ
gRPC とは Protocol Buffers(proto)を IDL として使う高性能 RPC フレームワーク • 型安全:
クライアント・サーバー両側のコードを proto から自動生成 • 高速: HTTP/2 + バイナリシリアライズ • 多言語対応: Go / Java / Python / TypeScript …
gRPC の開発フロー ステップ 4 の「サーバーへの登録」と依存の組み立てが 毎回手作業 になる。
DI(依存性注入)とは オブジェクトが必要とする依存を「外から渡す」設計パターン
DI あり — 依存を外から注入 依存を外から渡すことで 差し替え・テスト・差分把握 が容易になる。
DI の何が面倒か 問題:層が増えると組み立てコードが肥大化する
DIするまでの作業フロー
autodiとは
一般的なDIフロー
autodiの場合
autodi のコンセプト 「proto の import そのものが依存グラフになる」 depends_on を別途書く必要がない。 import の型情報から依存グラフを自動推論する。
既存 DI ツールとの比較 既存ツールはすべて Go コード上 で依存を宣言する必要がある。 ツール 概要 依存の宣言
依存解決 google/wire Google製フレームワーク 2025/08にアーカイブ Go コード コード生成時 uber-go/fx Uber製フレームワーク Go コード 実行時 samber/do Generics ベースの 軽量ランタイム DI Go コード 実行時 autodi proto import から 依存グラフを自動推論 proto の import コード生成時
オプション: ミドルウェア機能 API/層ごとに任意のミドルウェアを設定することができる
まとめ • proto を書くだけで DI コンテナが自動生成される • import 構造から依存グラフを自動推論 •
リフレクションなし・外部依存ゼロのランタイム • OpenAPI も proto から自動出力 • デフォルトで Connect(connectrpc/connect-go) を採用 (gRPC+HTTP) • ミドルウェアはAPI/層ごとに独立して設定可能
参考: 今回の開発フロー