Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
「DI」と仲良くなる
Search
Masaru Yamagishi
January 13, 2024
Technology
3.8k
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
190
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
1.2k
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
260
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
4.3k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
1.3k
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
17k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
320
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
myamagishi
2
1k
世界最速? で PHP8 Native Framework 作った
myamagishi
1
880
Other Decks in Technology
See All in Technology
生成AI時代のIAMのマニアックな話
takuros
6
2.6k
IoTとは〜? 数字で見るSORACOM UG【SORACOM UG Explorer 2026】
soracom
PRO
0
190
「いつか使う」の「いつか」は来ない 〜AI駆動開発における「作らない」判断について〜
ikki0006
0
150
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
3.1k
デザインレビューは自動化できるのか?─ Flutter × Figma で UI 品質保証を考える
techiro
2
800
セキュリティ専任チームなしで攻撃を先回りするSREが実践したSIEM on Amazon OpenSearch Service
cscengineer
PRO
0
430
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
100
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
110
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
430
Technical Project Manager の役割とやりがい、少しだけ AI
yoshiiryo1
0
600
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
kintoneで在庫管理システムを作るときの要件定義・設計ポイント
kai0707
0
280
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
460
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
510
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
60k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
The browser strikes back
jonoalderson
0
1.9k
The SEO Collaboration Effect
kristinabergwall1
1
620
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
610
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
970
Six Lessons from altMBA
skipperchong
29
4.6k
Become a Pro
speakerdeck
PRO
31
6.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
30 Presentation Tips
portentint
PRO
1
460
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!