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
AIのReact習熟度を測る
uhyo
2
650
入門!AWS Blocks
ysuzuki
1
160
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
140
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1.3k
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1.3k
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.3k
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
180
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
2
680
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
420
200個のGitHubリポジトリを横断調査したかった
icck
0
140
Kiro Ambassador を目指す話
k_adachi_01
0
110
AIチャット検索改善の3週間
kworkdev
PRO
2
140
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
330
Believing is Seeing
oripsolob
1
150
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Prompt Engineering for Job Search
mfonobong
0
350
Marketing to machines
jonoalderson
1
5.5k
A designer walks into a library…
pauljervisheath
211
24k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
590
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
160
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Designing for humans not robots
tammielis
254
26k
Thoughts on Productivity
jonyablonski
76
5.2k
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