Slide 1

Slide 1 text

TIBLF43&5FDI5BML!OXJJ[P DPCSB͸ศརʹͳ͍ͬͯΔ TQGDPCSB࠷৽ػೳٴͼӡ༻࣌ʹޮ͘ػೳ

Slide 2

Slide 2 text

ૣ଎Ͱ͕͢ օ͞ΜɺࣗಈԽ 
 ͯ͠·͔͢ʁ ୀ۶ͳ͜ͱ͸1ZUIPOʹ΍ΒͤΑ͏ୈ൛ʕϊϯϓϩάϥϚʔʹ΋Ͱ͖ΔࣗಈԽॲཧϓϩάϥϛϯά

Slide 3

Slide 3 text

๻΋ࣗಈԽ͕޷͖Ͱ͢

Slide 4

Slide 4 text

͔͠͠ɺෳࡶʹൃୡͨ͠ 
 ࣗಈԽ͸ࣗવͷౖΓͱ 
 ۠ผ͕͔ͭͳ͍

Slide 5

Slide 5 text

ࣗಈԽʹඞཁͳͷ͸டং

Slide 6

Slide 6 text

ίϚϯυϥΠϯπʔϧʹ͍ͭͯޠΔͱ͖ʹ๻ͷޠΔ͜ͱ #yapcasia
 https://speakerdeck.com/tcnksm/komandorainturunituiteyu-rutokinipu-falseyu-rukoto-number-yapcasia $-*5PPMΛॻ͘ͱ͖ϨϏϡʔͰ໎ͬͨ࣌ʹ͸ 
 ΄΅ɺඞͣͪ͜ΒͷυΩϡϝϯτΛݟ͍ͯ·͢ɻ 
 πʔϧͷػೳΑΓͪ͜ΒʹཔΕʂʂʂ

Slide 7

Slide 7 text

ίϚϯυϥΠϯπʔϧʹ͍ͭͯޠΔͱ͖ʹ๻ͷޠΔ͜ͱΑΓҾ༻ w ίϚϯυϥΠϯπʔϧʹ͓͍ͯॏཁͳϙΠϯτ 
 ͭͷ͜ͱʹूத͍ͯ͠ 
 ௚ײతʹ࢖͑Δ 
 ଞͷπʔϧͱ࿈ܞͰ͖Δ 
 ར༻Λॿ͚ͯ͘ΕΔ 
 ద੾ͳσϑΥϧτ஋Λ࣋ͪઃఆ΋Ͱ͖Δ 
 ۤ௧ͳ͘ΠϯετʔϧͰ͖Δ 
 ͙͢ʹվमͰ͖Δ ίϚϯυϥΠϯπʔϧʹ͍ͭͯޠΔͱ͖ʹ๻ͷޠΔ͜ͱ #yapcasia
 https://speakerdeck.com/tcnksm/komandorainturunituiteyu-rutokinipu-falseyu-rukoto-number-yapcasia w ͍͔ʹzྑ͍z$-*πʔϧΛ࡞Γ࢝ΊΔ͔ʁʹ͍ͭͯͷͭͷखॱ 
 ͲΜͳπʔϧΛ࡞Δ͔ߟ͑Δ 
 ݴޠΛબͿ 
 3&"%/&NEΛॻ͘ 
 ߴ଎ʹϓϩτλΠϓΛ࡞Δ

Slide 8

Slide 8 text

ࢲͷࠢͷ੤໿📄 w 4IFMM4DSJQU͸ߦ͙Β͍·Ͱ w ͦΕҎ֎͸(PMBOHͰ։ൃ 
 🔔ϥΠϒϥϦ΍πʔϧ͕ͳ͍ͳͲͰͦͷબ୒ࢶҎ֎ͩͱ 
 ɹࣗಈԽʹͱͯ΋޻਺͕͔͔Δ৔߹ʹ͸ଞͷݴޠΛ࢖͏ 
 🔔(PݴޠͰͷϝϦοτ͸͍͔ͭ͋͘Γ·͕͢zۤ௧ͳ͘ΠϯετʔϧͰ͖ͯར༻͠ଓ͚қ͍z 
 ɹίϚϯυϥΠϯπʔϧΛॻ͘͜ͱʹ޲͍͍ͯΔͱࢥ͍·͕͢ຊൃදͰ͸औΓѻΘͳ͍ 
 🔔Α͍(PͷίʔυΛॻ͘ʹ͸ʮ(Pʹೖͬͯ͸(Pʹै͑ʯͳͲͷΑ͍ࢿྉ͕͋ΔͷͰ 
 ɹຊൃදͰ͸औΓѻΘͳ͍ͷͰͥͻɺಡΜͰΈͯ΄͍͠Ͱ͢ɻ 
 ɹ

Slide 9

Slide 9 text

ͷ ࿩ʹ΍ͬͱಥೖ͢Δ -5ͳͷʹ લஔ͖Ͱ͋Δ

Slide 10

Slide 10 text

TQGDPCSBͱ͸ʁ w (PʹΑΔ੩తαΠτδΣωϨʔλʔͰ͋ΔIVHPͷ ։ൃऀͱͯ͠஌ΒΕΔɻTQGࢯʹΑΔ$-*Λ࡞੒ ͢ΔҝͷπʔϧͰ͢ɻ IUUQTHJUIVCDPNTQGDPCSB $ go mod init SRETT04 $ cobra-cli init ਽ܗͷ࡞੒ . ᵓ── LICENSE ᵓ── README.md ᵓ── cmd │ └── root.go ᵓ── go.mod ᵓ── go.sum └── main.go 1 directory, 6 fi les IUUQTTZVNIBUFOBCMPHDPNFOUSZ (PMBOHͰ$-*5PPMΛ࡞Δ࣌ʹ͸$PCSBΛ࢖͍͕ͪ DPCSB͔ΒDPCSBDMJʹมߋ͠·ͨ͠ IUUQTHJUIVCDPNTQGDPCSBSFMFBTFTUBHW

Slide 11

Slide 11 text

TQGDPCSBͱ͸ʁ w ༷ʑͳػೳ͕͋Γ$PCSBΛར༻͢Δͱ 
 αϒίϚϯυͷݟ௨͠ͳͲ΋ྑ͘ͳΓ 
 ·ͨɺIFMQ΁ͷ௥Ճ΋ࣗಈͰߦͬͯ͘ΕΔ IUUQTHJUIVCDPNTQGDPCSB $ cobra-cli add get $ cobra-cli add create αϒίϚϯυͷ௥Ճ . ᵓ── LICENSE ᵓ── README.md ᵓ── cmd │ ᵓ── create.go │ ᵓ── get.go │ └── root.go ᵓ── go.mod ᵓ── go.sum └── main.go ϑϥάͷ௥ՃͳͲ͸ࣗલͰ࣮૷͕ඞཁ 
 JOJU ಺ͰϑϥάΛఆٛ ࣮ࡍͷॲཧͰϑϥάΛࢀর HFUHP΍DSFBUFHPʹ 
 ֤ػೳΛ࣮૷Λ͢Ε͹ྑ͍ 🔔-POH)FMQʹ 
 ɹ(JUIVC3FQPTJUPSZ͸ 
 ɹॻ͍͓͍ͯͯ΄͍͠ 
 ɹະདྷͷӡ༻Λ͢Δ୭͔ͷͨΊʹ IUUQTHJUIVCDPNTQGDPCSBCMPCNBJOVTFS@HVJEFNE

Slide 12

Slide 12 text

ͷศརػೳͷ ࿩ʹ΍ͬͱಥೖ͢Δ -5ͳͷʹ ຊ୊Ͱ͋Δ

Slide 13

Slide 13 text

ᶃࣗಈิ׬ IUUQTTZVNIBUFOBCMPHDPNFOUSZ (Pݴޠͷ$-*࡞੒πʔϧͰ͋ΔDPCSBͷγΣϧิ׬ͷੜ੒͕͋·Γʹ΋؆୯ $ [command] completion fi sh fi TIิ׬ϑΝΠϧ $ [command] completion [bash|zsh| fi sh|powershell] CBTIc[TIc fi TIc QPXFSTIFMM 
 ิ׬ϑΝΠϧ ࣗಈิ׬ϑΝΠϧ͕؆୯ʹੜ੒Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠ 
 ରԠ͍ͯ͠Δͷ͸CBTIc[TIcGJTIcQPXFSTIFMMʹରԠ͍ͯ͠Δ

Slide 14

Slide 14 text

ᶄ(SPVQGMBHTػೳʹ͍ͭͯ w 'MBHΛ૬ޓʹඞཁͳΦϓγϣϯΛද͢৔߹ rootCmd.Flags().StringVarP(&u, "username", "u", "", "Username (required if password is set)") rootCmd.Flags().StringVarP(&pw, "password", "p", "", "Password (required if username is set)") rootCmd.MarkFlagsRequiredTogether("username", "password") IUUQTHJUIVCDPNTQGDPCSBCMPCNBJOVTFS@HVJEFNE fl BHHSPVQT Flag Groups rootCmd.Flags().BoolVar(&u, "json", false, "Output in JSON") rootCmd.Flags().BoolVar(&pw, "yaml", false, "Output in YAML") rootCmd.MarkFlagsMutuallyExclusive("json", "yaml") w 'MBHΛ૬ޓʹഉଞతͳΦϓγϣϯΛද͢৔߹ 'MBHʹάϧʔϓػೳ௥Ճ͢Δͷ΋؆୯ʹ࣮ݱͰ͖Δ ⭐ӡ༻࣌ʹґཔ͢Δ࣌ʹָ 
 ɹԿ͕଍Γͳ͍͔ࣔ͢ͷେมʜ

Slide 15

Slide 15 text

ᶅΞΫςΟϒϔϧϓ w #BTIͱ[TIͷΈʹରԠ͍ͯ͠ΔɻUBCΛԡ͍ͯ͠ΔλΠϛϯάͰ 
 ର࿩తʹϔϧϓΛग़͢ػೳ IUUQTHJUIVCDPNTQGDPCSBCMPCNBJOBDUJWF@IFMQNE ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { var comps []string if len(args) == 0 { comps = cobra.AppendActiveHelp(comps, "You must choose a name for the repo you are adding") } else if len(args) == 1 { comps = cobra.AppendActiveHelp(comps, "You must specify the URL for the repo you are adding") } else { comps = cobra.AppendActiveHelp(comps, "This command does not take any more arguments") } return comps, cobra.ShellCompDirectiveNoFileComp }, bash-5.1$ helm repo add [tab] You must choose a name for the repo you are adding bash-5.1$ helm repo add grafana [tab] You must specify the URL for the repo you are adding bash-5.1$ helm repo add grafana https://grafana.github.io/helm-charts [tab] This command does not take any more arguments ⭐ର࿩࣌ʹָʹͳΔͷͰخ͍͠ɹ fi TIར༻ऀ͸Ըܙʹ༬͔Εࢮ

Slide 16

Slide 16 text

׬