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.2k
私達は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
560
初めてOSSを作って公開した話
kaorumuta
0
670
Other Decks in Programming
See All in Programming
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.3k
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.4k
ゆくKotlin くるRust
exoego
1
200
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
110
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
150
Python札幌 LT資料
t3tra
7
1.1k
CSC307 Lecture 03
javiergs
PRO
1
470
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
6
2.2k
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
140
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
330
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Featured
See All Featured
A designer walks into a library…
pauljervisheath
210
24k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Building the Perfect Custom Keyboard
takai
2
670
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
54
49k
RailsConf 2023
tenderlove
30
1.3k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
690
GitHub's CSS Performance
jonrohan
1032
470k
Claude Code のすすめ
schroneko
67
210k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Technical Leadership for Architectural Decision Making
baasie
0
200
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
110
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