Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Golangci-lint v2爆誕: 君たちはどうすべきか
Search
Takuto Nagami
April 24, 2025
Programming
1
1.1k
Golangci-lint v2爆誕: 君たちはどうすべきか
2024/4/25 Go Connect #6にて登壇した際の資料です。
Takuto Nagami
April 24, 2025
Tweet
Share
More Decks by Takuto Nagami
See All by Takuto Nagami
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
88
Fundamentals of Memory Management in Go: Learning Through the History
logica0419
0
92
GopherCon Tourのつくりかた
logica0419
2
70
Go言語はstack overflowの夢を見るか?
logica0419
2
720
あなたの言葉に力を与える、演繹的なアプローチ
logica0419
1
240
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
1
740
GopherCon Tour 概略
logica0419
2
460
言葉の壁を越えて ~Gophers EXと歩む海外登壇への道~
logica0419
1
64
Maintainer Meetupで「生の声」を聞く ~講演だけじゃないKubeCon
logica0419
1
670
Other Decks in Programming
See All in Programming
Level up your Gemini CLI - D&D Style!
palladius
1
170
FluorTracer / RayTracingCamp11
kugimasa
0
180
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
150
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
300
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.3k
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
210
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
17
6.6k
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
160
20 years of Symfony, what's next?
fabpot
2
310
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
130
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
260
レイトレZ世代に捧ぐ、今からレイトレを始めるための小径
ichi_raven
0
490
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
BBQ
matthewcrist
89
9.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
KATA
mclloyd
PRO
32
15k
GraphQLとの向き合い方2022年版
quramy
49
14k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
It's Worth the Effort
3n
187
29k
How STYLIGHT went responsive
nonsquared
100
5.9k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Become a Pro
speakerdeck
PRO
30
5.7k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
logica X: @logica0419 GitHub: @logica0419 Golangci-lint v2爆誕: 君たちはどうすべきか
自己紹介 • 永見 拓人 (logica) • 千葉工業大学 情報科学部 情報ネットワーク学科 4年
• ネットワークコンテンツ研究会 所属 ◦ 数人の自宅サーバーをVPNで繋いでクラウド基盤 作ろうとしてます • Gophers EXプロジェクト主催 ◦ 是非皆さんチェックして下さい
Gophers EXとは? • 日本Goコミュニティの海外進出を手助けする取り組み • EXに込められた意味 ◦ Overseas EXpansion (海外進出)
◦ EXpress (急行 = 最速で挑戦できる足掛かりを作る) ◦ EXperiment (実験的な取り組み)
Gophers EXの目標 • 最終目標 ◦ 日本Goコミュニティにおける海外カンファレンス 登壇者を増やす • 中間目標 ◦
日本Goコミュニティにおける海外カンファレンス 参加者を増やす ◦ 日本Goコミュニティから海外に挑戦するプロポーザ ルの量・質を共に高める
やっている施策 • Proposal Challengers (第一回は実施済み) ◦ 国際カンファレンスのプロポーザル挑戦を応援 ◦ ピアレビュー会や英語話者のレビューを提供 •
COEFL Go-JP ◦ 日本国内でのバイリンガル勉強会開催 ◦ 多分5月末に第一回を開催します、続報を待て • 海外カンファレンスツアー ◦ 海外カンファレンスに日本人が固まって行く
Golangci-lint v2 爆誕
2025-03-23 v2.0.0 リリース https://ldez.github.io/blog/2025/03/23/golangci-lint-v2/
主な変更内容 - linter • defaultオプションでベースを選択するように ◦ standard / all /
none / fast ◦ default + enable / disableというシンプルな選択 ▪ enable-all / disable-allの混乱が無くなった • linters-settingsが統合された ◦ linterとlinters-settingsが同列な不自然さの改善 • 設定ファイルの構造変更については、golangci-lint migrateで簡単に対応可能
主な変更内容 - relative-path-mode • ファイルパス関連の処理は、今まで全てgolangci-lint を実行したディレクトリ基準だった ◦ 出力に表示されるパスとか、excludeとか ◦ この設定はv1の最後で
run.relative-path-mode を 使って設定可能になっていた • v2ではデフォルトが設定ファイル基準に ◦ run.relative-path-mode のデフォルト設定が変更 という扱い
主な変更内容 - golanci-lint fmt誕生 フォーマッターの宣言的管理 • 設定ファイルにて、formatterオプションに使うフォー マッターのリストとその設定を記述 ◦ linterと同じ感じで設定できる
• golangci-lint fmtで、宣言したフォーマッターを実行 ◦ golangci-lint runではフォーマッターは走らない • 今までリンターでやってたことを、フォーマッターでも やろうというだけ
主な変更内容 - 数々のフラグの削除 • CLIのフラグが新しい形式に移行 ◦ 特にoutput周りは大きく変更された ◦ excludeに関してはフラグでの設定が不可能に •
このフラグ削除によって、多数のツールが破壊的な影響 を被ることに ◦ この後話します
これらの変更がrc無しで 一気に新バージョンとして リリースされた 破壊的変更が大量にあったので、移行期間は欲しかった…
唐突に破壊されたツール群
なぜそのままv2を使えなかったのか • golangici-lintは設定ファイルをフラグで上書きできる • 多くのツールでは、パースしやすい出力形式にするため フラグを使って設定を上書きしていた
代表的な犠牲者たち • GoLand
代表的な犠牲者たち • reviewdog / action-golangci-lint ◦ こいつはlatestを自動的に使うので更にひどかった
代表的な犠牲者たち • vscode-go (VS Code Go公式拡張機能)
という訳で、vscode-goの golangci-lint v2対応を やりました ここからは僕が入れた変更についてのお話
extension/src/goLint: adding golangci-lint-v2 to lintTool
現在の状況 • go.lintTool オプションでgolangci-lintを選択すること で使える • golangci-lintは Go: Install/Update Tools
コマンドで インストールできる ◦ go installを使ってインストールされる
方針 • 基本的にフラグを入れ替えれば動く ◦ golangici-lintのバージョン検知してフラグ出し分け れば良さそう? • メンテナー: 拡張機能のオプションでv1使うかv2使うか ワークスペースごとに切り替えれるようにしたい
◦ lintTool にv2用の新しいオプションを作る ◦ v1とv2のバイナリが同居する必要がある
最終的な実装内容 • 新しい installable tool: golangci-lint-v2 ◦ 一時ディレクトリにgolangci-lintとしてgo install した後、名前を変えて
GO_BIN に移動させる • 新しい lintToolオプション: golangci-lint-v2 ◦ $PATH 内のgolagnci-lint-v2バイナリを実行 • lintToolオプションの改変: golangci-lint ◦ バージョンを検出してフラグを切り替える
vscode-go の v0.47.2 で ついにリリースされました! 皆さんぜひお試しを〜 「プレリリースバージョンへの切り替え」で使えます
golangci-lintを使っている あなたはどうすべきか
ひとまず調べよう • 使っているツールが対応してるか ◦ エディタ / IDE ▪ GoLandはまだ対応してません ◦
CIツール ◦ その他自家製のスクリプトとか • 対応していなければひとまずv1を使い続けてOK
使っているツールが対応していたら • 手元の golangci-lint を v2 にアップデート • golangci-lint migrate
を実行 ◦ 設定ファイルがv2仕様に更新される • ツール / それらの設定をアップデート • スクリプト等でフラグを使っているなら、特別な事情が ない限り全て設定ファイルに移行 ◦ 必ず対応する項目があるはず ◦ golangci-lint run だけで済むように
まとめ
みんな、golangci-lint v2 使ってくれよな! 今回の一連に関して、golangci-lintのメンテナーと GohperCon UKにプロポーザルを出す予定です、お楽しみに
ありがとう ございました Gophers EXに興味あれば ぜひ話しかけて下さい