Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Golangci-lint v2爆誕: 君たちはどうすべきか
Search
Takuto Nagami
April 24, 2025
Programming
1.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Golangci-lint v2爆誕: 君たちはどうすべきか
2024/4/25 Go Connect #6にて登壇した際の資料です。
Takuto Nagami
April 24, 2025
More Decks by Takuto Nagami
See All by Takuto Nagami
GopherCon @シアトル に行ってきました
logica0419
0
620
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
690
The Journey of Connecting Japan to the Global Go Community
logica0419
1
150
Discovering Cilium: What eBPF Enabled in K8s Networking
logica0419
0
130
Do Gophers Dream of Stack Overflow?
logica0419
0
68
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
10
1.7k
キャリア科目では教えてくれない、就活を生き抜く法則
logica0419
2
330
歴史から学ぶ、Goのメモリ管理基礎
logica0419
17
4.7k
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
460
Other Decks in Programming
See All in Programming
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
golang-bob.pdf
iwatsukayura
0
130
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
280
phperだってパンチカードでコーディングしたい
o0h
PRO
0
340
JIS keyboard support in Omarchy
lef237
0
120
Railsバージョンを4倍にした話
optim
0
370
Next.js: The final boss of Web Performance
guaca
0
260
The Rails Doctrine Decade
koic
2
590
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
190
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
My Coaching Mixtape
mlcsv
0
360
Making Projects Easy
brettharned
120
6.8k
Designing for Performance
lara
612
70k
Optimising Largest Contentful Paint
csswizardry
37
4k
Unsuck your backbone
ammeep
672
58k
How to train your dragon (web standard)
notwaldorf
96
6.9k
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に興味あれば ぜひ話しかけて下さい