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
Takuto Nagami
April 24, 2025
Programming
1
990
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
Fundamentals of Memory Management in Go: Learning Through the History
logica0419
0
81
GopherCon Tourのつくりかた
logica0419
1
64
Go言語はstack overflowの夢を見るか?
logica0419
2
710
あなたの言葉に力を与える、演繹的なアプローチ
logica0419
1
220
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
1
700
GopherCon Tour 概略
logica0419
2
410
言葉の壁を越えて ~Gophers EXと歩む海外登壇への道~
logica0419
1
59
Maintainer Meetupで「生の声」を聞く ~講演だけじゃないKubeCon
logica0419
1
600
理想の英語力に一直線!最高効率な英語学習のすゝめ
logica0419
6
460
Other Decks in Programming
See All in Programming
PyCon mini 東海 2025「個人ではじめるマルチAIエージェント入門 〜LangChain × LangGraphでアイデアを形にするステップ〜」
komofr
3
910
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
4
510
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
0
260
Designing Repeatable Edits: The Architecture of . in Vim
satorunooshie
0
260
2026年向け会社紹介資料
misu
0
150
AIを駆使して新しい技術を効率的に理解する方法
nogu66
0
570
Honoを技術選定したAI要件定義プラットフォームAcsimでの意思決定
codenote
0
130
業務でAIを使いたい話
hnw
0
260
Inside of Swift Export
giginet
PRO
1
530
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
140
CSC305 Lecture 15
javiergs
PRO
0
190
自動テストを活かすためのテスト分析・テスト設計の進め方/JaSST25 Shikoku
goyoki
1
550
Featured
See All Featured
Balancing Empowerment & Direction
lara
5
740
Docker and Python
trallard
46
3.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
GraphQLとの向き合い方2022年版
quramy
49
14k
Automating Front-end Workflow
addyosmani
1371
200k
A better future with KSS
kneath
239
18k
Writing Fast Ruby
sferik
630
62k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8k
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に興味あれば ぜひ話しかけて下さい