Slide 1

Slide 1 text

Bitkey Inc. Connect Product Noriki Takahashi αΫοͱ࡞Δ੩తղੳπʔϧ -import ͷґଘ੍ޚπʔϧΛ࡞Δ-

Slide 2

Slide 2 text

Outline 2 2 1. ࣗݾ঺հ 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ 3. ਽ܗੜ੒πʔϧ: skeleton 4. ੩తղੳ༻ύοέʔδ: analysis 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 6. ·ͱΊ

Slide 3

Slide 3 text

1. ࣗݾ঺հ 3 ● ∁ڮయੜ(Noriki Takahashi) ○ Twitter: @norinoriki0 ○ GitHub: nrnrk ● גࣜձࣾBitkey ○ bitkey platform ͱ͍͏"ΧΪ"ͷϓϥοτϑΥʔϜͷ։ൃ ● Go Ͱ GKE ্Ͱಈ͘APIαʔόʔͷ։ൃͳͲΛ͍ͯ͠·͢ ● झຯ: ਺ֶɾ෺ཧֶ ○ zk-SNARKs ͷ਺ֶతͳଆ໘ΛטΈࡅ͘هࣄΛॻ͍ͨΓͯ͠·͢

Slide 4

Slide 4 text

1. ࣗݾ঺հ 4 ● ∁ڮయੜ(Noriki Takahashi) ○ Twitter: @norinoriki0 ○ GitHub: nrnrk ● גࣜձࣾBitkey ○ bitkey platform ͱ͍͏"ΧΪ"ͷϓϥοτϑΥʔϜͷ։ൃ ● Go Ͱ GKE ্Ͱಈ͘APIαʔόʔͷ։ൃͳͲΛ͍ͯ͠·͢ ● झຯ: ਺ֶɾ෺ཧֶ ○ zk-SNARKs ͷ਺ֶతͳଆ໘ΛטΈࡅ͘هࣄΛॻ͍ͨΓͯ͠·͢

Slide 5

Slide 5 text

1. ࣗݾ঺հ 5

Slide 6

Slide 6 text

ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ 6 6

Slide 7

Slide 7 text

7 7 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ

Slide 8

Slide 8 text

8 8 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ go.mod ϑΝΠϧ΋ϨϙδτϦʹҰͭ → Go Module ͕1ͭͷϞϊϨϙ

Slide 9

Slide 9 text

9 9 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ͍ΘΏΔϥΠϒϥϦ ؔ਺΍ߏ଄ମͳͲ͕ೖ͍ͬͯΔ ϞϊϨϙ಺ͷଞͷύοέʔδ͔Βར༻͞ΕΔ͜ ͱΛ૝ఆ

Slide 10

Slide 10 text

10 10 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ֤छαʔϏε HTTPαʔόʔ΍gRPCαʔόʔͳͲ ଞ͔Β import ͞Εͯ΄͘͠ͳ͍

Slide 11

Slide 11 text

11 11 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ࠔΔ͜ͱ ҙਤ͠ͳ͍ґଘ͕͋ͬͯ΋Ϗϧυ͕௨Δ ྫ: serviceB → serviceA

Slide 12

Slide 12 text

12 12 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏͸͍͔ͭ͋͘Δ

Slide 13

Slide 13 text

13 13 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶃ internal ύοέʔδΛར༻ serviceA,B,C ͦΕͧΕͷύοέʔδ಺Ͱެ։͠ ͨ͘ͳ͍ύοέʔδ͸ internal ͷதʹೖΕΔ

Slide 14

Slide 14 text

14 14 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶃ internal ύοέʔδΛར༻ serviceA,B,C ͦΕͧΕͷύοέʔδ಺Ͱެ։͠ ͨ͘ͳ͍ύοέʔδ͸ internal ͷதʹೖΕΔ → ڞ௨ར༻͢Δ΋ͷ͸ϥΠϒϥϦͱͯ͠੾Γ ग़͢ͷͰɺશ෦ internal ͷதʹೖΕΔ͜ͱʹ...

Slide 15

Slide 15 text

15 15 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶄ Go Module ͷ෼ׂ serviceA,B,C ҎԼʹ go.mod Λ͓͍ͯผͷϞ δϡʔϧͱΈͳ͢

Slide 16

Slide 16 text

16 16 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶄ Go Module ͷ෼ׂ serviceA,B,C ҎԼʹ go.mod Λ͓͍ͯผͷϞ δϡʔϧͱΈͳ͢ → ؅ཧ͕൥ࡶʹͳΔͷͰආ͚͍ͨ

Slide 17

Slide 17 text

17 17 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶃɺᶄ͸ඪ४తͳํ๏͕ͩɺզʑʹ͸ ϑΟοτ͠ͳ͍...

Slide 18

Slide 18 text

18 18 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶅ linter Ͱ੍ޚ ύοέʔδؒͷґଘΛνΣοΫͯ͠CIͳͲͰ੍ ޚͰ͖ΔΑ͏ʹ͢Δ

Slide 19

Slide 19 text

19 19 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ ● Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶅ linter Ͱ੍ޚ ύοέʔδؒͷґଘΛνΣοΫͯ͠CIͳͲͰ੍ ޚͰ͖ΔΑ͏ʹ͢Δ → ͪΐͬͱअಓͬΆ͍͕ɺࠓճ͸͜ΕΛࢼ͢

Slide 20

Slide 20 text

ґଘੑΛνΣοΫ͢ΔΑ͏ͳ linter Λ୳ͦ͏ 20 20 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 21

Slide 21 text

͏ʔΜɺɺɺͳ͍ 21 21 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 22

Slide 22 text

ࣗ࡞ linter Ͱ͍͔͘... 22 22 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 23

Slide 23 text

Ͱ΋੩తղੳ͔ɺ ͳΜ͔େมͦ͏ͩͳ 23 23 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 24

Slide 24 text

ͱࢥͬͪΌ͍·ͨ͠ 24 24 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 25

Slide 25 text

͕ɺ͔͠͠ 25 25 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 26

Slide 26 text

࣮ࡍʹ΍ͬͯΈΔͱ݁ߏ؆୯ʂ 26 26 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 27

Slide 27 text

skeleton (਽ܗੜ੒πʔϧ)΍ ४ެࣜͷ analysis ύοέʔδͷ ͓͔͛Ͱ؆୯ʹαΫοͱ࡞Εͨ 27 27 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ

Slide 28

Slide 28 text

਽ܗੜ੒πʔϧ: skeleton 28 28

Slide 29

Slide 29 text

● skeleton Goͷ੩తղੳπʔϧͷͨΊͷ਽ܗΛੜ੒ͯ͘͠ΕΔπʔϧ ԼهίϚϯυͰΠϯετʔϧͰ͖·͢ go install github.com/gostaticanalysis/skeleton/v2@latest 3. ਽ܗੜ੒πʔϧ: skeleton 29

Slide 30

Slide 30 text

● skeleton 30 3. ਽ܗੜ੒πʔϧ: skeleton

Slide 31

Slide 31 text

● skeleton 31 module ໊Λࢦఆͯ͠਽ܗ(εέϧτϯ) Λੜ੒ 3. ਽ܗੜ੒πʔϧ: skeleton

Slide 32

Slide 32 text

● skeleton 32 ίϚϯυ࣮ߦ༻ͷϩδοΫ ͓ܾ·ΓͷϩδοΫ͕͋Δ 3. ਽ܗੜ੒πʔϧ: skeleton

Slide 33

Slide 33 text

● skeleton 33 ղੳ༻ͷϩδοΫΛఆٛ ࠷௿ݶ͜͜ʹϩδοΫΛॻ͚ͩ͘Ͱ OK 3. ਽ܗੜ੒πʔϧ: skeleton

Slide 34

Slide 34 text

● skeleton 34 ୯ମςετ 3. ਽ܗੜ੒πʔϧ: skeleton

Slide 35

Slide 35 text

● skeleton 35 ୯ମςετ༻ͷσʔλ ੩తղੳͳͷͰ ςετ༻σʔλ = ιʔείʔυ 3. ਽ܗੜ੒πʔϧ: skeleton

Slide 36

Slide 36 text

੩తղੳ༻ύοέʔδ: analysis 36 36

Slide 37

Slide 37 text

● analysis ύοέʔδ ○ ੩తղੳ༻ͷ"४ެࣜ"ύοέʔδ (golang.org/x/tools/go/analysis) ■ → ੩తղੳʹ͓͚ΔϝΠϯͷϩδοΫ͚ͩʹूதͰ͖Δ 4. ੩తղੳ༻ύοέʔδ: analysis 37

Slide 38

Slide 38 text

● analysis ύοέʔδ ○ ੩తղੳ༻ͷ"४ެࣜ"ύοέʔδ (golang.org/x/tools/go/analysis) ■ → ੩తղੳʹ͓͚ΔϝΠϯͷϩδοΫ͚ͩʹूதͰ͖Δ ○ ಛ௃ ■ Analyzer ߏ଄ମͰ੩తղੳͷ݁Ռͷ࠶ར༻͕؆୯ʹ 4. ੩తղੳ༻ύοέʔδ: analysis 38

Slide 39

Slide 39 text

● analysis ύοέʔδ ○ ੩తղੳ༻ͷ"४ެࣜ"ύοέʔδ (golang.org/x/tools/go/analysis) ■ → ੩తղੳʹ͓͚ΔϝΠϯͷϩδοΫ͚ͩʹूதͰ͖Δ ○ ಛ௃ ■ Analyzer ߏ଄ମͰ੩తղੳͷ݁Ռͷ࠶ར༻͕؆୯ʹ ○ ઌఔͷ skeleton Ͱੜ੒͞ΕͨίʔυͰ࢖ΘΕ͍ͯΔ 4. ੩తղੳ༻ύοέʔδ: analysis 39

Slide 40

Slide 40 text

● Analyzer ߏ଄ମ(࠶ར༻ͳ͠ͷ࠷΋γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 40 mylinter.go

Slide 41

Slide 41 text

● Analyzer ߏ଄ମ(࠶ར༻ͳ͠ͷ࠷΋γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 41 analyzer ͷ໊শ (≒ linter ͷ໊শ) mylinter.go

Slide 42

Slide 42 text

● Analyzer ߏ଄ମ(࠶ར༻ͳ͠ͷ࠷΋γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 42 υΩϡϝϯτ analyzer ʹ͍ͭͯͷ આ໌ mylinter.go

Slide 43

Slide 43 text

● Analyzer ߏ଄ମ(࠶ར༻ͳ͠ͷ࠷΋γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 43 ղੳ༻ϩδοΫ → ࠷௿ݶɺ͜͜ʹϩ δοΫॻ͚ͩ͘Ͱ OK mylinter.go

Slide 44

Slide 44 text

● Analyzer ߏ଄ମ ͷ࠶ར༻ ● Analyzer ߏ଄ମΛఆٛ͢Δࡍʹɺଞͷ Analyzer Λར༻͢Δ͜ͱ͕Ͱ͖Δ 4. ੩తղੳ༻ύοέʔδ: analysis 44

Slide 45

Slide 45 text

● Analyzer ߏ଄ମ ͷ࠶ར༻ ● Analyzer ߏ଄ମΛఆٛ͢Δࡍʹɺଞͷ Analyzer Λར༻͢Δ͜ͱ͕Ͱ͖Δ ● ྫ: golang.org/x/tools/go/analysis/passes/inspect.Analyzer Λ༻͍ͯϊʔ υͷϑΟϧλϦϯά 4. ੩తղੳ༻ύοέʔδ: analysis 45

Slide 46

Slide 46 text

● Analyzer ߏ଄ମ ͷ࠶ར༻ ● Analyzer ߏ଄ମΛఆٛ͢Δࡍʹɺଞͷ Analyzer Λར༻͢Δ͜ͱ͕Ͱ͖Δ ● ྫ: golang.org/x/tools/go/analysis/passes/inspect.Analyzer Λ༻͍ͯϊʔυ ͷϑΟϧλϦϯά 4. ੩తղੳ༻ύοέʔδ: analysis 46 Analyzer ͷ࠶ར༻ͷ؆୯ͳྫͱͯ͠ɺ ࣝผࢠ͕ "gopher" ͱͳ͍ͬͯΔ΋ͷΛݟ͚ͭΔ࣮૷ྫΛݟͯΈΔ → ࣍ͷεϥΠυ ※ skeleton ͔Βੜ੒͞ΕΔαϯϓϧ

Slide 47

Slide 47 text

4. ੩తղੳ༻ύοέʔδ: analysis 47

Slide 48

Slide 48 text

4. ੩తղੳ༻ύοέʔδ: analysis 48 mylinter.go

Slide 49

Slide 49 text

4. ੩తղੳ༻ύοέʔδ: analysis 49 ࠶ར༻͢Δ Analyzer Λఆٛ ͜͜Ͱ͸ɺAST ݕࠪ༻ ͷ Analyzer Λར༻ golang.org/x/tools/go/ analysis/passes/ inspect mylinter.go

Slide 50

Slide 50 text

4. ੩తղੳ༻ύοέʔδ: analysis 50 run ͷதͰ inspect.Analyzer ͷग़ ྗ͢Δ݁ՌΛར༻ mylinter.go

Slide 51

Slide 51 text

4. ੩తղੳ༻ύοέʔδ: analysis 51 ast.Ident (Identifier = ࣝผࢠ) ͷΈʹߜΔͨ ΊͷϑΟϧλ mylinter.go

Slide 52

Slide 52 text

4. ੩తղੳ༻ύοέʔδ: analysis 52 inspect Λར༻ͯ͠ ast.Ident ͷΈʹߜͬͯ ॲཧ͢Δ ଞͷ AST ͷϊʔυ͕ དྷͨͱ͖ͷॲཧΛॻ͔ ͳͯ͘΋ྑ͍ʂ mylinter.go

Slide 53

Slide 53 text

4. ੩తղੳ༻ύοέʔδ: analysis 53 ಠࣗͷϩδοΫ͸͜͜ ͚ͩ analysis ύοέʔδΛ ࢖͏͜ͱͰ͜͜ʹ͚ͩ ूத͢Δ͜ͱ͕Ͱ͖Δ mylinter.go

Slide 54

Slide 54 text

● [༨ஊ] inspect Analyzer ͷఆٛ 4. ੩తղੳ༻ύοέʔδ: analysis 54

Slide 55

Slide 55 text

● [༨ஊ] inspect Analyzer ͷఆٛ 4. ੩తղੳ༻ύοέʔδ: analysis 55 ͜͜Ͱ࠶ར༻͢Δ݁Ռͷ ܕΛఆٛ

Slide 56

Slide 56 text

ύοέʔδґଘ੍ޚπʔϧ࣮૷ 56 56

Slide 57

Slide 57 text

● ύοέʔδґଘ੍ޚπʔϧ(banimport)࣮૷ ○ ࣮ݱ͍ͨ͜͠ͱ ■ ύοέʔδؒͷґଘΛ੍ޚ͍ͨ͠ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 57

Slide 58

Slide 58 text

● ύοέʔδґଘ੍ޚπʔϧ(banimport)࣮૷ ○ ࣮ݱ͍ͨ͜͠ͱ ■ ύοέʔδؒͷґଘΛ੍ޚ͍ͨ͠ ○ ࢓༷ ■ ېࢭ͢Δґଘ͕͋ͬͨΒՕॴΛಛఆͯ͠ΤϥʔΛฦ͢ ■ ઃఆϑΝΠϧ (.banimport.json) ● ېࢭ͢Δґଘͷjsonఆٛ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 58

Slide 59

Slide 59 text

● ᶃ skeleton Ͱ਽ܗ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 59

Slide 60

Slide 60 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 60

Slide 61

Slide 61 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 61 ςετσʔλ࡞੒ → ࠓճ͸ෳ਺ͷύοέʔδͷґଘؔ܎ ͷςετ͕͍ͨ͠ͷͰߏ੒Λগ͠มߋ

Slide 62

Slide 62 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 62 ಺෦ʹෳ਺ͷύοέʔδ͕͋Δ͜ͷ ·ͱ·ΓΛҰͭͷσʔληοτͱ͢ Δ

Slide 63

Slide 63 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 63 ͜Ε͸ svca, svcb, svcc ͔Βར༻͞ ΕͯOK

Slide 64

Slide 64 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 64 ͜͜ͷؒͰ͸ґଘΛ࣋ͨͳ͍Α͏ͳ ϧʔϧʹ͢Δ

Slide 65

Slide 65 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 65 testdata/src/a/srcb/ main.go testdata/src/a/srcc/main.go

Slide 66

Slide 66 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 66 svcb → svcc ʹґଘΛ΋͓ͨͤͯ͘ → ͜Ε͸Τϥʔͱͯ͠ݕग़͢Δ testdata/src/a/srcb/ main.go testdata/src/a/srcc/main.go

Slide 67

Slide 67 text

● ᶄ ςετ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 67 ίϝϯτͰϝοηʔδͷظ଴஋Λهࡌ // want <͜͜ʹهࡌ> ← analysistest ύοέʔδ͕ղऍ testdata/src/a/srcb/ main.go testdata/src/a/srcc/main.go

Slide 68

Slide 68 text

● ᶄ ςετ࡞੒: ઃఆϑΝΠϧ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 68 ઃఆϑΝΠϧΛ࡞੒ Ͳͷύοέʔδ͔ΒͲͷ ύοέʔδʹґଘΛ࣋ͨͳ ͍Α͏ʹ͢Δ͔Λઃఆ .banimport.json

Slide 69

Slide 69 text

● ᶄ ςετ࡞੒: ઃఆϑΝΠϧ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 69 svca ͔Β svcb, sbcc ʹґଘ Λ࣋ͨͳ͍Α͏ʹ͢Δ .banimport.json

Slide 70

Slide 70 text

● ᶄ ςετ࡞੒: ઃఆϑΝΠϧ࡞੒ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 70 svca, svcb, svcc ͸૬ޓʹґ ଘΛ࣋ͬͯ͸͍͚ͳ͍ .banimport.json

Slide 71

Slide 71 text

● ᶄ ςετ࡞੒: ςετͷ࣮ߦ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 71 ςετͷ࣮ߦ

Slide 72

Slide 72 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 72 banimport_test.g o

Slide 73

Slide 73 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 73 ςετͷσʔληοτΛϧʔϓ (b, c ͷςετσʔλ΋௥Ճ) banimport_test.g o

Slide 74

Slide 74 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 74 analysistest ͷσϑΥϧτͷ testadata ύε banimport_test.g o

Slide 75

Slide 75 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 75 import ͷґଘېࢭͷઃఆϑΝΠϧͷಡΈࠐΈ banimport_test.g o

Slide 76

Slide 76 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 76 import ͷґଘېࢭͷઃఆΛϑϥάͱͯ͠౉͢(࣍ͷᶅ࣮૷ Ͱ঺հ) banimport_test.g o

Slide 77

Slide 77 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 77 ςετσʔλΛࢦఆ࣮ͯ͠ߦ banimport_test.g o

Slide 78

Slide 78 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 78 ςετΛߦ͏ Analyzer Λࢦఆ banimport_test.g o

Slide 79

Slide 79 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 79 ղੳ͢Δର৅ͷύοέʔδΛࢦఆ banimport_test.g o

Slide 80

Slide 80 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 80 testdata ͷதͰظ଴஋(want)Λॻ͘ͷͰ͜͜ͷϩδοΫ͸εοΩϦʂ banimport_test.g o

Slide 81

Slide 81 text

● ᶅ ࣮૷ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 81 ϝΠϯͱͳΔϩδοΫΛॻ͘

Slide 82

Slide 82 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 82 banimport.go

Slide 83

Slide 83 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 83 Analyzer ͷఆٛ import ͔͠ݟͳ͍ͷͰ ґଘ΋ͳ͠ banimport.go

Slide 84

Slide 84 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 84 ϑϥάҾ਺ͷఆٛ flags ύοέʔδͱಉ౳ͷ ܗͰఆٛՄೳ banimport.go

Slide 85

Slide 85 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 85 run ؔ਺ ϝΠϯͷॲཧΛߦ͏ؔ਺ → ࣍ͷεϥΠυ΁ banimport.go

Slide 86

Slide 86 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 86 banimport.go

Slide 87

Slide 87 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 87 ઃఆ jsonͷύʔε banimport.go

Slide 88

Slide 88 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 88 ֤ϑΝΠϧͷ import ఆٛͷΈॲ ཧ͢Δ banimport.go

Slide 89

Slide 89 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 89 import ͷύεΛऔಘ ※ จࣈྻϦςϥϧ͕ Value ʹೖ͍ͬͯΔͷͰ Unquote ͕ඞཁ banimport.go

Slide 90

Slide 90 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 90 ېࢭ͢Δґଘ͕ݟ ͔ͭͬͨ৔߹ɺ ϝοηʔδΛग़͢ banimport.go

Slide 91

Slide 91 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 91

Slide 92

Slide 92 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 92

Slide 93

Slide 93 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 93

Slide 94

Slide 94 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 94

Slide 95

Slide 95 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 95

Slide 96

Slide 96 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 96

Slide 97

Slide 97 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 97

Slide 98

Slide 98 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 98 ग़ྗ݁Ռ

Slide 99

Slide 99 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 99 ग़ྗ݁Ռ

Slide 100

Slide 100 text

● ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ 100 ग़ྗ݁Ռ testdata/src/a/srcb/ main.go

Slide 101

Slide 101 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ ϞϊϨϙͰ΋ύοέʔδґଘͷ੍ޚ͕ Ͱ͖ΔΑ͏ʹͳͬͨʂʂ

Slide 102

Slide 102 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ skeleton Λ࢖͑͹αΫοͱ࡞ΕΔʂ

Slide 103

Slide 103 text

5. ύοέʔδґଘ੍ޚπʔϧ࣮૷ ׬੒඼͸ͪ͜Β https://github.com/nrnrk/banimport

Slide 104

Slide 104 text

·ͱΊ 104 104

Slide 105

Slide 105 text

● ·ͱΊ ○ skeleton Λ࢖ͬͯαΫοͱ੩తղੳπʔϧ͕࡞ΕΔʂ ○ ϞϊϨϙͳͲͰύοέʔδؒͷґଘΛ੍ޚ͍ͨ͠৔߹ ■ ͞Βʹɺinternal ύοέʔδͷར༻΍Ϟδϡʔϧͷ෼ׂ͕ϑΟοτ͠ͳ͍৔߹ ■ → banimport Λ࢖ͬͯύοέʔδؒͷґଘ੍ޚΛࢼ͢Ձ஋͋Γʂ ■ CI ͳͲʹ૊ΈࠐΉͱޡͬͨ import ͕๷͛Δ ○ ͦͷଞ ■ skeleton ͷ೔ຊޠ README ■ Go ͷ AST ͷೖ໳తͳ಺༰ʹ͍ͭͯͷաڈͷൃද (એ఻) 105 6. ·ͱΊ