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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takuto Nagami
April 24, 2025
Programming
1.4k
1
Share
Golangci-lint v2爆誕: 君たちはどうすべきか
2024/4/25 Go Connect #6にて登壇した際の資料です。
Takuto Nagami
April 24, 2025
More Decks by Takuto Nagami
See All by Takuto Nagami
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
9
1k
キャリア科目では教えてくれない、就活を生き抜く法則
logica0419
2
270
歴史から学ぶ、Goのメモリ管理基礎
logica0419
17
3.8k
【2025改訂版】ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
190
Fundamentals of Memory Management in Go: Learning Through the History
logica0419
1
150
GopherCon Tourのつくりかた
logica0419
2
130
Go言語はstack overflowの夢を見るか?
logica0419
2
850
あなたの言葉に力を与える、演繹的なアプローチ
logica0419
1
290
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
3
1.1k
Other Decks in Programming
See All in Programming
My daily life on Ruby
a_matsuda
2
150
Back to the roots of date
jinroq
0
630
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
0
170
Don't Prompt Harder, Structure Better
kitasuke
0
800
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
250
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
960
의존성 주입과 모듈화
fornewid
0
160
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
26
18k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
440
Agentic Elixir
whatyouhide
0
440
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
390
検索設計から 推論設計への重心移動と Recall-First Retrieval
po3rin
5
1.5k
Featured
See All Featured
How to Ace a Technical Interview
jacobian
281
24k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
530
Prompt Engineering for Job Search
mfonobong
0
290
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
290
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Raft: Consensus for Rubyists
vanstee
141
7.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.5k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
180
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
190
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.6k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
450
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に興味あれば ぜひ話しかけて下さい