Slide 1

Slide 1 text

GoͰܰྔϚʔΫΞοϓݴޠ ͷύʔαʔΛॻ͘ id:aereal

Slide 2

Slide 2 text

ܰྔϚʔΫΞοϓݴޠͱ͸ • ҎԼ LML = Lightweight Markup Language • HTML΍XMLͱϓϨʔϯςΩετͷதؒ • Markdown, Textile, ͸ͯͳه๏, etc.

Slide 3

Slide 3 text

ܰྔϚʔΫΞοϓݴޠͱ͸ • ҎԼ LML = Lightweight Markup Language • HTML΍XMLͱϓϨʔϯςΩετͷதؒ • Markdown, Textile, ͸ͯͳه๏, etc.

Slide 4

Slide 4 text

GoͰ͸ͯͳه๏ͷ ύʔαʔΛॻ͘ id:aereal

Slide 5

Slide 5 text

ࣗݾ঺հ • id:aereal • Twitter: aereal • GitHub: aereal • גࣜձࣾ͸ͯͳ
 ΞϓϦέʔγϣϯΤϯδχΞ

Slide 6

Slide 6 text

!͓͜ͱΘΓ! • ࠓճ঺հ͢Δ͸ͯͳه๏ύʔαʔ͸
 ϓϥΠϕʔτϫʔΫͰ͢ • ͸ͯͳͷαʔϏεʹ࠾༻͞ΕΔ͔ͳͲ͸
 ͢΂ͯະఆͰ͢

Slide 7

Slide 7 text

ࢀߟ৘ใ • ͜ͷࢿྉͰ঺հ͢Δ৘ใ͸͢΂ͯ 2017gokyoto ͱ ͍͏λάΛ͚ͭͯϒοΫϚʔΫ͍ͯ͠·͢ • http://b.hatena.ne.jp/aereal/2017gokyoto/

Slide 8

Slide 8 text

͸ͯͳه๏ͱ͸ • ͸ͯͳ͕ఏڙ͢ΔαʔϏεͷҰ෦Ͱ࢖͑ΔLML • ͸ͯͳϒϩάɺ͸ͯͳμΠΞϦʔ • org-modeͱͪΐͬͱࣅ͍ͯΔ

Slide 9

Slide 9 text

͸ͯͳه๏ͷྫ * ݟग़͠1 ** ݟग़͠2 - Ruby - Perl - Go + ى + ঝ + స + ݁

Slide 10

Slide 10 text

ͳͥύʔαʔΛॻ͘? • طʹಈ͍͍ͯΔ΋ͷʹखΛՃ͑ΔͷͰ͸μϝ? • ͳͥ͸ͯͳه๏? • ͳͥGoͰ?

Slide 11

Slide 11 text

Ϟνϕʔγϣϯ • طଘͷ࣮૷ʹखΛՃ͑Δͷ͸Ή͔͍ͣ͠ • ͸ͯͳه๏Λύʔε͍ͨ͠χʔζ͸͋Δ! • Go͕ॻ͖͔ͨͬͨ

Slide 12

Slide 12 text

طଘͷ࣮૷ʹखΛՃ͑Δͷ͸ Ή͔͍ͣ͠ • ܗࣜతͳఆ͕ٛͳ͍ = ಈ͘ίʔυ͕࢓༷ • ਖ਼نදݱ

Slide 13

Slide 13 text

͸ͯͳه๏Λύʔε͍ͨ͠ χʔζ͸͋Δ! • ͸ͯͳάϧʔϓͰීஈ͔Βॻ͍͍ͯΔ • ͸ͯͳϒϩάͰ೔هΛॻ͘ͷ͕झຯ • →͸ͯͳه๏ʹ೔ৗతʹ৮Ε͍ͯΔ • Markdown΁ͷม׵ (...)

Slide 14

Slide 14 text

Go͕ॻ͖͔ͨͬͨ • ීஈ͸Perl΍JavaScriptɺͨ·ʹScala • ۀ຿ͱҟͳΔίϯςΩετͰίʔυΛॻ͖͔ͨͬͨ

Slide 15

Slide 15 text

ͪΐ͏Ͳ͍͍໨ඪ • Ͱ͖Δ͜ͱɺ΍Γ͍ͨ͜ͱɺؔ৺ͷ͋Δ͜ͱ͕
 ͍͍͔Μ͡ʹόϥϯε͞Ε͍ͯΔ • WebͱςΩετϓϩηογϯά • খ໨ඪΛੵΈॏͶ͍͚ͯΔ • ʮࠓ೔͸͜ͷه๏Λ௥Ճ͠Α͏ʯ

Slide 16

Slide 16 text

108͋Δ͸ͯͳه๏ύʔαʔ • ͸ͯͳμΠΞϦʔ • ͸ͯͳάϧʔϓ • Text-Hatena (CPAN) • Text-Xatena • chris4403/WikiTextConverter • ...

Slide 17

Slide 17 text

108͋Δ͸ͯͳه๏ύʔαʔ • ͦΕͧΕඍົʹ࢓༷͕ҟͳΔ • ৽͘͠࡞ΒΕͨ΋ͷ΄ͲεʔύʔηοτͷఆٛΛ
 ࢼΈΔ܏޲͕͋Δ

Slide 18

Slide 18 text

ܗࣜతͳఆٛΛ༩͍͑ͨ • ࣮૷ͱఆٛΛૄʹ͍ͨ͠ • ఆ͚ٛͩΛࢀর͍ͨ͠ • ͤΊͯCommonMark͘Β͍ͷ΋ͷ͸…… • (ͱ͸͍࣮͑૷ͱϦϯΫͤ͞ΒΕΔ΄͏͕Α͍)

Slide 19

Slide 19 text

aereal/go-text-hatena https://github.com/aereal/go-text-hatena

Slide 20

Slide 20 text

࣮૷ͨ͠ه๏ • ݟग़͠ • Ϧετ • Ҿ༻ • HTTPه๏ (Ұ෦)

Slide 21

Slide 21 text

໨ࢦ͢ͱ͜Ζ • ϙʔλϒϧͰ͋Δ͜ͱ • ݴޠʹґΒͣར༻Ͱ͖Δ • ར༻ऀ͕೚ҙͷHTMLม׵ϧʔϧΛద༻Ͱ͖Δ • ࣮૷ͱఆٛΛૄʹ • ఆٛΛ੩తʹࢀরͰ͖Δ • ࣮૷ݴޠ (Go) ͷ஌͕ࣝͳͯ͘΋งғؾ͸௫ΊΔ

Slide 22

Slide 22 text

࣮૷ • GoͰೖग़ྗΛΠϯλʔϑΣʔεͱ͢ΔόΠφϦ • → ݴޠʹґΒͣར༻Ͱ͖Δ • ASTΛJSONͰग़ྗ͢Δ͚ͩ • → ར༻ऀ͕೚ҙͷHTMLม׵ϧʔϧΛద༻ (࣮૷) Ͱ͖Δ

Slide 23

Slide 23 text

࣮૷ • goyaccΛ࢖͍YACCͰจ๏ఆٛ • → ఆٛΛ੩తʹࢀরͰ͖Δ (parser.go.y) • ࣮૷ݴޠ (Go) ͷ஌͕ࣝͳͯ͘΋งғؾ͸௫ΊΔ

Slide 24

Slide 24 text

HTML΁ͷม׵ • αʔϏεʹΑͬͯͲΕ͘Β͍HTMLͷೖྗΛ
 ڐ༰͢Δ͔ͷํ਑͕ҟͳΔ • ͸ͯͳϒϩά͸ࣗ༝͕ͩɺ͸ͯͳμΠΞϦʔ͸
 ϗϫΠτϦετܗࣜ • ηΩϡϦςΟ্ͷࣄ৘

Slide 25

Slide 25 text

ม׵σϞ • aereal/sketch-hatena-notation-api

Slide 26

Slide 26 text

GoͰύʔαʔΛॻ͘

Slide 27

Slide 27 text

࢖ͬͨπʔϧ • Go • goyacc • text/scanner

Slide 28

Slide 28 text

goyacc • yaccͷGo൛ • ࠷ۙ go tool ͔Β֎Εͨ • go get golang.org/x/tools/cmd/goyacc

Slide 29

Slide 29 text

yacc • ύʔαʔδΣωϨʔλʔ • BNF • ఆٛʹରͯ͠ίʔϧόοΫΛॻ͍͍ͯ͘ • ؐݩͱΞΫγϣϯͱݺ͹ΕΔ • ଎शyacc͕͓͢͢Ί • ࣮૷ྫͱͯ͠ mattn/streeem ΋ࢀߟʹͳΔ

Slide 30

Slide 30 text

yaccͷ͍͍ͱ͜Ζ • BNFʹΑΔఆٛͱɺؐݩ͢Δίʔυ͕෼཭Ͱ͖Δ • ݴޠ಺DSLΛ࢖͏ύʔαʔίϯϏωʔλʔΑΓ
 ଞͷਓʹݺΜͰ΋Β͍΍͍͢ؾ͕͢Δ

Slide 31

Slide 31 text

yaccͷඍົͳͱ͜Ζ • *.go.y ͰΤσΟλͷࢧԉ͕ड͚ΒΕͳ͍ • ͏·͍͜ͱઃఆͨ͠ΒͰ͖ͦ͏Ͱ͸͋Δ • ࣈ۟ղੳ͸ࣗ෼ͰؤுΔඞཁ͕͋Δ • GoͰ͸ text/scanner ͱ͍͏ඪ४ϥΠϒϥϦ͕
 ͋ΔͷͰָͰ͖Δ

Slide 32

Slide 32 text

ίʔυΛಡΜͰΈΔ • lex.go • parser.go.y • parser_test.go

Slide 33

Slide 33 text

·ͱΊ

Slide 34

Slide 34 text

·ͱΊ • ͸ͯͳه๏ύʔαʔΛGoͰॻ͍ͨ • Goʹ͸goyacc΍text/scannerͳͲ
 ߏจղੳ΍ࣈ۟ղੳͷͨΊͷπʔϧ͕ἧ͍ͬͯΔ

Slide 35

Slide 35 text

ࢀߟ৘ใ • ͜ͷࢿྉͰ঺հ͢Δ৘ใ͸͢΂ͯ 2017gokyoto ͱ ͍͏λάΛ͚ͭͯϒοΫϚʔΫ͍ͯ͠·͢ • http://b.hatena.ne.jp/aereal/2017gokyoto/