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」と仲良くなる
Search
Masaru Yamagishi
January 13, 2024
Technology
3.7k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「DI」と仲良くなる
PHP カンファレンス北海道 2024 登壇資料 #phpcondo
Masaru Yamagishi
January 13, 2024
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
Babylon.js 勉強会 vol.4 JAPAN 活動紹介
myamagishi
0
150
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
1.1k
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
230
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
4.1k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
1.2k
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
16k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
310
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
myamagishi
2
980
世界最速? で PHP8 Native Framework 作った
myamagishi
1
870
Other Decks in Technology
See All in Technology
生成AIの活用/high_school2026
okana2ki
0
100
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
530
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
140
美しいコードを書くためにF#を学んでみた話
yud0uhu
1
200
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
3
480
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
320
SRE Lounge Hiroshimaへの招待
grimoh
0
230
AWS Summit Japan 2026の振り返りと2027へ向けて / AWS Summit Japan 2026 Recap and Prospects for 2027
kaminashi
1
200
グローバルチームと挑むプロダクト開発
sansantech
PRO
1
150
AI Driven AI Governance
pict3
0
100
そのハーネス、本当に境界になっていますか? AIエージェント時代の実行環境設計【MEGU-Meet #4】
cscengineer
PRO
0
110
Claude Code 珍プレー好プレー
shinyasaita
0
250
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
380
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
440
Agile that works and the tools we love
rasmusluckow
331
22k
Thoughts on Productivity
jonyablonski
76
5.2k
4 Signs Your Business is Dying
shpigford
187
22k
sira's awesome portfolio website redesign presentation
elsirapls
0
290
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
How to make the Groovebox
asonas
2
2.3k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
770
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Transcript
「DI」と仲良くなる PHPカンファレンス北海道2024 - やまゆ
セッション概要 こんにちは。やまゆです。 みなさん、 new してますか?私は、最近はあまりしていないです。なぜなら、インスタンス化はほとんど DI コン テナ に任せてしまうからです。お客様のプロダクトにも DI
コンテナが含まれているのではないでしょうか?活用 出来ていますでしょうか? Dependency Inversion 、つまり 「依存性の逆転」 をすることで、より疎結合で柔軟性の高い設計を行うことが出 来ます。 それを実現する Dependency Injection 、つまり 「依存関係の注入」 をするのが DI コンテナ です。 今回は以下の内容を話してみたいと思っています。 - Dependency Inversion と Dependency Injection - DI コンテナ - DI コンテナを自作してみよう
赤魔道士系エンジニア ㈱インフィニットループ at 札幌/仙台 やまゆ この画像は自撮りでも いつも使っているアイコンでも構いません
None
DI
DI しってるひとー!
DI 使ってるひとー!
DI 🤔
Dependency Inversion Dependency Injection
Dependency Inversion Dependency Injection 依存性の逆転 依存性の注入
Dependency Inversion Dependency Injection 依存性の逆転 依存性の注入 別物!!!
Dependency Inversion Dependency Injection 依存性の逆転 依存性の注入 ☝の方が大 事
DI と聞くと...
None
☝
どっからきてんねん
None
☝
オワコンです
こんなもんは DI の本質 とちゃうねん
Dependency Inversion 依存性の逆転
これは設計の おはなし
DI は設計の話で出てくる仕組みの一つ - Controller に全部書いてあるコードでは不要! - 規模が大きい、複数人で開発している、アーキテクチャ云々の時に出る - 規模が大きい=依存関係が複雑になってくる -
依存関係を綺麗に保つことがメンテナンス性の向上につながる!
Dependency Inversion ☝ 依存性の逆転
依存性?
依存性? 壱百満天原サロメ 👈金属性
依存性? 壱百満天原サロメ 👈金属性 「壱百満天原サロメと いうカードは、金属性と いう属性に依存してい る」
依存性? 壱百満天原サロメ 👈金属性 「金属性は、壱百満天 原サロメというカードに 依存している」 「壱百満天原サロメと いうカードは、金属性と いう属性に依存してい る」
依存性? 壱百満天原サロメ 👈金属性 「壱百満天原サロメと いうカードは、金属性と いう属性に依存してい る」 「金属性は、壱百満天 原サロメというカードに 依存している」
壱百満天原サロメ
👈パッケージ
None
☝
Dependency Inversion ☝ 依存性の逆転
逆転すべき!
何故?
何故依存性の逆転が必要なのか? - パッケージの「凝集度」と「結合度」の関係 - 各パッケージが持つ 「知識」を分離して、凝集度を高める - パッケージ間の「結合度」を下げて、メンテナンスを容易にする - OOP
の詳しいお話は割愛 - より簡便に記すと☟ - 「Aさんが知っていることを減らし、Bさんとは決まったルートでだけ会話する」
Card パッケージが DB と かどうとか関係ないやん
Card パッケージは永続化さえさ れれば良くて、 MySQL とか Redis とか そういうのはどうでも良い!
Dependency Inversion ☝ 依存性の逆転
None
☝
矢印が反転している!
☝
Dependency Inversion 依存性の逆転
Dependency Inversion まとめ - 規模の大きいプロダクトはパッケージングを行う(≒設計) - パッケージ間の依存関係が生まれる - 知らなくても良いパッケージに依存するとメンテが大変 -
良いとされる設計≒パッケージの依存関係が適切な設計 - 依存関係が適切であれば、パッケージごとに分離して開発可能(理想論)
☝
誰が繋げるの?
Dependency Injection 依存性の注入
Dependency Injection 依存性の注入 ☝
注入? - インスタンスを作って流し込む - 作り方を知っている神クラス(DI Container)が構築する
None
Dependency Injection は Dependency Inversion を実現するキー
DI(Inversion と Injection) すこし わかってもらえれば うれしいです!
https://www.infiniteloop.co.jp We are hiring!