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
570
初めてOSSを作って公開した話
kaorumuta
0
670
Other Decks in Programming
See All in Programming
CSC307 Lecture 03
javiergs
PRO
1
480
SQL Server 2025 LT
odashinsuke
0
190
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
680
Patterns of Patterns
denyspoltorak
0
940
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
120
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
200
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
780
AIエージェントの設計で注意するべきポイント6選
har1101
6
3.2k
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
340
CSC307 Lecture 05
javiergs
PRO
0
480
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1.1k
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
84
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Building the Perfect Custom Keyboard
takai
2
670
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Fireside Chat
paigeccino
41
3.8k
Producing Creativity
orderedlist
PRO
348
40k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
51
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Chasing Engaging Ingredients in Design
codingconduct
0
97
Side Projects
sachag
455
43k
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