Slide 1

Slide 1 text

go-cloudとWireを利用したDI (P 6O $POGFSFODFʢ(P͋Μ͜ʣ-5େձLH :PJDIJSP4IJNJ[V!CVEPVHVNJ

Slide 2

Slide 2 text

自己紹介 ‣ ਗ਼ਫཅҰ࿠!CVEPVHVNJ ‣ ‣ #BDLFOE%FTLUPQ"QQFOHJOFFS ‣ (P3VCZPO3BJMT3FBDU ‣ ϒϩάIUUQCVEPVHVNJHJUIVCJP ‣ ίϛϡχςΟ׆ಈHPMBOHUPLZP

Slide 3

Slide 3 text

今日のゴール ‣ HPDMPVEͷ֓ཁΛ஌Δ ‣ 8JSFͷ֓ཁΛ஌Δ ‣ XJSFίϚϯυΛ࢖ͬͨ%FQFOEFODZ*OKFDUJPO %* ͷ΍Γํ͕Θ͔Δ

Slide 4

Slide 4 text

アジェンダ ‣ HPPHMFHPDMPVEʹ͍ͭͯ ‣ 8JSFʹ͍ͭͯ ‣ 8JSFίϚϯυΛ࢖ͬͨ%* ‣ ·ͱΊ

Slide 5

Slide 5 text

マルチクラウドへの課題 ‣ ίϯςφʂ,VCFSOFUFTʂ ‣ ϙʔλϏϦςΟੑͷ޲্ ‣ ͱ͸ݴ͑ɺதͷΞϓϦέʔγϣϯϩδοΫ͸1BB4ʹ༊ண͍ͯ͠Δ ‣ 1BB4ఏڙαʔϏεΛར༻͠ͳ͍ͷ͸΄΅͋Γ͑ͳ͍ʢʁʣ ‣ ࠓ೔΋΅͘ΒͷΞϓϦ͸1BB44%,ͷ"1*ʹґଘ͍ͯ͠Δ

Slide 6

Slide 6 text

SDKに依存した実装 ྨࣅαʔϏεʹର͢Δಉ͡ૢ࡞Ͱ΋࣮૷͸͍ͩͿҟͳΔ

Slide 7

Slide 7 text

go-cloudとは ‣ IUUQTHJUIVCDPNHPPHMFHPDMPVE ‣ ʹൃද ‣ IUUQTCMPHHPMBOHPSHHPDMPVE ‣ ϚϧνΫϥ΢υͳ։ൃΛߦ͏ͨΊͷ(PͷϥΠϒϥϦ ‣ Ϋϥ΢υαʔϏεͷδΣωϦοΫͳ"1*Λఆٛ ‣ ݱࡏW BMQIBSFMFBTF

Slide 8

Slide 8 text

go-cloudの概要 ‣ HPDMPVE͕αϙʔτ͍ͯ͠Δ1BB4 ‣ (PPHMF$MPVE1MBUGPSN ‣ "NB[PO8FC4FSWJDF ‣ HPDMPVE͕ఏڙ͍ͯ͠ΔΫϥ΢υαʔϏε ‣ #-0#HPDMPVECMPC ‣ .Z42-EBUBCBTFTRM ‣ 0UIFS4UBDLESJWFS΍ϥϯλΠϜFUD

Slide 9

Slide 9 text

正直まだ「揃ってない」感はある

Slide 10

Slide 10 text

まだ使えない?

Slide 11

Slide 11 text

google/go-cloud/wire

Slide 12

Slide 12 text

Wireの前に少し確認

Slide 13

Slide 13 text

Dependency Injection(DI) ‣ ґଘੑͷ஫ೖ ‣ ίϯϙʔωϯτؒͷґଘؔ܎Λίʔυ͔Βഉআ͠ɺ֎෦ͷઃఆ ϑΝΠϧͳͲͰ஫ೖͰ͖ΔΑ͏ʹ͢Δ ‣ (Pʹ͸ϦονͰσϑΝΫτͳ%*πʔϧ͸ͳ͍ʢͱࢥ͍ͬͯΔʣ ‣ ۪௚ʹίϯετϥΫλʔΠϯδΣΫγϣϯͳͲߦ͏

Slide 14

Slide 14 text

例:リポジトリパターンでDI ‣ BVUI5PLFO FSSSETVUJMT#VJME"VUI5PLFO ʜ EOT4USʜ ‣ DPOO FSSTRM0QFO lNZTRMz EOT4US ‣ DS$PNQBOZ3FQPTJUPSZ DPOO ‣ DTDBTF/FX$PNQBOZ6TFDBTF BS

Slide 15

Slide 15 text

オレたちのDIはまだまだ続くぜ…

Slide 16

Slide 16 text

しんどい

Slide 17

Slide 17 text

WireでDIをすっきりさせる

Slide 18

Slide 18 text

Wireとは ‣ HPDMPVEʹؚ·Ε͍ͯΔίϚϯυϥΠϯπʔϧͱ࣮૷༻"1* ‣ HPDMPVE͸8JSFΛ࢖ͬͯ%*͕ग़དྷΔΑ͏ʹ࣮૷͞Ε͍ͯΔ ‣ 8JSFΛ࢖͏͜ͱͰಘΒΕΔϝϦοτ ‣ ґଘؔ܎Λૄʹ͢ΔίʔυΛڧ੍Ͱ͖Δ ‣ ෳࡶͳґଘؔ܎΋8JSF͕%*ίʔυΛࣗಈੜ੒ͯ͘͠ΕΔ ‣ ґଘؔ܎Λ૊Έ߹Θͤͯ৽͍͠ґଘؔ܎΋ఆٛͰ͖Δ

Slide 19

Slide 19 text

Wireを使ったDIの流れ ‣ 1SPWJEFSͱ͍͏֓೦ʹैͬͯґଘؔ܎Λఆ͓ٛͯ͘͠ ‣ *OKFDUPSͱ͍͏֓೦ʹैͬͯ%*Λߦ͏૊Έ߹ΘͤΛఆٛ͢Δ ‣ XJSFHFOίϚϯυΛ࢖ͬͯ%*ίʔυΛࣗಈੜ੒͢Δ

Slide 20

Slide 20 text

ProviderとInjector ‣ 8JSFʹ͸1SPWJEFSͱ*OKFDUPSͱ͍͏ͭͷ֓೦͕͋Δ ‣ 1SPWJEFS ‣ ґଘؔ܎ͷղܾ͕ඞཁͳίϯϙʔωϯτͷू߹ ‣ *OKFDUPS ‣ 1SPWJEFSΛ૊߹ΘͤͯґଘੑΛղܾ͢Δ ‣ ࣮ࡍʹ%*͢Δίʔυ͸ࣗಈੜ੒͢Δ

Slide 21

Slide 21 text

Provider XJSF/FX4FUΛ࢖ͬͯґଘؔ܎Λఆٛ 1SPWJEFSΛجʹผͷ1SPWJEFSΛఆٛ͢Δ͜ͱ΋Ͱ͖Δ

Slide 22

Slide 22 text

Injector XJSF#VJME࢖ͬͯఆٛ ྫ$POUFYUɺDMJ'MBHTͱ͍͏Ҿ਺ͱ1SPWJEFSΛ࢖ͬͯBQQMJDBUJPO F Λੜ੒͢Δ

Slide 23

Slide 23 text

Injector XJSFHFOίϚϯυΛ࢖ͬͯ*OKFDUPS͔Βࣗಈੜ੒ ʢXJSFΛ࢖Θͣʹ͔Β%*Λ͢Δͱ͜͏ͳΔʣ

Slide 24

Slide 24 text

Injector XJSFHFOίϚϯυΛ࢖ͬͯࣗಈੜ੒ͨ͠ίʔυ FSSPS࣌ͷDMFBOVQॲཧͳͲ΋ࣗಈੜ੒ͯ͘͠ΕΔ

Slide 25

Slide 25 text

wireを使ったDIの流れ

Slide 26

Slide 26 text

*sql.DB(Cloud SQL)のDI

Slide 27

Slide 27 text

wire showでProviderを確認する XJSFTIPXίϚϯυͰࢦఆͨ͠ύοέʔδͷ1SPWJEFS৘ใΛऔಘͰ͖Δ

Slide 28

Slide 28 text

不足分は自分で定義する DMPVETRM1BSBNTΛੜ੒͢Δؔ਺Λఆ͓ٛͯ͘͠

Slide 29

Slide 29 text

Injectorを定義する Ϗϧυλά෇͖ͷϑΝΠϧͰ*OKFDUPSΛఆٛ͢Δ ଍Γͳ͍DPOUFYU$POUFYUͱDMJ'MBHT લ1ͷࣗ࡞ؔ਺ͷҾ਺ ΛҾ਺Ͱ༻ҙ͢Δ

Slide 30

Slide 30 text

wire gen

Slide 31

Slide 31 text

自動生成されたコード

Slide 32

Slide 32 text

今日のゴール ‣ HPDMPVEͷ֓ཁΛ஌Δ ‣ 8JSFͷ֓ཁΛ஌Δ ‣ XJSFίϚϯυΛ࢖ͬͨ%FQFOEFODZ*OKFDUJPO %* ͷ΍Γํ͕Θ͔Δ

Slide 33

Slide 33 text

まとめ ‣ HPDMPVE͸΋ͬͱ"1*ఆٛ ͱαϙʔτ1BB4 ͕૿͑ͯ΄͍͠ ‣ XJSFΛ࢖͏ͱ%*ίʔυ͕؆୯ʹࣗಈੜ੒Ͱ͖ΔΑ͏ʹͳΔ ‣ XJSFίϚϯυ͸HPDMPVEҎ֎Ͱ΋࢖͑ΔͷͰࣗ࡞QLHͰ΋%*Ͱ͖Δ