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
2.6k
「DI」と仲良くなる
PHP カンファレンス北海道 2024 登壇資料 #phpcondo
Masaru Yamagishi
January 13, 2024
Tweet
Share
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
380
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
120
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
3k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
810
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
11
13k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
180
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
myamagishi
2
740
世界最速? で PHP8 Native Framework 作った
myamagishi
1
770
Eloquent Driven Development
myamagishi
2
790
Other Decks in Technology
See All in Technology
AWSの生成AIサービス Amazon Bedrock入門!(2025年1月版)
minorun365
PRO
7
420
コロプラのオンボーディングを採用から語りたい
colopl
5
670
滑空スポーツ講習会2024 滑空記章試験員講習会 第1回 / JSA Badge Examiner Seminar 2024
jsaseminar
0
100
ゼロからわかる!!AWSの構成図を書いてみようワークショップ 問題&解答解説 #デッカイギ #羽田デッカイギおつ
_mossann_t
0
1.3k
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
120
プロダクト組織で取り組むアドベントカレンダー/Advent Calendar in Product Teams
mixplace
0
680
東京Ruby会議12 Ruby と Rust と私 / Tokyo RubyKaigi 12 Ruby, Rust and me
eagletmt
2
560
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
480
JAWS-UG20250116_iOSアプリエンジニアがAWSreInventに行ってきた(真面目編)
totokit4
0
110
スケールし続ける事業とサービスを支える組織とアーキテクチャの生き残り戦略 / The survival strategy for Money Forward’s engineering.
moneyforward
0
250
When Windows Meets Kubernetes…
pichuang
0
280
ヤプリQA課題の見える化
gu3
0
160
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Rails Girls Zürich Keynote
gr2m
94
13k
For a Future-Friendly Web
brad_frost
176
9.5k
How to train your dragon (web standard)
notwaldorf
89
5.8k
Making the Leap to Tech Lead
cromwellryan
133
9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
350
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
560
Bash Introduction
62gerente
610
210k
Visualization
eitanlees
146
15k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
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!