Slide 1

Slide 1 text

(PͰ$-*πʔϧΛ࡞Δʂ

Slide 2

Slide 2 text

௕ஸ৔ʹͳΓ·͕͢
 Θ͍Θ͍΍͍͖ͬͯ·͠ΐ͏ʂ

Slide 3

Slide 3 text

w ࠓ೔͸$-*πʔϧΛ࡞Δ࿩Λ͢ΔͷͰɼͦΕҎ֎ͷ(Pͷ࿩͸ͳΔ΂͘ආ͚ ·͢ɽ ຊ࣭ͱ͸཭Εͨίʔυ͕૿͑ΔͷͰ w దٓɼ༨ஊͱ֤ͯ͠ϓϥΫςΟεͷิ଍Λ͠·͢ɽ ͓͜ͱΘΓ 3

Slide 4

Slide 4 text

w ͳͥ(PͰ$-*πʔϧΛ࡞Δͷ͔ w ࠓ೔࡞Δπʔϧͷ࢓༷೺Ѳ w ඪ४ϥΠϒϥϦͰ࡞ͬͯΈΔ w Πϯετʔϧͯ͠ΈΔ w ੩తϑΝΠϧΛόΠφϦʹຒΊࠐΉ w 4DBMBCMFͳ࣮૷ʹ͢Δ 4DIFEVMF 4

Slide 5

Slide 5 text

ͳͥ(PͰ$-*πʔϧΛ࡞Δͷ͔

Slide 6

Slide 6 text

w HIR QFDP (PͰ࡞ΒΕ͍ͯΔπʔϧͨͪ 6

Slide 7

Slide 7 text

w จ๏͕γϯϓϧ w ίϯύΠϧݴޠ w γϯάϧόΠφϦ w ΫϩείϯύΠϧՄೳ w ίϛϡχςΟ͕׆ൃ (PͷϝϦοτ 7

Slide 8

Slide 8 text

w γεςϚνοΫʹݎ࿚ͳαʔϏεΛ૊Ήͷ͸ۤख ‣ ͦ͏͍͏ͷ͸3VTUͱ͔ؔ਺ܕݴޠͷ࢓ࣄ ‣ υϝΠϯϩδοΫʹूதͰ͖ͯߴ଎ʹαʔϏεΛ੒௕ͤ͞ΒΕΔͷ͕ڧΈ͔ͩΒ (Pͷۤखͳ͜ͱ 8

Slide 9

Slide 9 text

w IUUQTCFODINBSLTHBNFUFBNQBHFTEFCJBOOFUCFODINBSLTHBNF GBTUFTUHPHQQIUNM w (P͸ίϯύΠϧݴޠ͚ͩͲ($͕Φʔόʔϔουʹͳͬͯগ͠஗͍ ‣ ͦͷ୅ΘΓϝϞϦ҆શ w ͔͠͠։ൃ଎౓ͱ࣮ߦ଎౓͕ͪΐ͏Ͳ͍͍ ଎౓͸ 9

Slide 10

Slide 10 text

ααοͱ࡞Γ͍ͨ࣌ʹ
 બ୒͞ΕΔͷ͕(PMBOH

Slide 11

Slide 11 text

ࠓ೔࡞Δπʔϧͷ঺հ

Slide 12

Slide 12 text

w EBJMZSFQP ‣ ೔ใͷ਽ܗ࡞੒πʔϧ ‣ BEEαϒίϚϯυͰςϯϓϨʔτʹैͬͨϨϙʔτ࡞੒ - dailyrepo add --name [name] w ࠓճ͸งғؾΛ௫ΉͨΊʹػೳ͸࠷௿ݶ ೔ใ਽ܗ࡞੒πʔϧ 12

Slide 13

Slide 13 text

࣮૷͍ͯ͘͠લʹ
 ͱ͜ΖͰօ͞Μ

Slide 14

Slide 14 text

งғؾͰ$-*πʔϧ
 ࡞͍ͬͯ·ͤΜ͔ʁ

Slide 15

Slide 15 text

࣮͸ͦΕɼϚφʔҧ൓͔΋

Slide 16

Slide 16 text

w Ҿ਺͸ͲͷΑ͏ʹઃܭ͢Δ΂͖ʁ w ϑΝΠϧͷѻ͍͸Ͳ͏͢Δ΂͖ʁ w &YJU4UBUVT͸ԿΛฦ͢΂͖ʁ w ࠔͬͨͱ͖ʹಡΉEFFFFU͞Μͷૉ੖Β͍͠ࢿྉ ‣ IUUQTTQFBLFSEFDLDPNUDOLTNLPNBOEPSBJOUVSVOJUVJUFZVSVUPLJOJQV GBMTFZVSVLPUPOVNCFSZBQDBTJB ‣ PQUJPOTͱBSHVNFOUTͷҐஔؔ܎͕ೖΕସΘͬͯΔͷ͸Α͘ݟΔ ࣮૷͢Δͱ͖ʹߟ͑Δ͜ͱ 16

Slide 17

Slide 17 text

104*9(/6TUZMF

Slide 18

Slide 18 text

w IUUQTQVCTPQFOHSPVQPSHPOMJOFQVCT w IUUQTXXXHOVPSHTPGUXBSFMJCDNBOVBMIUNM@NPOPMJCDIUNM w 6OJYΛ࢝Ίͱ֤ͨ͠छ04ؒͰҠ২͠΍͍͢ΞϓϦέʔγϣϯΛ
 ࡞ΔͨΊͷࠃࡍن֨ w ͍ͭ͜ΒͷৼΔ෣͍Λਅࣅ͓͚ͯ͠͹จ۟͸ݴΘΕͳͦ͞͏ 104*9(/6TUZMF 18

Slide 19

Slide 19 text

w "MMQSPHSBNTTIPVMETVQQPSU ‣ --version ‣ --help w MPOHPQUJPO͸Λ࢖͏ w TIPSUPQUJPO͸Λ࢖͏ ‣ ϑϥάͷ৔߹·ͱΊΔ͜ͱ͕Ͱ͖ΔΑ͏ʹ FHls -al ‣ Ҿ਺ΛऔΔ৔߹͸ɼؒʹεϖʔεΛ࢖ͬͯ΋࢖Θͳͯ͘΋ྑ͍ FHmysql -uroot w IUUQTXXXHOVPSHTPGUXBSFMJCDNBOVBMIUNM@OPEF"SHVNFOU4ZOUBYIUNM 'MBH0QUJPOT 19

Slide 20

Slide 20 text

w جຊతʹ͕੒ޭͰ͕ࣦഊ w "EWBODFE#BTI4DSJQUJOH(VJEFʹࡌ͍ͬͯΔن֨ ‣ IUUQUMEQPSH-%1BCTIUNMFYJUDPEFTIUNM ‣ Ͳ͏ͤTIͰ࣮ߦ͢Δͱ͖͸CJOCBTIΛࢦఆ͢Δ͜ͱ͕ଟ͍͠ w 'SFF#4%ϥΠϒϥϦؔ਺ϚχϡΞϧ ‣ IUUQTLBXPSVKQOPSHEPD'SFF#4%KNBONBOTZTFYJUTQIQ w ͋Μ·ΓϋϯυϦϯάͯ͠ΔΞϓϦέʔγϣϯݟͨ͜ͱແ͍͚Ͳ &YJU4UBUVT 20

Slide 21

Slide 21 text

w 9%(#BTF%JSFDUPSZ ‣ IUUQTTUBOEBSETGSFFEFTLUPQPSHCBTFEJSTQFDMBUFTUJOEFYIUNM ‣ πʔϧͷઃఆϑΝΠϧ΍ΩϟογϡΛͲ͜ʹஔ͔͘Λఆٛͨ͠࢓༷ॻ )0.&DPOpHͱ͔ w Ұ࣌తͳϑΝΠϧ͸UNQʹஔ͘͜ͱ΋ଟ͍ 6OJYɾ-JOVYܥ ϑΝΠϧͷѻ͍ 21

Slide 22

Slide 22 text

– @mygwdesign lσβΠϯ͸ར༻͢Δ΋ͷɻΞʔτ͸ؑ৆͢Δ΋ͷɻz

Slide 23

Slide 23 text

$-*ΛσβΠϯ͠·͠ΐ͏

Slide 24

Slide 24 text

Ͱ͸͍࣮͟૷ʂ

Slide 25

Slide 25 text

w (JU)VCʹࠓ೔ͷϦϙδτϦΛ࡞͍ͬͯͩ͘͞ ‣ ࡞੒ͨ͠πʔϧΛ(JU)VC͔Β௚઀Πϯετʔϧ͢Δͱ͖ʹ࢖͍·͢ w ࠓ೔ͷ׬੒ܗ ‣ IUUQTHJUIVCDPNUBYJPHPDMJUVUPSJBM ‣ ໎ͬͨΒ͜͜Λࢀߟʹίϐϖ͍ͯͩ͘͠͞ w ϋϯζΦϯͳͷͰ෼͔Βͳ͍৔߹͸ͲΜͲΜखΛ্͍͛ͯͩ͘͞ ‣ ๻͚ͩͰ͸ख͕·ΘΒͳ͍͜ͱ΋͋ΔͷͰɼ
 ྡͷਓ͕ࠔ͍ͬͯΔ৔߹͸ڭ͍͑ͯ͋͛ͯͩ͘͞ ࡞͍ͬͯ͘ʹ͋ͨͬͯ 25

Slide 26

Slide 26 text

ඪ४ϥΠϒϥϦͰ࣮૷ͯ͠ΈΔ

Slide 27

Slide 27 text

w qBH ‣ IUUQTHPMBOHPSHQLHqBH ‣ ίϚϯυϥΠϯҾ਺Ͱ౉͞ΕΔϑϥάͷύʔεपΓΛ؅ཧͯ͘͠ΕΔ ‣ ͱͯ΋ബ͍ϥΠϒϥϦͳͷͰͥͻιʔεΛݺΜͰงғؾΛ௫ΜͰΈ·͠ΐ͏ ϥΠϒϥϦ঺հ 27

Slide 28

Slide 28 text

w ׬੒ܗIUUQTHJUIVCDPNUBYJPHPDMJUVUPSJBMCMPCNBTUFSDNE EBJMZSFQPNBJOHP ‣ TUBUJLύοέʔδΛ࢖ͬͯΔͷ͸Ұ୴ແࢹͯ͠ɼJPVUJM3FBE'JMF Λ࢖͍ͬͯͩ͘͞ w σϑΥϧτͷqBHΦϒδΣΫτΛ࢖͏ͱFSSPS)BOEMJOHʹ&YJU0O&SSPS͕
 ઃఆ͞Ε͍ͯΔͷͰɼIFMQग़ྗ࣌ʹFYJUTUBUVTͰऴྃͯ͠͠·͏ ‣ AIA AIFMQAΛࣗ෼Ͱఆٛ͢Ε͹໰୊ͳ͍ ࣮૷͢Δ 28

Slide 29

Slide 29 text

-JWF$PEJOH

Slide 30

Slide 30 text

w MPOHPQUJPO͸Ͱ͖·͢ ‣ IUUQNBUPQFIBUFOBCMPHDPNFOUSZ ‣ εϚʔτͰ͸ͳ͍ w TIPSUPQUJPO͸·ͱΊΕͳͦ͞͏ ‣ ஌Βͳ͍͚ͩͰɼ΋͔ͨ͠͠ΒͰ͖Δ͔΋ w ͦ΋ͦ΋(Pࣗମ͕ͦ͏͍͏$-*Λఏڙ͍ͯ͠ͳ͍ qBHͰ͸104*9(/6TUZMFͳ$-*͸࡞Εͳ͍ʁ 30

Slide 31

Slide 31 text

Πϯετʔϧͯ͠ΈΔ

Slide 32

Slide 32 text

w go install͢Δͱ(01"5)CJOҎԼʹόΠφϦ͕ஔ͔ΕΔ w NBJOύοέʔδͷ͋ΔϦϞʔτϦϙδτϦΛgo getͯ͠΋0, ‣ HPHFUHJUIVCDPNUBYJPHPDMJIBOETPODNEEBJMZSFQP ‣ IUUQTHPMBOHPSHDNEHPIES %PXOMPBE@BOE@JOTUBMM@QBDLBHFT@BOE@EFQFOEFODJFT w όΠφϦ໊͸ʁ ‣ NBJOύοέʔδͷ͋ΔσΟϨΫτϦ໊ )PXUPJOTUBMM 32

Slide 33

Slide 33 text

w (PͰ͸खܰʹΫϩείϯύΠϧͰ͖Δͷ͕ڧΈͰͨ͠Ͷ ‣ GOOS={{OS໊}} GOARCH={{ΞʔΩςΫνϟ໊}} go build ‣ (PΠϯετʔϧ࣌ʹଞ؀ڥͷґଘ΋ೖΕ͓͚ͯ͹͜Ε͚ͩͰΫϩείϯύΠϧՄೳ ͷ ͸ͣ ‣ $(0ΛແޮԽ͓͚ͯ͠͹ɼTUBUJDMJOL΋Ͱ͖Δ CGO_ENABLED=0 ‣ ରԠ؀ڥIUUQTHPMBOHPSHEPDJOTUBMMTPVSDFFOWJSPONFOU w $*ͰόΠφϦੜ੒ͯ͠ɼ(JU)VCͷ3FMFBTFʹࡌͤΔͷ͕Α͋͘Δӡ༻ํ๏ ‣ (P3FMFBTFSΛ࢖͏ͱָ ‣ IUUQTHJUIVCDPNHPSFMFBTFSHPSFMFBTFS ‣ IUUQTHPSFMFBTFSDPNDJ )PXUPDSPTTDPNQJMF 33

Slide 34

Slide 34 text

σΟϨΫτϦߏ੒ʹ͍ͭͯ 34 /Project
 main.go # package main
 lib/
 dailyrepo.go # package dailyrepo w ެ։͍ͨ͠ϓϩδΣΫτ͕πʔϧͳͷ͔ϥΠϒϥϦͳͷ͔ʹΑͬͯɼ
 σΟϨΫτϦߏ੒͸େ͖͘มΘΔɽ ‣ ࢀߟΈΜͳͷ(Pݴޠ ࠓ౓վగ൛͕ग़ΔΒ͍͠Ͱ͢ w Ϣʔβ͕go getͨ࣌͠ͷҙਤ͠ͳ͍JOTUBMMΛճආͤ͞Δ /Project
 dailyrepo.go # package dailyrepo
 cmd/
 dailyrepo/
 main.go # package main πʔϧ όΠφϦ ͕ϝΠϯͷ੒Ռ෺ͷ৔߹ ϥΠϒϥϦ͕ϝΠϯͷ੒Ռ෺ͷ৔߹

Slide 35

Slide 35 text

੩తϑΝΠϧΛຒΊࠐΉ

Slide 36

Slide 36 text

w (PͷڧΈͷ̍ͭʹγϯάϧόΠφϦͱ͍͏ͷ͕͋ͬͨ ‣ ੩తϑΝΠϧʹґଘ͢Δπʔϧͩͬͨ৔߹ɼͦͷϑΝΠϧ΋Πϯετʔϧ࣌ʹ
 μ΢ϯϩʔυͤ͞Δͷʁ ‣ όΠφϦʹຒΊࠐΜ͡Ό͑ w SE1BSUZͷϥΠϒϥϦΛ࢖࣮ͬͯ૷͢Δ ‣ KUFFVXFOHPCJOEBUBͱ͍͏ͷ͕͕͋ͬͨࠓ͸%FQSFDBUFE ͱ͍͏͔࡞ऀ͕(JU)VCΞΧ΢ϯτΛফͨ͠ ‣ "XFTPNF(PΛݟͯ୳ͦ͏ IUUQTBXFTPNFHPDPNSFTPVSDFFNCFEEJOH ຒΊࠐΉ 36

Slide 37

Slide 37 text

ҰԠެࣜͬΆ͍΍Γํʁ 37 $ go build -ldflags "-X main.Version=v0.0.1" w SE1BSUZʹཔΒͳͯ͘΋όΠφϦʹ੩తϑΝΠϧ͸ຒΊࠐΊΔ w #VJME࣌ʹม਺ʹ஋ΛຒΊࠐΉ͜ͱ͕Ͱ͖Δ ‣ (JUͷ৘ใΛऔͬͯ7FSTJPOΛຒΊࠐΉͷ͸Α͘ݟΔ w ͍΍Ͱ΋͜ΕͰϑΝΠϧͷ಺༰ΛຒΊࠐΉͷ͸ਏ͍

Slide 38

Slide 38 text

w IUUQTHJUIVCDPNSBLZMMTUBUJL w ੩తϑΝΠϧͷ[JQσʔλ όΠτྻ Λ(PίʔυͷதʹϋʔυίʔσΟϯά ͍ͯ͠Δɽ ‣ *TUIJTBDSB[ZJEFB /P OPUOFDFTTBSZ SBLZMMTUBUJL 38

Slide 39

Slide 39 text

TUBUJLͰຒΊࠐΜͰΈΔ 39 # install
 $ go get github.com/rakyll/statik # ϑΝΠϧ࡞੒
 $ statik --src=templates/ w ͖ͬ͞ͷςϯϓϨʔτϑΝΠϧಡΈࠐΈΛࠩ͠ସ͑·͠ΐ͏ ‣ IUUQTHJUIVCDPNUBYJPHPDMJUVUPSJBMCMPCNBTUFSDNEEBJMZSFQPNBJOHP

Slide 40

Slide 40 text

TUBUJLͰຒΊࠐΜͰΈΔ 40 bptl, err := ioutil.ReadFile("../../templates/report.md.tmpl") statikFs, err := fs.New() if err != nil { log.Fatal(err) } tplFile, err := statikFs.Open("/report.md.tmpl") if err != nil { log.Fatal(err) } defer tplFile.Close() btpl, err := ioutil.ReadAll(tplFile)

Slide 41

Slide 41 text

-JWF$PEJOH

Slide 42

Slide 42 text

͜͜ͰҰ୴׬੒ʂ

Slide 43

Slide 43 text

Ͱ΋ػೳ͕૿͖͑ͯͨΒʁ ͜ͷϑϥά؅ཧͰεέʔϧͰ͖Δ

Slide 44

Slide 44 text

4DBMBCMFͳ࣮૷ʹม͑Δ

Slide 45

Slide 45 text

w ϑϥάͷύʔαʔΛ΋ͬͱݡ͍΋ͷʹ͢Δ ‣ ྲྀੴʹTIPSU MPOHPQUJPO͸ཉ͍͠ ‣ TIPSUPQUJPOΛ·ͱΊ͍ͨ w ςετ͠΍͍͢Α͏ʹ͢Δ ‣ ϑΝΠϧγεςϜૢ࡞ͩͬͯςετ͍ͨ͠ ‣ ඪ४ग़ྗͩͬͯςετ͍ͨ͠ ํ਑ 45

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

w ͜ͷਓͷੈք؍ʹै͑͹େମඞཁͳػೳ͸ἧ͏ w QqBH ‣ 104*9(/6TUZMF४ڌͳqBHΑΓͪΐͬͱݡ͍ϑϥάύʔαʔ w DPCSB ‣ QqBHΛϕʔεʹ࡞ΒΕͨ$-*ϑϨʔϜϫʔΫ w BGFSP ‣ ϑΝΠϧγεςϜͷந৅ԽϥΠϒϥϦ w WJQFS ‣ ઃఆϑΝΠϧ؅ཧϥΠϒϥϦ TQGͱ͍͏εΰ͍ਓ 47

Slide 48

Slide 48 text

·ͣDPCSBͰ࣮૷͍ͯ͘͠ 48 # install
 $ go get github.com/spf13/cobra # init
 $ cobra init dailyrepo --pkg-name github.com/{Ϣʔβʔ໊}/{ϦϙδτϦ໊}/cmd/dailyrepo # create `add` sub command
 $ cobra add add w ؤு͖ͬͯͬ͞ͷ࣮૷Λ࠶ݱ ‣ IUUQTHJUIVCDPNUBYJPHPDMJUVUPSJBMUSFFNBTUFSDNEEBJMZSFQPFY

Slide 49

Slide 49 text

-JWF$PEJOH

Slide 50

Slide 50 text

w IUUQTHJUIVCDPNBWFMJOPBXFTPNFHPTUBOEBSEDMJ w Α͘ฉ͘΍ͭ ‣ KFTTFWELHPqBHT ‣ BMFDUIPNBTLJOHQJO ‣ VSGBDFDMJ ‣ NJUDIFMMIDMJ QqBH DPCSBҎ֎ͷબ୒ࢶ 50

Slide 51

Slide 51 text

TQGBGFSP 51 # install
 $ go get github.com/spf13/afero w IUUQTHJUIVCDPNTQGBGFSP w ϑΝΠϧγεςϜͷૢ࡞Λந৅Խͯ͘͠ΕΔϥΠϒϥϦ ‣ BGFSP'T0T04ଆͷϑΝΠϧγεςϜ ‣ BGFSP.FN.BQ'TϝϞϦ্ʹߏங͞ΕͨϑΝΠϧγεςϜ ςετ࣌ʹ࢖͏

Slide 52

Slide 52 text

-JWF$PEJOH

Slide 53

Slide 53 text

w GNU1SJOUMO ͸PT4UEPVUʹରͯ͠GNU'QSJOUMO ͍ͯ͠Δɽ ‣ PT4UEPVUΛCZUFT#V⒎FSʹࠩ͠ସ͑ΕΔΑ͏ʹ͓ͯ͘͠ w ࠓճ͸WFSTJPOͷQSJOUΛςετͯ͠Έ·͢ ඪ४ग़ྗΛςετ͢Δ 53

Slide 54

Slide 54 text

-JWF$PEJOH

Slide 55

Slide 55 text

׬੒ʂ

Slide 56

Slide 56 text

w HJUIVCDPNTQGWJQFS ‣ ίϚϯυϥΠϯϑϥάɼ؀ڥม਺ɼઃఆϑΝΠϧ KTPO UPNM ZBNM FUD ɼ
 ϦϞʔτઃఆγεςϜ FUDE FUD ɼσϑΥϧτ஋͔Βઃఆ஋Λऔಘ͢Δɽ w os.UserHomeDir, os.UserCacheDir, 
 os.UserConfigDir ͜Ε͸·ͩϦϦʔε͞Εͯͳ͍ Λ࢖ͬͯ
 ઃఆϑΝΠϧΛݟ͚ͭΑ͏ ༨ஊઃఆϑΝΠϧͷ࿩ 56

Slide 57

Slide 57 text

w ࠷ۙͷπʔϧ͸݁ߏ(PͰॻ͔Ε͍ͯΔ w (Pͩͱ࡞੒࣌΋࡞੒ޙ΋࢖͍΍͍͢$-*πʔϧΛ࡞Δ͜ͱ͕Ͱ͖Δ w டংͷແ͍$-*͸Ξʔτ ·ͱΊ 57

Slide 58

Slide 58 text

w MPHHJOH ‣ cobra.OnInitialize()ͰWFSCPTFͷਅِ஋ΛݟͯMPHͷઃఆΛม͑ͨΓ͢Δ w ΞʔΩςΫνϟ ‣ جຊతʹࠓ೔ͷϑΝΠϧγεςϜ΍ඪ४ग़ྗͷந৅ԽͷΑ͏ͳΠϝʔδͰ
 ͦΕͧΕͷ੹຿Λશ͏͢ΔϞδϡʔϧΛந৅Խ͍ͯ͘͠ ‣ (PͰ"1*αʔόʔΛ࣮૷͢Δͱ͖͸ϨΠϠʔυΞʔΩςΫνϟ͕Α͘࠾༻͞Ε·͢ w ΤϥʔϋϯυϦϯά ‣ (PͰYFSSPST͕ඪ४ͷFSSPSTʹ૊Έࠐ·ΕΔΒ͍͠Ͱ͢ IUUQTHPHPPHMFTPVSDFDPNQSPQPTBMNBTUFSEFTJHOFSSPSWBMVFTNE ‣ ϋϯυϦϯάʹ͍ͭͯIUUQTNFEJVNDPNZBLLBCFUUFSHPFSSPSIBOEMJOHXJUI YFSSPSTFD ࠓ೔࿩ͯ͠ͳ͍಺༰ 58

Slide 59

Slide 59 text

w HP[(Pʹؔ͢Δχϡʔε·ͱΊ ‣ IUUQHP[IFYBDPTBOFU w HPXJLJ৭ʑͳϓϥΫςΟε͕·ͱ·͍ͬͯΔ ‣ IUUQTHJUIVCDPNHPMBOHHPXJLJ w 5IF(P#MPHެࣜΞφ΢ϯεͱ͔ ‣ IUUQTCMPHHPMBOHPSH ༨ஊ(PΛֶͼ͍ͨͳΒ 59

Slide 60

Slide 60 text

Ҏ্ʂ ͓ർΕ༷Ͱͨ͠ʂ