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
2
1.3k
私達は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
580
初めてOSSを作って公開した話
kaorumuta
0
680
Other Decks in Programming
See All in Programming
Gemini for developers
meteatamel
0
110
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2.1k
ぼくの開発環境2026
yuzneri
0
270
AI時代の認知負荷との向き合い方
optfit
0
180
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
290
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
830
CSC307 Lecture 05
javiergs
PRO
0
500
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
120
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
470
Package Management Learnings from Homebrew
mikemcquaid
0
240
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
180
WCS-LA-2024
lcolladotor
0
450
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
120
How to make the Groovebox
asonas
2
1.9k
The Invisible Side of Design
smashingmag
302
51k
Speed Design
sergeychernyshev
33
1.5k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
160
Embracing the Ebb and Flow
colly
88
5k
Claude Code のすすめ
schroneko
67
210k
The SEO Collaboration Effect
kristinabergwall1
0
360
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
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