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
Golangci-lint v2爆誕: 君たちはどうすべきか
Search
logica / Takuto Nagami
April 24, 2025
Programming
1
190
Golangci-lint v2爆誕: 君たちはどうすべきか
2024/4/25 Go Connect #6にて登壇した際の資料です。
logica / Takuto Nagami
April 24, 2025
Tweet
Share
More Decks by logica / Takuto Nagami
See All by logica / Takuto Nagami
プロポーザル一次〆切に向けて
logica0419
1
49
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
1
2.5k
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
3k
Proposal Challengers 2025 募集説明会
logica0419
1
30
Kubernetesを知る
logica0419
21
6.5k
Resizing Animated GIFs Without CGO or Third-Party Libraries
logica0419
2
47
徹底比較!HA Kubernetes ClusterにおけるControl Plane LoadBalancerの選択肢
logica0419
2
520
外部カンファレンスで登壇しよう! 〜「強い」エンジニアへの一歩を踏み出す〜
logica0419
4
250
kube-vipとkube-proxy置き換えCiliumを積んだ究極のK3sクラスタを建てる
logica0419
4
780
Other Decks in Programming
See All in Programming
Vibe Coding の話をしよう
schroneko
12
3.3k
Empowering Developers with HTML-Aware ERB Tooling @ RubyKaigi 2025, Matsuyama, Ehime
marcoroth
2
830
Being an ethical software engineer
xgouchet
PRO
0
220
Memory API : Patterns, Performance et Cas d'Utilisation
josepaumard
1
150
「影響が少ない」を自分の目でみてみる
o0h
PRO
2
1.2k
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
10
3.4k
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.5k
監視 やばい
syossan27
11
10k
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
430
By the way Google Cloud Next 2025に行ってみてどうだった
ymd65536
0
110
Contribute to Comunities | React Tokyo Meetup #4 LT
sasagar
0
570
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
Automating Front-end Workflow
addyosmani
1370
200k
How GitHub (no longer) Works
holman
314
140k
A Tale of Four Properties
chriscoyier
158
23k
Music & Morning Musume
bryan
47
6.5k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Build your cross-platform service in a week with App Engine
jlugia
230
18k
Become a Pro
speakerdeck
PRO
28
5.3k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.5k
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に興味あれば ぜひ話しかけて下さい