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
依存性の注入とは?
Search
Tomoki Ota
June 13, 2024
Programming
0
85
依存性の注入とは?
依存性の注入についてまとめました。
Tomoki Ota
June 13, 2024
Tweet
Share
More Decks by Tomoki Ota
See All by Tomoki Ota
アーキテクチャの価値
tomo1227
0
41
アーキテクチャとビジネスロジック
tomo1227
0
45
【Go言語】テスト
tomo1227
0
23
【Go言語】クロージャ
tomo1227
0
210
【Go言語】イテレータ
tomo1227
0
31
【Go言語】エラーハンドリング
tomo1227
0
34
AIに淘汰されないようにするには?
tomo1227
0
31
【Go言語】range
tomo1227
0
23
【Go言語】break
tomo1227
0
34
Other Decks in Programming
See All in Programming
Bedrock Agentsレスポンス解析によるAgentのOps
licux
3
880
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
780
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
40
15k
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.4k
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
120
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
660
Open source software: how to live long and go far
gaelvaroquaux
0
650
技術を根付かせる / How to make technology take root
kubode
1
250
Spring gRPC について / About Spring gRPC
mackey0225
0
230
Djangoにおける複数ユーザー種別認証の設計アプローチ@DjangoCongress JP 2025
delhi09
PRO
4
380
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
12
4.4k
楽しく向き合う例外対応
okutsu
0
420
Featured
See All Featured
Bash Introduction
62gerente
611
210k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Git: the NoSQL Database
bkeepers
PRO
427
64k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Building Applications with DynamoDB
mza
93
6.2k
Side Projects
sachag
452
42k
KATA
mclloyd
29
14k
Designing for Performance
lara
604
68k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Navigating Team Friction
lara
183
15k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Transcript
%* 5PNPLJ0UB 1
ԿΛֶͿ͔ w ґଘੑͷೖͷతɺ֓ཁ w ૄ݁߹ w %*ͷύλʔϯͱΞϯνύλʔϯ w 40-*%ݪଇ w
ΞεϖΫτࢦϓϩάϥϛϯά w 1VSF%*ͱ%*ίϯςφ 2
ୈճґଘੑೖͱ 3
ୈճΞδΣϯμ wґଘੑͷೖͱ wґଘੑͷೖͷޡղ wґଘੑͷೖʹඞཁͳࣝ wґଘੑͷೖͷత wૄ݁߹ 4
ґଘੑͷೖʹࣅͨݴ༿ w ґଘੑͷೖ %FQFOEFODZ*OKFDUJPO w ґଘؔٯసͷݪଇʢ%FQFOEFODZ*OWFSTJPO w ੍ޚͷస
*P$ w αʔυɾύʔςΟଓ UIJSEQBSUZDPOOFDU w αʔϏεɾϩέʔλ 4FSWJDF-PDBUPS 5
ґଘੑͷೖͱ 6 ґଘੑͷೖ ϕΞϧωʔθιʔε
ґଘੑͷೖͱ 7 ϕΞϧωʔθιʔεͱʁ ཛͱόλʔͷιʔεɻ ΤετϥΰϯɺΤγϟ ϩοτɺηϧϑΟʔ Ϣɺਣ͕ݪࡐྉɻ
ґଘੑͷೖͱ 8 ϕΞϧωʔθιʔεͱʁ ϑϨϯνͰجຊతͳιʔεɻ ్தͰࣦഊͨ͠Βͤͳ͍ɻ࡞ ʹ͕͔͔࣌ؒΔɻ
ґଘੑͷೖͱ ༷ʑͳιϑτΣΞઃܭͷݪଇύλʔϯΛूΊͨ ͷͰ͋Γɺίʔυ͕ૄ݁߹ MPPTFDPVQMJOH ͱͳ ΔΑ͏ͳ։ൃΛߦ͑ΔΑ͏ʹ͢ΔͷͰ͋Δɻ 9
ґଘੑͷೖͱ ࡀࣇWFS ͠ɺ܅͕ॴʹߦͬͯɺྫྷଂݿ͔Βউखʹ৯ҿΈΛͱ͖ͬͯͨ ΒɺޙͰʹͳΔΑͶʁྫ͑ɺྫྷଂݿͷυΞΛดΊΕͨΓɺϚϚύ ύ͕܅ʹ৯ͯཉ͘͠ͳ͍ͱࢥ͍ͬͯΔͷΛ৯ͯ͠·ͬͨΓ͢Δ͔͠ Εͳ͍͠ɺ͔ͨ͠͠Βɺ܅͕୳͍ͯ͠Δͷͦͦྫྷଂݿʹೖ͍ͬͯ ͳ͔ͬͨΓɺ͢Ͱʹຯظݶ͕͖Ε͍ͯͨΓ͢Δ͜ͱ͋Δ͠Ͷɻ͜ͷΑ͏ ͳ߹ɺ܅͕Δ͖͜ͱϚϚύύʹ܅͕ԿΛඞཁͱ͍ͯ͠Δͷ͔Λ ͑Δ͜ͱͳΜͩΑɻྫ͑ɺʮ͓ன͝൧Λ৯Δ͔ΒԿ͔ҿΈΛͱͬͯʯ ͱ͔͞ɻͦ͏͢ΔͱϚϚύύ܅ʹԿ͔Λ͖࣋ͬͯͯ͘ΕΔΜͩΑʯ
10
ґଘੑͷೖͱ ࡀࣇWFS αʔϏεΛඞཁͱ͢ΔΫϥε ࡀࣇ ɺඞཁͳαʔϏε Λఏڙ͢ΔΑ͏ʹج൫ ʹཔΔ͖Ͱ͋Δͱ͍͏͜ͱɻ 11
αʔϏεͱίϯϙʔωϯτ αʔϏεநͷ͜ͱɻͲͷΑ͏ͳαʔϏεΛఏڙ͢Δ͔Λࣔ͢ͷ ίϯϙʔωϯτநΛ࣮ͨ͠Ϋϥε 12
%*ʹؔ͢Δޡղ • ґଘੑೖԆόΠϯσΟϯάΛߦ͏࣌ʹ͔͠༻͍ΒΕͳ͍ • ୯ମςετΛ͢Δ࣌ʹ͚ͩؔͯ͘͠Δ • υʔϐϯάΛͨ͠Abstract FactoryύλʔϯͷΑ͏ͳͷ • ґଘੑೖΛಋೖ͢ΔʹDIίϯςφ͕ඞཁ
13
ԆόΠϯσΟϯά 14 ίʔυΛ࠶ίϯύΠϧ͢Δ͜ͱͳ͘ɺ ΞϓϦέʔγϣϯͷҰ෦ΛऔΓସ͑ΒΕΔػೳ FH74$PEFͳͲ ԆόΠϯσΟϯάͷͨΊʹ%*Λ͢ΔΘ͚Ͱͳ͍
୯ମςετʹؔ͢Δޡղ 15 5%%ͷͨΊ͚ͩʹ%*͢ΔΘ͚Ͱͳ͍ɻ
"CTUSBDU'BDUPSZύλʔϯͱ 16 ෳͷϝιουΛඋ͑ͨநͰ͋Γɺϝιου͝ͱ ʹಛఆͷछྨͷΦϒδΣΫτ͕ੜͰ͖ΔΑ͏ʹ͢ Δͷɻ
υʔϐϯάͨ͠"CTUSBDU'BDUPSZύλʔϯͰ͋Δͱ͍͏ޡղ 17 ґଘੑೖΛ͢Δ͜ͱͰɺଞͷαʔϏε ந Λݟͭ ͚ग़͢ͷΞϯνύλʔϯɻˠαʔϏεɾϩέʔλʔ
αʔϏεɾϩέʔλʔ 18 %*ͱશ͘ରۃͳ֓೦
αʔϏεɾϩέʔλʔ 19 %*ɺ໋ྩతͳίʔυͰґଘΛཁٻ͠ͳͯ͘ɺͦͷґଘΛ༻͍ͨΦ ϒδΣΫτΛੜͰ͖ΔΑ͏ʹ͢Δํ๏ɻґଘΛඞཁͱ͢ΔΫϥεΛ ར༻͢Δίʔυʹରͯ͠ɺͦͷґଘΛఏڙͤ͞ΔΑ͏ʹ͢Δͷɻ
%*ίϯςφʹؔ͢Δޡղ 20 %*ίϯςφ༷ʑͳΫϥεͷΦϒδΣΫτΛΈ߹ΘͤΔ͜ͱΛ༰қ ʹߦ͑ΔΑ͏ʹ͢ΔҙͷϥΠϒϥϦɻ %*ίϯςφΛΘͳ͍%*Λ1VSF%*ͱ͍͏ɻ
%*ʹඞཁͳࣝ 21 w40-*%ݪଇ wΫϦʔϯίʔυ wΞεϖΫτࢦϓϩάϥϛϯά
40-*%ݪଇͱ w 4JOHMF3FTQPOTJCJMJUZ1SJODJQMF w 0QFO$MPTFE1SJODJQMF w -JTLPW4VCTUJUVUJPO1SJODJQMF w *OUFSGBDF4FHSFHBUJPO1SJODJQMF w
%FQFOEFODZ*OWFSTJPO1SJODJQMF 22
%*ͱؔͷ͋Δͭͷύλʔϯ 23 w%FDPSBUPSύλʔϯ w$PNQPTJUFύλʔϯ w"EBQUFSύλʔϯ w/VMMΦϒδΣΫτ
ґଘੑͷೖͷత 24 wอक༰қੑͷ্ ˠૄ݁߹ͳઃܭʹ͢Δ
ΦϒδΣΫτಉ࢜ͷີ݁߹ 25
ૄ݁߹ 26
ίϯηϯτͱϓϥά 27 wίϯηϯτΠϯλʔϑΣΠε ந wϓϥάΠϯλʔϑΣΠεͷ࣮ ۩ମ
Ϧείϑͷஔݪଇ -41 28
Ϧείϑͷஔݪଇ -41 29 w4ܕͷΦϒδΣΫτPͷ֤ʑʹɺରԠ͢Δ5ܕͷΦϒδΣΫτ P͕ͭଘࡏ͠ɺ5Λͬͯఆٛ͞ΕͨϓϩάϥϜ1ʹରͯ͠ PͷΘΓʹPΛͬͯ1ͷৼΔ͍͕มΘΒͳ͍߹ɺ 45ͷੜܕͰ͋Δͱݴ͑ΔɻCZ#BSCBSB-JTLPW wੜܕʹґଘ͍͚ͯ͠ͳ͍ɻੜܕɺੜͱͷํʹஔ ՄೳͰͶ͚ΕͳΒͳ͍ɻ
Ϧείϑͷஔݪଇ -41 30 কདྷʹߟ͑Β͑Δ৽ͨͳཁٻʹରԠ͢ΔͨΊͷݪଇ
Ϧείϑͷஔݪଇ -41 31 কདྷʹߟ͑Β͑Δ৽ͨͳཁٻʹରԠ͢ΔͨΊͷݪଇ
32 ίϯηϯτ͕։͖ͬͺͳͩ͠ͱةͳ͍ ײిͨ͠Γ͢ΔՄೳੑ͕͋Δ
/VMMΦϒδΣΫτ 33
/VMMΦϒδΣΫτ 34 αʔϏεΛ͏͜ͱΛఆ࣮ͨ͠ʹ͕ͯͨ͠ɺαʔϏε͕ར༻ Ͱ͖ͳ͍߹ɺࢀরઌ͕ͳ͍͜ͱͰ/VMM3FGFSFODF&YDFQUJPOʹ ͋ΔͷΛ͙
/VMMΦϒδΣΫτ 35 αʔϏεΛ͏͜ͱΛఆ࣮ͨ͠ʹ͕ͯͨ͠ɺαʔϏε͕ར༻ Ͱ͖ͳ͍߹ɺࢀরઌ͕ͳ͍͜ͱͰ/VMM3FGFSFODF&YDFQUJPOʹ ͋ΔͷΛ͙
36 ͠ఀిͨ͠Βɻɻɻɻ
37 %FDPSBUPSύλʔϯ
38 %FDPSBUPSύλʔϯ ΠϯλʔϑΣΠεͷ࣮Ϋϥεʹରͯ͠ɺಉ͡Πϯ λʔϑΣΠεͷผͷ࣮ΫϥεΛհೖ JOUFSDFQUJPO ͤͯ͞৽ͨͳػೳΛՃ͑Δઃܭύλʔϯ
39 %FDPSBUPSύλʔϯͷత ৽ͨͳػೳԣஅతؔ৺͝ͱΛطଘͷίʔυΛॻ͖ ͑Δ͜ͱͳ͘ՃͰ͖ΔΑ͏ʹͳΔ
40 614ͱίϯϐϡʔλ ͦΕͧΕҟͳΔతΛ࣋ͭ ˠ୯Ұͷݪଇ ˠͦΕͧΕ͕ӨڹΛड͚Δ͜ͱ͕ͳ͍
41 ͭͷίϯηϯτͰ ෳͷՈిΛಉ࣌ʹ͍͍ͨ
42 $PNQPTJUFύλʔϯ
43 $PNQPTJUFύλʔϯ
44 $PNQPTJUFύλʔϯ ΠϯλʔϑΣΠεͷطଘͷ࣮Ϋϥεʹର ͯ͠ɺผͷ৽ͨͳ࣮ΫϥεΛՃ͑Δɻ
45 ւ֎ʹߦ͘ͱίϯηϯτͱ ϓϥάͷܗ͕Ұக͠ͳ͘ͳΔ
46 "EBQUFSύλʔϯ
47 "EBQUFSύλʔϯ ҟͳΔΠϯλʔϑΣΠεͰɺΞμϓλΛ հͯ͠͏͜ͱ͕Ͱ͖Δɻ
48 "EBQUFSύλʔϯ ΞϓϦέʔγϣϯ͕ར༻͢ΔΠϯλʔϑΣ ΠεΛհͯ͠طଘͷαʔυύʔςΟͷ"1* Λར༻͍ͨ͠ͱ͖ʹ༗ޮ
49 ΦʔϓϯɾΫϩʔζυͷݪଇ 0$1 طଘͷίʔυΛมߋ͢Δ͜ͱͳ͘ɺΞϓϦέ ʔγϣϯΛ֦ுͰ͖ΔΑ͏ʹ͢Δͱ͍͏֓೦
50 ΦʔϓϯɾΫϩʔζυͷݪଇ 0$1 ֦ுʹରͯ͠0QFO มߋʹରͯ͠$MPTFE
51 ૄ݁߹ʹ͢Δίπ ࣮ʹରͯ͠ɺϓϩάϥϛϯά͢Δͷ Ͱͳ͘ɺΠϯλʔϑΣΠεʹରͯ͠ ϓϩάϥϛϯάΛ͢Δ
52 ·ͱΊ ૄ݁߹ɺίϯηϯτͱϓϥάͷΑ͏ʹଟ ͘ͷ࢈Ή w614%FDPSBUFSύλʔϯ wిݯλοϓ$PNQPTJUύλʔϯ wίϯηϯτΧόʔ/VMMPCKFDU
wΞμϓλʔ"EBQUFSύλʔϯ wίϯηϯτͱϓϥάϦείϑͷஔݪଇ w614ͱ1$୯Ұͷݪଇ w֦ு͍ͯ֓͘͠೦ΦʔϓϯɾΫϩʔζυ ͷݪଇ
53 ·ͱΊ ґଘੑͷೖͱɺ༷ʑͳιϑτΣΞઃܭ ͷݪଇύλʔϯΛूΊͨͷͰ͋Γɺίʔ υ͕ૄ݁߹ʹͳΔΑ͏ʹଅ͢ɻͦͯ͠ɺૄ݁ ߹ʹ͢Δ͜ͱͰɺίʔυʹର͢Δอक༰қੑ ্͕͢Δɻ