Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Parsing case study in Go / Go Conference mini 2...
Search
Ken’ichiro Oyama
December 01, 2023
Technology
1.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Parsing case study in Go / Go Conference mini 2023 Winter IN KYOTO
https://kyotogo.connpass.com/event/285351/
Ken’ichiro Oyama
December 01, 2023
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
Introducing RFC9111 / YAPC::Fukuoka 2025
k1low
2
5.5k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
940
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
780
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
170
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
12
6.3k
Parsing HCL/CUE / Fukuoka.go #21
k1low
0
11k
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
450
Cleanup handling in Go / Go Conference 2024
k1low
7
4.1k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
18
12k
Other Decks in Technology
See All in Technology
Kiro Ambassador を目指す話
k_adachi_01
0
110
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
280
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
130
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
140
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
170
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
1
2.5k
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
160
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
270
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
110
不要なレビューをAIにまかせて AIコーディングの環境改善を加速した
shoota
1
230
Flow 不死:AI 時代 DevOps 的不變本質
cheng_wei_chen
2
330
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
5
1.1k
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
170
Designing for humans not robots
tammielis
254
26k
WCS-LA-2024
lcolladotor
0
650
How GitHub (no longer) Works
holman
316
150k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
Transcript
Parsing case study in Go খࢁ݈Ұ / GMO PEPABO inc.
2023.12.2 Go Conference mini 2023 Winter IN KYOTO 1
ࣗݾհ ٕज़෦ɹٕज़ج൫νʔϜ 2018 த్ೖࣾ খࢁ ݈Ұ Ken’ichiro Oyama গ࣮͠༻తͰখ͞ͳOSSΛॻ͘ͷ͕झຯɻ •
GitHub : k1LoW • Twitter : @k1LoW 2
GMOϖύϘʹ͍ͭͯ 3 https://pepabo.com
ΞδΣϯμ • ຊηογϣϯʹ͓͚Δύʔε • έʔεελσΟʢέʔεͱ࣮ͱֶͼʣ • ͓ΘΓʹ 4
5 ຊηογϣϯʹ͓͚Δύʔε
6 ຊηογϣϯʹ͓͚Δύʔε ύʔε • ຊηογϣϯʹ͓͚ΔύʔεͱʮจࣈྻόΠτྻ͔Βҙຯͷ͋ΔߏԽσʔλΛநग़͠׆༻ ͢Δ͜ͱʯΛࢦ͢ɻҰൠతͳʮύʔεʯͷఆٛΑΓগ͍͠ղऍɻ • จࣈྻόΠτྻ … string,
[]byte, io.Reader • ߏԽσʔλ … struct, map, slice, chan • ຊηογϣϯͰσγϦΞϥΠζσίʔυؚΉʢͳͷͰɺ͋·Γʮύʔεʯͷఆٛʹͩ͜ΘΒͳ͍ͰΒ͑Δͱ خ͍͠Ͱ͢🙏 ʣɻ
7 ຊηογϣϯʹ͓͚Δύʔε ύʔε • ύʔεΛʮࣈ۟ղੳʯͱʮߏจղੳʯʹ͚ͯߟ͑Δɻ • ࣈ۟ղੳ͚ͩΛ׆༻͢ΔͷύʔεʹؚΊΔɻ • ຊηογϣϯʹ͓͚Δʮࣈ۟ղੳʯͱʮߏจղੳʯҰൠΑΓগٛ͠ͷఆٛɻ •
ࣈ۟ղੳ … จࣈྻόΠτྻΛཁૉʢτʔΫϯʣͷྻʹղ͢Δ • ߏจղੳ … τʔΫϯྻΛҙຯΛөͨ͠ߏʹม͢Δ
έʔεελσΟ 8
9 README.mdͷ Ұ෦͚ͩࠩ͠ସ͑Δ
10 README.mdͷҰ෦͚ͩࠩ͠ସ͑Δ github.com/k1LoW/repin • README.mdͳͲɺෳߦʹΘͨΔจࣈྻͷҰ෦͚ͩΛࠩ͠ସ͑ΔͨΊͷπʔϧ/ϥΠϒϥϦ • ։࢝ΩʔϫʔυͱऴྃΩʔϫʔυΛࢦఆ͢ΔͱͦͷΩʔϫʔυؒͷจࣈྻΛࠩ͠ସ͑Δ • ྫ: ։࢝Ωʔϫʔυ
```console ɺऴྃΩʔϫʔυ ``` ʹͯ͠ίϚϯυͷϔϧϓͷग़ ྗΛ࠷৽ʹࠩ͠ସ͑ • ॲཧͷಛ • ͻͱ͔ͨ·ΓͷෳߦͷจࣈྻΛೖྗͱͯͦ͠ͷ్தͷจࣈྻΛࠩ͠ସ͑Δ • ෳߦΛ·ͱΊͯॲཧ͢Δඞཁ͕͋Δ • ܾ·ͬͨߏจͱ͍ͬͨͷͳ͍
11 README.mdͷҰ෦͚ͩࠩ͠ସ͑Δ ύʔεͷ࣮ • ࣈ۟ղੳΛbufio.ScannerͰ࣮ • ಠࣗbufio.SplitFuncΛॻ͘͜ͱͰΩʔϫʔυ֎ͱΩʔϫʔυؒͰׂ • ࣈ۟ղੳ݁ՌΛ Scan()
Ͱड͚औ͍ͬͯ͘ʢ []string ʣ • ॱ൪ʹΩʔϫʔυ֎ -> Ωʔϫʔυؒ -> Ωʔϫʔυ֎ -> … • ͋ͱΩʔϫʔυؒͷจࣈྻ͚ͩࠩ͠ସ͑ͭͭΈཱͯͯग़ྗ͢Δ͚ͩ
12 README.mdͷҰ෦͚ͩࠩ͠ସ͑Δ bufio.SplitFunc • bufio.Scanner.Split() Ͱઃఆ͢Δ͜ͱͰScan()ͷڍಈΛม͑Δ͜ͱ͕Ͱ͖Δ
13 ඪ४ग़ྗʹྲྀΕ͍ͯΔϩάΛ ύΠϓͰड͚औͬͯ৭͚͢Δ
14 ඪ४ग़ྗʹྲྀΕ͍ͯΔϩάΛύΠϓͰड͚औͬͯ৭͚͢Δ github.com/k1LoW/colr • ඪ४ೖྗʹྲྀΕΔϩάʹରͯ͠ࢦఆͨ͠จࣈྻʹϚονͨ͠Β͚ͦͩ͜৭͚Λ͢Δπʔϧ • ϩά ”Error” “status:500”
ͳͲΛڧௐ͢Δ͜ͱͰϩάΛΈ͘͢͢ΔͨΊͷͷ • tail -F /var/log/nginx/access.log | colr POST GET 404 500 search • ॲཧͷಛ • ೖྗऴ͕ෆ໌ͷετϦʔϜɻॱ࣍ॲཧ͍ͯ͘͠ඞཁ͕͋Δ • ୯ʹ৭͚ͳͷͰɺϩάͷߏจΛߟྀ͢Δඞཁͳ͍ɻ1ߦͮͭॲཧͯ͠ྑ͍ɻ
15 ඪ४ग़ྗʹྲྀΕ͍ͯΔϩάΛύΠϓͰड͚औͬͯ৭͚͢Δ ύʔεͷ࣮ • ࢦఆͨ͠จࣈྻ ( args ) ʹϚονͨ͠Β͚ͦͩ͜৭͚Λ͢Δ •
ೖྗos.Stdin ( io.Reader ) • ग़ྗ chan string • ࣈ۟ղੳ͍ͭͰʹ৭͚͢Δ
16 ඪ४ग़ྗʹྲྀΕ͍ͯΔϩάΛύΠϓͰड͚औͬͯ৭͚͢Δ ύʔεͷ࣮ʢHandle(context.Context, io.Reader) <-chan stringʣ • bufio.NewReader(os.Stdin) -> ReadString(‘\n’)Ͱߦ୯Ґʹׂ
• ߦ͝ͱʹ৭͚ ( Paint() ) • ෦࣮࣭strings.ReplaceAll • ৭͚݁ՌΛ chan stringʹྲྀ͢ • ʢ࣮ʣp.Handle()͕ඪ४ग़ྗΛड͚औͬ ͯྑ͍ • ʢ࣮ʣchan []byte Ͱྑ͍
17 VIEWςʔϒϧͰ༻͞Ε͍ͯΔ ςʔϒϧͷҰཡΛऔಘ͢Δ
18 VIEWςʔϒϧͰ༻͞Ε͍ͯΔςʔϒϧͷҰཡΛऔಘ͢Δ github.com/k1LoW/tbls • σʔλϕʔεͷεΩʔϚΛͱʹυΩϡϝϯτΛੜͯ͘͠ΕΔπʔϧ • VIEWςʔϒϧΛߏ͍ͯ͠ΔςʔϒϧͷҰཡΛυΩϡϝϯτʹදࣔ͢Δػೳ͕͋Δ • Ұ෦ͷσʔλϕʔεγεςϜͷΈରԠ •
ॲཧͷಛ • VIEWςʔϒϧͷDDLʢCREATE VIEW xxxx ASʣσʔλϕʔεγεςϜ͔ΒऔಘͰ͖Δ • ςʔϒϧҰཡ͕ཉ͍͚ͩ͠
19 VIEWςʔϒϧͰ༻͞Ε͍ͯΔςʔϒϧͷҰཡΛऔಘ͢Δ ύʔεͷ࣮ • ʮSQLΛSQLͱ͔ͯͬ͠͠Γʢࣈ۟/ߏจʣղੳ͢Δඞཁͳ͍ʯ • ࣈ۟ղੳΛbufio.ScannerͰ࣮ • ΫΥʔτΛؾʹ͠ͳ͕ΒτʔΫϯʹׂ͢Δ͚ͩ
20 VIEWςʔϒϧͰ༻͞Ε͍ͯΔςʔϒϧͷҰཡΛऔಘ͢Δ ςʔϒϧ໊ͷఆ • “FROM” ͔ “JOIN” ͷ࣍ͷτʔΫϯ͕ςʔϒϧ໊ ͱ͍͏ఆͰे •
ɺ“WITH” Ͱఆٛ͞ΕͨҰ࣌తͳςʔϒ ϧ໊͚ͩআ͘ • VIEWςʔϒϧͷDDLͷಛΛཧղ͓͚ͯ͠શ ͯΛτʔΫϯผ͢Δඞཁͳ͍
21 σʔλϕʔεʹྲྀΕΔ ύέοτΛղੳͯ͠ ߏԽΫΤϦϩάΛ࡞Δ
22 σʔλϕʔεʹྲྀΕΔύέοτΛղੳͯ͠ߏԽΫΤϦϩάΛ࡞Δ github.com/k1LoW/tcpdp • σʔλϕʔεʹྲྀΕΔύέοτΛղੳͯ͠σʔλϕʔεͷߏԽΫΤϦϩάΛ࡞͢Δπʔϧ • 3ύλʔϯʹରԠ 1. ΫϥΠΞϯτͱσʔλϕʔεͷؒʹTCPϓϩΩγαʔόͱͯ͠ىಈ 2.
libpcapΛͬͯtcpdumpͱಉ͡ΈͰύέοτΛΩϟϓνϟ͢Δ 3. tcpdump͕μϯϓͨ͠pcapϑΝΠϧΛղੳ͢Δ • ॲཧͷಛ • ෳͷΫϥΠΞϯτ͔Βͷଓ͕͋Δ • 1ͭͷTCPύέοτʹΫΤϦ͕ऩ·ΔͱݶΒͳ͍ • σʔλϕʔεϓϩτίϧҙຯͷ͋Δ௨৴ΫϥΠΞϯτ-αʔόؒͰԿճ͔ԟ෮͢Δ • 3ύλʔϯͷύέοτऔಘʹରԠ͢Δඞཁ͕͋Δ͕ύʔεॲཧڞ௨Խ͍ͨ͠
23 σʔλϕʔεʹྲྀΕΔύέοτΛղੳͯ͠ߏԽΫΤϦϩάΛ࡞Δ ύʔεͷ࣮ • TCPଓ͝ͱʹࣈ۟ղੳ͕ඞཁ • ࣍ͷTCPύέοτΛͭͨΊʹύέοτσʔλͷόοϑΝϦϯά͕ඞཁ • 3ύλʔϯʹରԠ͢ΔͨΊɺೖྗѻ͍͍͢ []byte
ʹͳΔ • ύέοτ͔Βҙຯͷ͋Δ୯ҐͰͷ []byte औಘͱσʔλϕʔεϓϩτίϧʹԊͬͨղੳ͕ಉ࣌ʹਐ ΉΠϝʔδ
24 σʔλϕʔεʹྲྀΕΔύέοτΛղੳͯ͠ߏԽΫΤϦϩάΛ࡞Δ ύέοτͷόοϑΝϦϯά • ύέοτ͔Βҙຯͷ͋Δ୯ҐͰͷ []byte औಘ • ҙຯͷ͋ΔαΠζ·ͰόοϑΝϦϯάͯ͠ ·ͱΊͯdumperʢσʔλϕʔεϓϩτίϧ
ղੳثʣʹ͢ • TCPଓͷ։࢝λΠϛϯάͰ key Λੜͯ͠ɺͦ ΕͧΕͰόοϑΝϦϯά
25 σʔλϕʔεʹྲྀΕΔύέοτΛղੳͯ͠ߏԽΫΤϦϩάΛ࡞Δ ύέοτͷղੳ • ߏจղੳͻͨ͢Β []byte Λσʔλϕʔεϓ ϩτίϧʹԊͬͯղੳ͍ͯ͘͠ͷΈ
26 ͜͜·Ͱͷֶͼ
27 ͜͜·Ͱͷֶͼ ࣈ۟ղੳέʔεʹΑͬͯࡶʹͰ͖Δ • ೖྗΛઌ಄͔ΒॱʹಡΈࠐΜͰ͍͘ͷ͕ϕʔγοΫͳख๏ • τʔΫϯʹׂ͢ΔͨΊʹઌಡΈͯ͠͡ΊͯτʔΫϯछผΛఆͰ͖Δ͜ͱ͕ଟ͍ • ઌಡΈʹٻΊΒΕΔཁ͕݅ෳࡶͰ͋Ε͋Δ΄Ͳࣈ۟ղੳͷ࣮͕͘͠ͳΔʢײʣ •
ҰํͰ • έʔεʹΑͬͯεϖʔε۠ΓͰτʔΫϯʹׂͰ͖ΔͳΒॳख strings.Split ͰࡁΉ߹ ͋Δ • έʔεʹΑͬͯશͯͷจࣈྻΛτʔΫϯʹ͢Δඞཁͳ͍ʢۭനվߦΛແࢹ͢Δͷͱ ಉ͡ʣ
28 ͜͜·Ͱͷֶͼ ࣈ۟ղੳʹଟஈฒߦͷબࢶ͕͋Δ • ٻΊΔτʔΫϯྻΛಘΔ·ͰͷղੳॲཧΛଟஈʹ͢Δͱ࣮͍͢͠߹͕͋Δ • ߦʹΑͬͯτʔΫϯׂ͕͞ΕΔ͜ͱ͕อূ͞ΕΔ߹ʮ·ͣߦ͝ͱʯʮͦͯ͠ߦ୯Ґ Ͱղੳʯʹଟஈʹ͢ΔͳͲ • ฒߦͯ͠ղੳͯ͠ෳor୯ҰͷߏԽσʔλΛಘΔ߹͋Δʢྫ:
ϚϧνύʔτΞοϓϩʔυʣ • ʮଟஈʯʮฒߦʯ͕͍࣮͢͠Λ৺͕͚Δͱɺඞཁͳ࣌ʹchannelgoroutineΛ͍ɺॲཧ ޮΛ্͛Δ͜ͱͰ͖Δ
29 ͜͜·Ͱͷֶͼ bufio.ScannerʢVS bufio.Reader VS []rune VS []byteʣ • ҰʹಡΈࠐΉόΠτͷ্ݶ͕Θ͔͍ͬͯΔ߹ʢ͋͘͠Δఔখ͍͞ͱΘ͔͍ͬͯΔ
߹ʣbufio.Scannerͷ͍উख͕ྑ͍ • ؆қͳτʔΫϯׂʹ͓͍ͯbufio.SplitFuncͷ֦ு͕ޮ͘ • ಡΈࠐΉόΠτͷ্ݶ͕Θ͔͍ͬͯΔͳΒ bufio.Scanner.Buffer() Ͱ্ݶΛઃఆͰ͖Δ • ಡΈࠐΉόΠτ͕Θ͔Βͳ͍߹ʢେ͖͘ͳΔՄೳੑ͕େ͖͍߹ʣ bufio.Reader • จࣈͱͯ͠ύʔε͢Δ߹[]runeͰʢྫ: github.com/goccy/go-yaml/scannerʣ • ϓϩτίϧͷϔομͳͲαΠζ͕໌Β͔ͳͷͷ߹[]byteͰ
30 ֤छίʔυΧόϨοδϨϙʔτ͔Β ใΛऔಘ͢Δ
31 ֤छίʔυΧόϨοδϨϙʔτ͔ΒใΛऔಘ͢Δ github.com/k1LoW/octocov • ίʔυΧόϨοδΛऩूɾϨϙʔτ͢Δπʔϧ • πʔϧͷಛੑ্ɺαϙʔτ͢ΔΧόϨοδϑΥʔϚοτଟ͚Εଟ͍΄Ͳྑ͍ • v0.54.6Ͱͷαϙʔτ …
Go coverageɺLCOVɺSimpleCovɺCloverɺCoberturaɺJaCoCo • ॲཧͷಛ • େ1ͭͷϑΝΠϧ • ͱͱΧόϨοδϨϙʔτϑΝΠϧϚγϯϦʔμϒϧͳߏʹͳ͍ͬͯΔ
32 ֤छίʔυΧόϨοδϨϙʔτ͔ΒใΛऔಘ͢Δ ύʔεͷ࣮ • ͘ΒΕͨϚγϯϦʔμϒϧͳϑΥʔϚοτͳͷͰࣈ۟ղੳ͔Βߏจղੳͷ్த·Ͱύοέʔ δͷར༻ͳͲͰγϣʔτΧοτͰ͖Δ • SimpleCov … JSON
• CloverɺCoberturaɺJaCoCo … XML • Go coverage … ͢Ͱʹύοέʔδ͕ఏڙ͞Ε͍ͯΔʢgolang.org/x/tools/coverʣ • LCOV … ಠ࣮ࣗ
33 ֤छίʔυΧόϨοδϨϙʔτ͔ΒใΛऔಘ͢Δ ΧόϨοδϑΥʔϚοτͷύʔε • XMLJSONͰߏԽͰ͖ΕͦΕΛΧόϨοδ ϑΥʔϚοτͷ༷ʹ߹ΘͤͯɺΧόϨοδͷߏʹ Ϛοϐϯά͢Εྑ͍ • ʢಠ࣮ࣗͱݴ͑ʣLCOVϚγϯϦʔμϒϧʹ ͳ͍ͬͯΔͷͰࣈ۟ղੳ
bufio.Scanner ͰेରԠ Ͱ͖Δɻͦͷ͋ͱଞͷΧόϨοδϑΥʔϚοτͱಉ ͡ɻ
34 YAMLϑΝΠϧͷҰ෦Ͱ มల։Λ͢Δ
35 YAMLϑΝΠϧͷҰ෦Ͱมల։Λ͢Δ github.com/k1LoW/expand • YAMLϑΝΠϧͷҰ෦Ͱมల։Λ͢ΔػೳΛ࡞Δ͜ͱ͕Ͱ͖ΔϥΠϒϥϦ • ڥมల։ͱ͔ɺGitHub ActionsͷWorkflow YAMLͷΑ͏ͳมల։ͱ͔ •
ॲཧͷಛ • มల։ͨ͋͠ͱͷߏจղੳYAMLύʔαʔʹ͍ͤͨ • env DEBUG=true ͷจࣈྻ true Λͦͷ··YAMLύʔαʔʹͯ͠boolͱ͍ͨ͠ • JSONΛͨ͠ΒYAMLͷߏจͱͯ͠ల։͞Εͯཉ͍͠ • ͱ͍͑ɺల։ͨ͠ͷߏͰల։લͷYAMLͷߏจ͕ݩͱେ͖ͣ͘ΕΔΑ͏ͳ࣮Ͱ ͍͚͋ͬͯͳ͍ʢ text/template ͳͲʹΑΔมల։Ͱ͍͠ͱஅ ʣ
36 YAMLϑΝΠϧͷҰ෦Ͱมల։Λ͢Δ ύʔεͷ࣮ • YAMLจࣈྻͷࣈ۟ղੳΛઐ༻ͷύοέʔδʢgithub.com/goccy/go-yaml/lexerʣʹͤɺਖ਼͘͠ ղ͞ΕͨτʔΫϯ͝ͱʹมల։ॲཧΛ࣮͢Δ • τʔΫϯ͝ͱͰ͋Εݩͷߏ่͕ΕΔՄೳੑ͕খ͍͞ • มల։ޙͷτʔΫϯΛ࠶YAMLͷจࣈྻʹ͢ʢ͜͜·Ͱ͕expandͷػೳʣ
• ͦͯ͠࠶YAMLύʔαʔͰύʔεͤ͞Δ
37 YAMLϑΝΠϧͷҰ෦Ͱมల։Λ͢Δ ύʔεͷ࣮ʢReplaceYAMLʣ • lexer.Tokenize()ͰτʔΫϯྻΛಘͯஔՄೳͳτʔΫϯ͝ͱʹrepFnͰஔΛ͢Δ • ஔޙͷτʔΫϯΛݩͷYAMLจࣈྻʹΈཱͯΔ
38 ੜ͞ΕͨGoͷίʔυΛ ͞Βʹॻ͖͑Δ
39 ੜ͞ΕͨGoͷίʔυΛ͞Βʹॻ͖͑Δ github.com/k1LoW/sqlc-go-one-or-fail • sqlcʢsqlc-goʣͰੜ͞ΕͨGoͷίʔυΛ͞Βʹॻ͖͑Δπʔϧ • :one Ͱੜ͞ΕͨΫΤϦϝιουͷॲཧΛ0ߦͷ͚࣌ͩͰͳ͘1ߦΑΓଟ͘ͷߦΛऔಘͰ͖ ͨ߹Τϥʔʹ͢ΔΑ͏ʹमਖ਼͢Δʢ1ߦऔಘ͔͠ڐ༰͠ͳ͍Α͏ʹ͢Δʣ •
ॲཧͷಛ • ରGoͷίʔυ • ੜ͞ΕͨGoͷίʔυͳͷͰੜ͞Εͨίʔυʹύλʔϯ͕͋Δ
40 ੜ͞ΕͨGoͷίʔυΛ͞Βʹॻ͖͑Δ ύʔεͷ࣮ • GoͷίʔυΛGoͷίʔυͱͯ͠มߋՕॴΛಛఆ͢Δ • GoͷASTͷύοέʔδʢgo/astɺgolang.org/x/tools/go/ast/astutilʣΛ׆༻ • มߋՕॴͷAST͔ΒඞཁͳใΛൈ͖ग़্ͨ͠Ͱɺࠩ͠ସ͑ΔASTΛੜͯࠩ͠͠ସ͑ɻ
41 ੜ͞ΕͨGoͷίʔυΛ͞Βʹॻ͖͑Δ ύʔεͷ࣮ʢRewrite(ctx context.Context, p string, w io.Writer) errorʣ •
astutil.Apply() ΛͬͯASTΛࠩ͠ସ͑ ͍ͯΔ • ੜ͞ΕͨGoͷίʔυͳͷͰɺ͋Δఔ ϧʔϧԽ͞Ε͍ͯΔͨΊɺࠩ͠ସ͑ରΛ ಛఆ͢ΔͨΊͷఆ݅ͦ͜·Ͱ࡞Γࠐ Ήඞཁ͕ͳ͍
42 ͜͜·Ͱͷֶͼ
43 ຊηογϣϯʹ͓͚Δύʔε ߏจղੳ͕ඞཁͩͬͨΓৄࡉͳࣈ۟ղੳ͕ඞཁͳύʔε࣮ίετ͕ߴ͍ • ղੳ͍ͨ͠ߏจʹΑ࣮͕ͬͯେ͖͘ҟͳΔʢͦΕͦ͏ʣ • ϓϩάϥϛϯάݴޠͦΕʹྨ͢ΔͷநߏจʢASTʣʹͳΔ͜ͱ͕ଟ͍ • ͦΕʹྨ͢Δͷ …
JSONYAMLͦͷ࠷ͨΔྫ • ߏจղੳͷख๏ଟ͘ఏҊ͞Ε͍ͯΔ • ʢಛʹAST͕ඞཁͳϨϕϧͷʣύʔαΛಠࣗʹ։ൃ͢Δͷ͔ͳΓίετ͕ߴ͍ͨΊɺαʔυ ύʔςΟؚΊదͳύοέʔδʹͤΔͷ͕ྑ͍
44 ͦͷଞ: ύοέʔδΛ׆༻͍ͯ͠Δ έʔε
45 ͦͷଞ: ύοέʔδΛ׆༻͍ͯ͠Δέʔε έʔε͝ͱʹ׆༻͍ͯ͠Δศརύοέʔδ • .ssh/config Λ༻ͨ͠SSHଓʢgithub.com/k1LoW/sshcʣ • ssh_configͷύʔε …
github.com/kevinburke/ssh_config • .protoϑΝΠϧͷύʔεͱͦΕΛར༻ͨ͠gRPC௨৴ʢgithub.com/k1LoW/grpcstubʣ • .protoϑΝΠϧͷύʔε … github.com/bufbuild/protocompile • OpenAPI SpecʹΑΔHTTPϦΫΤετ/ϨεϙϯεͷόϦσʔγϣϯʢgithub.com/k1LoW/runnʣ • OpenAPIυΩϡϝϯτͷύʔε … github.com/getkin/kin-openapi • άϧʔϐϯάͰ͖ΔProcess exporter for Prometheusʢgithub.com/k1LoW/grouped_process_exporterʣ • /procʢprocfsʣ ͷύʔε … github.com/prometheus/procfs
͓ΘΓʹ 46
• ຊηογϣϯͰʮύʔεʯͷ࣮ʹ͍༷ͭͯʑͳέʔεΛհͨ͠ɻ • ࠓճΑΓଟ͘ͷέʔεΛհ͢Δ͜ͱͰԿ͔͠Βͷؾ͖͕ͮಘΒΕΕͱ͍͏ظΛࠐ Ίͯߏͨ͠ɻ • Ұݴʹʮύʔεʯͱ͍ͬͯέʔε͝ͱʹಛ͕͋Γɺ࣮ํ๏͕͋Δɻ • ҰํͰέʔεΛ၆ᛌͯ͠ΈΔͱڞ௨͍ͯ͠Δύʔλϯ͋ΔΑ͏ʹݟ͑Δɻ •
ύʔεύοέʔδΛఏڙͯ͘͠Ε͍ͯΔOSSϝϯςφͷํʹײँ͔͠ͳ͍ɻ • ֤έʔεͷ۩ମతͳ࣮Λ֬ೝ͍ͨ͠߹ɺհͨ͠έʔεશͯOSSʹͳ͍ͬͯΔͷͰɺ֤Ϧ ϙδτϦͰࢀরՄೳʢPull Requestͬͯ·͢ʂʣɻ 47 ͓ΘΓʹ ͓ΘΓʹ
Thank You! Thank You! 48