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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
m_t_tion1
September 28, 2025
Programming
2
1.4k
私達は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
Tweet
Share
More Decks by m_t_tion1
See All by m_t_tion1
Goでのチーム開発に途中参画した私が納得して実装を進めるためにやったこと ~ 命名編 ~
kaorumuta
0
590
初めてOSSを作って公開した話
kaorumuta
0
690
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
190
Python’s True Superpower
hynek
0
190
文字コードの話
qnighy
43
17k
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
450
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
200
CSC307 Lecture 13
javiergs
PRO
0
310
atmaCup #23でAIコーディングを活用した話
ml_bear
4
730
TROCCOで実現するkintone+BigQueryによるオペレーション改善
ssxota
0
120
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
140
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
150
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
270
Head of Engineeringが現場で回した生産性向上施策 2025→2026
gessy0129
0
210
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
190
Speed Design
sergeychernyshev
33
1.6k
KATA
mclloyd
PRO
35
15k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.7k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
220
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Git: the NoSQL Database
bkeepers
PRO
432
66k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
290
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
It's Worth the Effort
3n
188
29k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
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