Upgrade to Pro — share decks privately, control downloads, hide ads and more …

go-cloudとWireを利用したDI / go-cloud-and-dependency-injection-by-wire

go-cloudとWireを利用したDI / go-cloud-and-dependency-injection-by-wire

Go(Un)Conference(Goあんこ)LT大会 4kgの発表資料です。
https://gounconference.connpass.com/event/99487/

go-cloudの雑感とwireコマンドについてまとめました。

口頭で説明する内容や、文中のリンクは以下のブログで補足します。
https://budougumi0617.github.io/2018/10/19/presentation-gounco-lt4/

Yoichiro Shimizu

October 19, 2018
Tweet

More Decks by Yoichiro Shimizu

Other Decks in Technology

Transcript

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

    View full-size slide

  2. 自己紹介
    ‣ ਗ਼ਫཅҰ࿠!CVEPVHVNJ

    ‣ #BDLFOE%FTLUPQ"QQFOHJOFFS
    ‣ (P3VCZPO3BJMT3FBDU
    ‣ ϒϩάIUUQCVEPVHVNJHJUIVCJP
    ‣ ίϛϡχςΟ׆ಈHPMBOHUPLZP

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. まだ使えない?

    View full-size slide

  11. google/go-cloud/wire

    View full-size slide

  12. Wireの前に少し確認

    View full-size slide

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

    View full-size slide

  14. 例:リポジトリパターンでDI
    ‣ BVUI5PLFO FSSSETVUJMT#VJME"VUI5PLFO ʜ
    EOT4USʜ
    ‣ DPOO FSSTRM0QFO lNZTRMz EOT4US

    ‣ DS$PNQBOZ3FQPTJUPSZ DPOO

    ‣ DTDBTF/FX$PNQBOZ6TFDBTF BS

    View full-size slide

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

    View full-size slide

  16. しんどい

    View full-size slide

  17. WireでDIをすっきりさせる

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. wireを使ったDIの流れ

    View full-size slide

  26. *sql.DB(Cloud SQL)のDI

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. 自動生成されたコード

    View full-size slide

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

    View full-size slide

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

    View full-size slide