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
6
3.4k
「DI」と仲良くなる
PHP カンファレンス北海道 2024 登壇資料 #phpcondo
Masaru Yamagishi
January 13, 2024
Tweet
Share
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
Babylon.js 勉強会 vol.4 JAPAN 活動紹介
myamagishi
0
110
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
930
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
190
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
3.9k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
1.1k
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
15k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
280
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
myamagishi
2
910
世界最速? で PHP8 Native Framework 作った
myamagishi
1
840
Other Decks in Technology
See All in Technology
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
110
Introduce marp-ai-slide-generator
itarutomy
0
140
MariaDB Connector/C のcaching_sha2_passwordプラグインの仕様について
boro1234
0
1.1k
[Neurogica] 採用ポジション/ Recruitment Position
neurogica
1
130
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.3k
テストセンター受験、オンライン受験、どっちなんだい?
yama3133
0
180
アラフォーおじさん、はじめてre:Inventに行く / A 40-Something Guy’s First re:Invent Adventure
kaminashi
0
170
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
220
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
7
1.7k
20251222_サンフランシスコサバイバル術
ponponmikankan
2
140
Snowflake Industry Days 2025 Nowcast
takumimukaiyama
0
130
Amazon Quick Suite で始める手軽な AI エージェント
shimy
2
1.9k
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
980
Leadership Guide Workshop - DevTernity 2021
reverentgeek
0
170
Tell your own story through comics
letsgokoyo
0
770
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.4k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
240
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
67
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
31
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
110
My Coaching Mixtape
mlcsv
0
13
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!