Slide 1

Slide 1 text

monochromegane/go-code-embedding ࡾ୐༔հ / Pepabo R&D Institute, GMO Pepabo, Inc. 2021.06.10 Fukuoka.go#17 go:embedͰ Explainable BinaryΛ࡞Δ

Slide 2

Slide 2 text

1SJODJQBMFOHJOFFS :VTVLF.*:",&!NPOPDISPNFHBOF 1FQBCP3%*OTUJUVUF (.01FQBCP *OD IUUQTCMPHNPOPDISPNFHBOFDPN

Slide 3

Slide 3 text

1. എܠ: Binaryͷઆ໌ੑ 2. ՝୊: Explainable Binaryʹ޲͚ͨैདྷͷऔΓ૊Έ 3. ఏҊ: go:embedΛ༻͍ͨExplainable Binary 4. ·ͱΊ 3 ໨࣍

Slide 4

Slide 4 text

1. എܠ Binaryͷઆ໌ੑ

Slide 5

Slide 5 text

• Goݴޠ࣮૷ͷϓϩμΫτ͸όΠφϦܗࣜʹΑΔ഑෍͕Մೳ • όΠφϦ୯ମ͔Β͸ʢ࢓༷ʹਫ਼௨্ͨ͠Ͱղੳ͠ͳ͚Ε͹ʣਖ਼֬ͳڍಈ͸೺Ѳ Ͱ͖ͳ͍ • go:embedͷಋೖʹΑͬͯΞηοτ΋όΠφϦʹؚ·ΕΔΑ͏ʹͳΔ 5 ͸͡Ίʹ • ར༻͢ΔϓϩμΫτͷόΠφϦͷڍಈΛ೺Ѳ͢Δ͜ͱ͕ॏཁͰ͋Δɻ • → ຊใࠂͰ͸͜ͷ఺ΛɺόΠφϦͷઆ໌ੑʢExplainabilityʣͱͯ͠࿦͡Δ

Slide 6

Slide 6 text

2. ՝୊ Explainable Binaryʹ޲͚ͨैདྷͷऔ૊

Slide 7

Slide 7 text

• όΠφϦͱιʔείʔυΛඥ෇͚Δ͜ͱͰઆ໌ੑΛ֬อ͢Δ • Կ΋ࡦΛߨ͡ͳ͚Ε͹ɺόΠφϦ͸ιʔείʔυͱඥ෇͔ͳ͍ • ιʔείʔυ΋ߋ৽͞ΕΔ • ϓϩμΫτͰಠࣗʹ࠾൪ͨ͠όʔδϣϯ൪߸Λදࣔ͢Δ • mybinary -v • VCSͷϦϏδϣϯ൪߸ΛϏϧυ࣌ʹຒΊࠐΉ • go build —ldflag “-X …” 7 ैདྷͷऔ૊ $ myapp -v $ go build --ldflag “-X …”

Slide 8

Slide 8 text

• Ϗϧυϓϩηεͱͷဃ཭ʢ௥Ճ͞ΕͨॴఆϏϧυϓϩηεͷεΩοϓʣ • όʔδϣϯΛߋ৽͢ΔɺϦϏδϣϯΛຒΊࠐΉϓϩηε͸εΩοϓՄೳͳͨ ΊɺಉҰͷ஋Ͱ͋ͬͯ΋ಈ࡞ͷҟͳΔόΠφϦΛ࡞Εͯ͠·͏ • ϦϙδτϦ΍ϦϏδϣϯͷফࣦ • ϦϙδτϦ΍ಛఆϦϏδϣϯ͕Ӭଓతʹଘࡏ͢Δ͜ͱ͸อূͰ͖ͳ͍ • ྫ: mimemagic (Your bundle is locked to mimemagic (0.3.5), but that version could not be found) 8 ैདྷͷऔ૊ͷݒ೦఺

Slide 9

Slide 9 text

3. ఏҊ go:embedΛ༻͍ͨExplainable Binary

Slide 10

Slide 10 text

• ॴఆͷ௥ՃϏϧυϓϩηεΛεΩοϓͯ͠΋ιʔείʔυͱဃ཭͠ͳ͍ • → ɹ • ϦϙδτϦ΍ಛఆϦϏδϣϯ͕ফࣦͯ͠΋ιʔείʔυΛࢀরͰ͖Δ • → 10 ݒ೦఺Λղফͨ͠όΠφϦ

Slide 11

Slide 11 text

• ॴఆͷ௥ՃϏϧυϓϩηεΛεΩοϓͯ͠΋ιʔείʔυͱဃ཭͠ͳ͍ • → go build (without ldflag) ͚ͩͰඞ࣮ͣߦ͞ΕΔϓϩηε • ϦϙδτϦ΍ಛఆϦϏδϣϯ͕ফࣦͯ͠΋ιʔείʔυΛࢀরͰ͖Δ • → 11 ݒ೦఺Λղফͨ͠όΠφϦ

Slide 12

Slide 12 text

• ॴఆͷ௥ՃϏϧυϓϩηεΛεΩοϓͯ͠΋ιʔείʔυͱဃ཭͠ͳ͍ • → go build (without ldflag) ͚ͩͰඞ࣮ͣߦ͞ΕΔϓϩηε • ϦϙδτϦ΍ಛఆϦϏδϣϯ͕ফࣦͯ͠΋ιʔείʔυΛࢀরͰ͖Δ • → ιʔείʔυࣗମΛόΠφϦʹ಺แ͢Δ 12 ݒ೦఺Λղফͨ͠όΠφϦ

Slide 13

Slide 13 text

• ॴఆͷ௥ՃϏϧυϓϩηεΛεΩοϓͯ͠΋ιʔείʔυͱဃ཭͠ͳ͍ • → go build (without ldflag) ͚ͩͰඞ࣮ͣߦ͞ΕΔϓϩηε • ϦϙδτϦ΍ಛఆϦϏδϣϯ͕ফࣦͯ͠΋ιʔείʔυΛࢀরͰ͖Δ • → ιʔείʔυࣗମΛόΠφϦʹ಺แ͢Δ 13 ݒ೦఺Λղফͨ͠όΠφϦ • go:embedͰόΠφϦʹιʔείʔυΛࠝแ͢Δͱ͍͏ఏҊ

Slide 14

Slide 14 text

monochromegane/ go-code-embedding

Slide 15

Slide 15 text

• ιʔείʔυΛόΠφϦʹ૊ΈࠐΈɺӾཡ͢ΔͨΊͷδΣωϨʔλ • ίϚϯυҰൃͰࣗ࡞ͷϓϩμΫτʹҎԼͷΞΫηαΦϓγϣϯΛ௥Ճ • ιʔείʔυදࣔͷΦϓγϣϯ • ιʔείʔυҰཡͷΦϓγϣϯ • ιʔείʔυ෮ݩͷΦϓγϣϯ 15 ػೳ # myapp --help Usage of myapp: -list-code list code -restore-code restore code -restore-path string restore code to specified path (default ".") -show-code string show specified code Usage of myapp: -output-dir string Output directory (default ".") -pkg string Package name to use in the generated code. (default "main")

Slide 16

Slide 16 text

16 ࢖͍ํ

Slide 17

Slide 17 text

17 ࢖͍ํ

Slide 18

Slide 18 text

18 ࢓૊Έ Source code Generated code IUUQTJDPOTDPNMJDFOTF

Slide 19

Slide 19 text

19 ࢓૊Έ Source code Generated code 1. go:embed directive

Slide 20

Slide 20 text

20 ࢓૊Έ Source code Generated code 2. Option flags

Slide 21

Slide 21 text

21 ࢓૊Έ Source code Generated code 3. Method implementations

Slide 22

Slide 22 text

22 ࢓૊Έ Source code Generated code $ go build -o myapp Explainable binary -list-code list code -restore-code restore code -restore-path string restore code to specified path (default ".") -show-code string show specified code Source code

Slide 23

Slide 23 text

monochromegane/ go-embedding-accessor

Slide 24

Slide 24 text

• ΍Γ͔ͨͬͨ͜ͱ͸ɺ೚ҙͷ૊ΈࠐΈର৅ʹର͢ΔΞΫηαͷੜ੒ • ιʔείʔυͷ૊ΈࠐΈ͸ͦͷಛघܥͱߟ͑ͨ • → go-embedding-accessorͱ࣮ͯ͠૷ • ೚ҙͷgo:embedσΟϨΫςΟϒจࣈྻΛ౉ͯ͠ΞΫηαΛੜ੒͢Δ 24 ࣮૷ͷҰൠԽ

Slide 25

Slide 25 text

• ը૾ͳͲͷΞηοτΛόΠφϦʹ૊ΈࠐΜͩࡍʹɺόΠφϦ͔Βը૾Λ෮ݩ͢ ΔΑ͏ͳϢʔεέʔεʹରԠ • go:embedͷීٴʹ൐͍ɺΞηοτ΁ͷΞΫηα͸χʔζ͕૿͢ʢ͔΋ʣ 25 ࣮૷ͷҰൠԽ

Slide 26

Slide 26 text

͓·͚

Slide 27

Slide 27 text

• ιʔείʔυΛόΠφϦʹಉࠝ͢ΔΞΠσΟΞ͸ࣗ਎Ͱઌߦ࣮૷͍ͯͨ͠ • ʰ໺ྑόΠφϦʹͳͬͯ΋େৎ෉ɻGoͷόΠφϦʹιʔείʔυΛఴ෇͢ ΔπʔϧΛͭͬͨ͘ɻʱ(2015.8) (*1) • monochromegane/go-bincode (*2) • ઌߦ࣮૷͸go-bindataʹґଘ͍͕ͯͨ͠ɺඪ४ͷembedػೳʹஔ͖׵͑Δ͜ ͱ͕Ͱ͖ɺ࣮૷΋γϯϓϧʹͳͬͨɻ • go:embedͷීٴ͕ݟࠐ·ΕΔ͜ͱ͔ΒɺվΊͯఏҊʢωλ੾ΕͰ͸ͳ͍ʣ 27 ࣗ਎Ͱͷઌߦ࣮૷ IUUQTCMPHNPOPDISPNFHBOFDPNCMPHHPCJODPEF IUUQTHJUIVCDPNNPOPDISPNFHBOFHPCJODPEF

Slide 28

Slide 28 text

4. ·ͱΊ

Slide 29

Slide 29 text

• GoόΠφϦͷઆ໌ੑʹண໨͠ɺιʔείʔυͱͷඥ෇͚ͷ՝୊Λ੔ཧͨ͠ • ࠷௿ݶͷϏϧυϓϩηεͰ͋ͬͯ΋ιʔείʔυΛಉࠝՄೳͳπʔϧͱͯ͠ go-code-embeddingΛఏҊ • go:embed΁ͷΞΫηαͷχʔζΛଊ͑ͯɺgo-embedding-accessorΛ࣮૷ ͠ɺଟ༷ͳϢʔεέʔεʹॊೈʹରԠͨ͠ • ఏҊʹΑΓɺಉࠝͨ͠ιʔείʔυ΍ΞηοτΛදࣔɺ෮ݩ͢Δɺઆ໌Մೳੑ ͕͋ΔExplainable BinaryΛఏڙͰ͖Δ 29 ·ͱΊ ࡾGo

Slide 30

Slide 30 text

No content