0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go 1.23.x → 1.25.x & golangci-lint v1 → v2 にアップグレードした話

Posted at

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を使用している場合は、アクションのバージョン更新も忘れずに対応してください。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?