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
私達はmodernize packageに夢を見るか feat. go/analysis, g...
Search
m_t_tion1
September 28, 2025
Programming
1.7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
Go Conference 2025 Day2 での登壇資料です
https://gocon.jp/2025/talks/959035/
m_t_tion1
September 28, 2025
More Decks by m_t_tion1
See All by m_t_tion1
Goでのチーム開発に途中参画した私が納得して実装を進めるためにやったこと ~ 命名編 ~
kaorumuta
0
630
初めてOSSを作って公開した話
kaorumuta
0
730
Other Decks in Programming
See All in Programming
関数型プログラミングのメリットって何だろう?
wanko_it
0
140
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
430
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
340
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
200
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
280
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
dRuby over BLE
makicamel
2
410
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.6k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
260
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
890
Featured
See All Featured
BBQ
matthewcrist
89
10k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Are puppies a ranking factor?
jonoalderson
1
3.7k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Prompt Engineering for Job Search
mfonobong
0
370
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Designing Experiences People Love
moore
143
24k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
280
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Transcript
ࢲୡ modernize package ʹ ເΛݟΔ͔ feat. go/analysis, go/ast Go Conference
2025 (2025/09/28) Kaoru Muta / mentos
ࣗݾհ 2 Kaoru Muta ໂా ܆ (ϝϯτε) ੜ·ΕҭͪେࡕͰࠓେࡕʹ͍·͢ 🐯 גࣜձࣾBuySell
Technologies ͰόοΫΤϯυ୲ ϒϩϯζεϙϯαʔͱͯ͠ڠࢍͯ͠ΔΑʂ ങऔɾࠪఆ ങऔछผʹԠͨ͡࠷దͳγεςϜߏங Visit -๚ങऔ- Store -ళฮങऔ- ങऔ ϦϢʔεϓϥοτϑΥʔϜCosmos ࣗࣾ։ൃͷϦϢʔεಛԽۀجװγεςϜͰ͋ΓαʔϏε܈ͷू߹ମ @m_t_tion1
͏Θͬɾɾɾࢲୡͷ Go version ݹ͗͢ɾɾɾʁ 3 ͱࢥͬͨܦݧ͋Γ·͔͢ʁ ձͷօ༷ͥͻڍखͰ✋
ͥͻ version Λ͋͛·͠ΐ͏ 4 Go جຊతʹޙํޓੑ͕ όʔδϣϯؒͰ୲อ͞Ε͍ͯΔ
͏Θͬɾɾɾࢲୡͷ Go ͷه๏ ݹ͗͢ɾɾɾʁ 5 ͱࢥͬͨܦݧ͋Γ·͔͢ʁ ձͷօ༷ͥͻڍखͰ✋
࠷৽ͷه๏Λਵ࣌औΓೖΕΔͱ ॻ͖ํ͕ࢄΒͬͯ͘Δͷ͕ एׯؾʹͳΔ (ํͳ͍) 6 γϡοͱ౷ҰͰ͖ΕͱաڈʹເݟͨΓ (ࠔͬͯͳ͍ΜͰ͚͢ͲͶ)
ͦΜͳ࣌ʹ modernize package Λ͑ ເΛݟΕΔ͔͠Εͳ͍ 7 ҆શʹ͔ͭதΛཧղ͠ͳ͕Β ͓͏ʂͱ͍͏ൃදͰ͢
modernize package ͱ • gopls ʹೖ͍ͬͯΔ (2025/9 ࣌Ͱ v0.2.0) •
go run ίϚϯυͰ࣮ߦͰ͖Δ ◦ -fix Ͱɺ࠷৽ͷ Go ͰऔΓೖΕΒΕͨه๏Λద༻ͯ͘͠ΕΔ 8
modernize package ͱ 9 forvar (Go 1.22 ~) waitgroup (Go
1.25 ~) ଞʹɺefaceany (interface{} → any) ͳͲɺෳͷέʔεʹରԠ
†ࠇຐज़†Ͱɾɾɾʁ 10
෦࣮ݟΔͧʂ 11 ࠓճ forvar ͷ࣮Λ Έ͍͖ͯ·͢
લఏࣝ - go/ast 12 Go ιʔείʔυͷநߏจ (AST) Λදݱ͢ΔͨΊͷύοέʔδ #1. Node
AST ͷ֤ཁૉ (ex. จɾࣜɾม) จͷ AST Node Λ Stmt interface Ͱѻ͏ #2. Token ࣈ۟ͷ࠷খཁૉ (ex. ԋࢉࢠɾϦςϥϧ)
લఏࣝ - go/analysis 13 Go Ͱ੩తղੳΛ࣮͢ΔͨΊͷϑϨʔϜϫʔΫ #1. Analyzer ίʔυͷղੳΛߦ͏ղੳثͷ࣮ମ #2.
Pass ύοέʔδͷղੳใΛ٧Ίͨͷ
લఏࣝ - go/analysis 14 Go Ͱ੩తղੳΛ࣮͢ΔͨΊͷϑϨʔϜϫʔΫ #3. Diagnostic Analyzer ͕ग़ྗ͢Δࢦఠࣄ߲
#4. SuggestedFix Diagnostic ʹରͯ͠ͷमਖ਼Ҋ (CLI Ͱ -fix option Ͱमਖ਼Λద༻Ͱ͖Δ)
forvar - Analyzer ͷఆٛ 15
forvar - Analyzer ͷఆٛ 16 ղੳ͢Δ্Ͱ࣮ߦ͕ඞཁͳ લॲཧͷAnalyzerͷఆٛ
forvar - Analyzer ͷఆٛ 17 ࣮ࡍͷղੳॲཧΛهड़
18 ͍ͬͯΔ͜ͱ #1. Go version ͷ࠷খཁ݅Λ֬ೝ #2. for range Λ͍ͬͯΔՕॴͷݕग़
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑
19 ͍ͬͯΔ͜ͱ #1. Go version ͷ࠷খཁ݅Λ֬ೝ #2. for range Λ͍ͬͯΔՕॴͷݕग़
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑
#1. Go version ͷ࠷খཁ݅Λ֬ೝ 20
#1. Go version ͷ࠷খཁ݅Λ֬ೝ 21 ࣗಈੜϑΝΠϧ͔Ͳ͏͔Λݕग़ ͦ͠͏ͩͬͨ߹ແࢹ͢Δ
#1. Go version ͷ࠷খཁ݅Λ֬ೝ 22 લॲཧͰ࣮ߦͨ͠inspect.Analyzer ͷ ղੳ݁ՌΛड͚औΔ
#1. Go version ͷ࠷খཁ݅Λ֬ೝ 23 ࠷খཁ͕݅ Go 1.22 ͷϑΝΠϧΛ Ұ͍ͭͣͭࠪͯ͘͠
#1. Go version ͷ࠷খཁ݅Λ֬ೝ 24 ରͷϑΝΠϧʹଘࡏ͢Δ for range จ ͷ
stmt ΛҰͭͣͭࠪ
25 ͍ͬͯΔ͜ͱ #1. Go version ͷ࠷খཁ݅Λ֬ೝ #2. for range Λ͍ͬͯΔՕॴͷݕग़
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑
#2. for range Λ͍ͬͯΔՕॴͷݕग़ 26
ϊʔυ Λ for range จͱͯ͠ղऍ ϧʔϓมΛએݴ͍ͯ͠Δͷ͕ ର (ex. `for k,
v := range m`) #2. for range Λ͍ͬͯΔՕॴͷݕग़ 27
#2. for range Λ͍ͬͯΔՕॴͷݕग़ 28 ϧʔϓͷதͰɺมΛಉ໊Ͱ ࠶એݴ͍ͯ͠Δ͔ͷఆΛߦ͏ؔ (ex. k :=
k)
#2. for range Λ͍ͬͯΔՕॴͷݕग़ 29 • ࠨ߲ͱӈ߲͕͍͠ • ϧʔϓมͱࠨ߲͕͍͠ ߹Ҏ֎আ֎
30 ͍ͬͯΔ͜ͱ #1. Go version ͷ࠷খཁ݅Λ֬ೝ #2. for range Λ͍ͬͯΔՕॴͷݕग़
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑ 31
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑ 32 for range ϧʔϓΛ1ߦͣͭࠪ ͦͷ͏ͪɺ݅ʹҰகͨ͠ͷΛ ॻ͖͑Δ
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑ 33 • ࣜϊʔυʹม • ԋࢉࢠ͕ʮ:=ʯ • ࠨ߲ͱӈ߲͕͍͠ •
ϧʔϓมΛ࠶એݴ͍ͯ͠Δ
#3. ݅ʹҰகͨ͠ՕॴΛॻ͖͑ 34 • Diagnostic ʹղੳ݁ՌΛηοτ • SuggestedFix ʹɺ for
range Ͱม࠶એ ݴͷՕॴΛআ͢Δमਖ਼ҊΛηοτ
͏ʹ͋ͨͬͯͷݸਓͷҙݟ & ཹҙ͖͢ • modernize Թײߴ͘ɺ࠷৽ͷมߋʹैͯ͘͠Ε͍ͯΔ༷ࢠ ◦ waitgroup.Go ͕ Go
1.25 ʹ approve ͞Εͨ͜ͱΛड͚ͯ ଈ࠲ʹରԠ͍ͯ͠Δ: https://github.com/golang/go/issues/73059 • ੜAIʹίʔυΛॻ͔ͤΔ؍ ◦ ੲͷόʔδϣϯͰॻ͍ͯ͘Δ߹ʹରԠ͕ඞཁ͔ ◦ CI Ͱ modernize -test Λ࣮ߦͯ͠ɺࣦഊΛݩʹमਖ਼ͤ͞Δɾɾʁ • େલఏɺ͋͘·Ͱ beta Ͱ͋Γɺissue ͕͍͋ͬͯΔ ◦ https://github.com/golang/go/issues/75358 : ࣮ߦ࣌ʹ panic 35
ເʹ͏ͭͭΛൈ͔͞ͳ͍ ఔʹͬͯΈΔͷ͕Αͦ͞͏ 36 ਖ਼͍͠มߋ͔֤ʑ͕ ݟۃΊ·͠ΐ͏
ࢀߟจݙ • https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/ modernize • https://pkg.go.dev/golang.org/x/tools/go/analysis • https://pkg.go.dev/golang.org/x/tools/go/ast/inspector • https://zenn.dev/hsaki/books/golang-static-analysis
• https://zenn.dev/urakawa_jinsei/articles/3efa94ac6d16e7 37
Thank You! 38