Go 1.23.x → 1.25.x & golangci-lint v1 → v2 にアップグレードした話
はじめに
現在使用していたGoのバージョンが1.23.3で、サポートが切れてしまうため、最新の安定版である1.25.3へアップデートすることにしました。
また、Go 1.25を使用するにはgolangci-lint v2.4.0以降が必須となるため、golangci-lint v2へのアップデートも同時に行います。
背景
なぜgolangci-lint v2が必要なのか
golangci-lintには「ビルドに使用したGoバージョン以下のプロジェクトしかサポートしない」という互換性ポリシーがあります。
手元の環境では golangci-lint v1.64.7 を使っていました。このバージョンはGo 1.24でビルドされているため、Go 1.25のプロジェクトには対応していません。
具体的には:
- golangci-lint v1系(v1.64.7など)
- Go 1.24以下でビルドされている
- → Go 1.25のプロジェクトでは使えない(エラーになる)
-
golangci-lint v2.4.0以降
- Go 1.25でビルドされている
- → Go 1.25のプロジェクトに対応できる
そのため、Go 1.23から1.25にアップグレードする場合、golangci-lintもv2にする必要があります。
公式ドキュメント:
移行手順
1. Goバージョンの更新
go.modのGoバージョンを更新します。
- go 1.23.3
+ go 1.25.3
依存関係を更新:
go mod tidy
2. golangci-lintのアップグレード
Homebrewを使用する場合
brew upgrade golangci-lint
バージョン確認
golangci-lint version
出力例:
golangci-lint has version 2.5.0 built with go1.25.1 from ff63786 on 2025-09-21T18:53:13Z
Go 1.25以上でビルドされていることを確認してください。
3. 設定ファイルの移行
golangci-lint v2では設定ファイルのフォーマットが変更されています。公式の自動マイグレーションツールを使用することを推奨します。
golangci-lint migrate --config .golangci.yml
実行すると:
- 元の設定ファイルが
.golangci.bck.ymlとしてバックアップされる -
.golangci.ymlがv2形式に自動変換される
注意事項:
- 設定ファイル内のコメントは自動移行されません
- 必要に応じて手動で再追加してください
詳細は公式Migration Guideを参照してください。
4. linterの実行と検証
golangci-lint run --timeout=10m
v2ではチェックがより厳格になっているため、既存コードで新たなエラーが検出される可能性があります。
linterで検出されたエラー
v2では検査が厳しくなっているため、いくつかエラーが出る可能性があります。linterが指摘した箇所を修正してください。
CI/CD環境の対応(GitHub Actions使用時)
GitHub Actionsで golangci-lint-action を使用している場合、アクションのバージョンも更新が必要です。
重要: golangci-lint-action v6はgolangci-lint v2に対応していません。v7への更新が必須です。
# Before
- name: Lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.64.8
args: --timeout 5m
# After
- name: Lint
uses: golangci/golangci-lint-action@v7
with:
version: v2.5.0
args: --timeout 5m
v6のままv2.5.0を指定すると以下のエラーが発生します:
Error: invalid version string 'v2.5.0',
golangci-lint v2 is not supported by golangci-lint-action v6,
you must update to golangci-lint-action v7.
まとめ
Go 1.25への移行に伴い、golangci-lint v2への更新が必要となります。公式の自動マイグレーションツールを活用することで、設定ファイルの変換は比較的スムーズに行えます。
ただし、v2ではコード検査がより厳格になっているため、既存コードで新たなエラーが検出される可能性があります。これらは多くの場合、Goのベストプラクティスに沿った修正となるため、コード品質向上の機会と捉えることができます。
CI/CD環境でGitHub Actionsを使用している場合は、アクションのバージョン更新も忘れずに対応してください。