Communityコーディング&開発github.com

GillMacedo/checking-go-version-bumps

go.modのgo行を引き上げた際に変更されるGODEBUGのデフォルト動作、影響を受けるパッケージをインポートするバイナリ、および以前の動作を維持するgodebug行を一覧表示します。Goのバージョンアップ、PRレビュー、Dependabot/Renovateによる変更、アップグレード後の動作変更(ServeMuxルーティング、TLS、x509、GOMAXPROCS)に対応します。

checking-go-version-bumps とは?

このスキルは、Goプロジェクトでgo.modのgo行を引き上げたときに変更されるGODEBUGのデフォルト動作を分析します。Goのバージョンアップ(例:1.21→1.24)に伴い、net/http、crypto/tls、crypto/x509、runtimeなどの標準パッケージの動作がコード変更なしで変わる可能性があるため、影響を事前に把握することが重要です。このツールはインストール済みのGoツールチェーンを使用し、go.modを読み取り専用で解析します。ユーザーのコードをビルド・実行せず、ネットワークも使用しないため安全です。対応プラットフォームはCLI(Claude Codeなど)で、Goがインストールされている環境であれば動作します。結果は、各設定がどのバイナリに影響するか、そのコードパスが実際に使用されているかを表形式で報告し、新しいデフォルトを受け入れるか、古い動作をgodebug行で固定するかを推奨します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GillMacedo/godebugdiff/tree/main/plugin/skills/checking-go-version-bumps

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Goのバージョン引き上げの確認

go.modのgo行を引き上げると、言語バージョンだけでなく、各メインパッケージが新しいバージョンのGODEBUGデフォルトを取得するため、net/http、crypto/tls、crypto/x509、net/url、runtimeなどの動作がコード変更なしで変わることがあります。このバンドルツールは、インストール済みのGoツールチェーンに問い合わせて、どのデフォルトが変更され、どのバイナリが影響を受けるパッケージをインポートしているかを調べます。Goがインストールされている必要があり、go.modを読み取り専用で参照し、ユーザーのコードをビルド・実行せず、ネットワークも使用しません。

ツールの実行

モジュールルートから、またはそのディレクトリを指定して実行します:

go run "${CLAUDE_PLUGIN_ROOT}/scripts/godebugdiff.go" --to 1.24 .
  • --to はデフォルトでインストール済みツールチェーンのバージョンになり、それより新しいバージョンを指定することはできません。ユーザーがより新しいターゲットを希望する場合は、先にそのGoバージョンをインストールする必要があると伝えてください。
  • --from はデフォルトで現在のgo行の値になります。すでに引き上げられたPRをレビューする場合は、ベースブランチのバージョンを指定します: --from 1.21。
  • 構造化出力を得るには --json を、テストバイナリを含めるには --tests を追加します。メインパッケージがないモジュールは、自動的にテストバイナリを通じてチェックされます。
  • モジュールがモジュールキャッシュにないと表示された場合は、go mod download を実行する前にユーザーに確認を取ってください(ネットワークを使用するため)。

バイナリに影響を与える各変更の確認

ツールは設定を、それを読み取るパッケージごとにリストします。パッケージをインポートしても、変更されたコードパスが実際に使われるとは限らないため、以下の手順で確認します:

  1. 設定に関するドキュメントの一文とリンクを読みます。次に、コード内でそのAPIが使われている箇所を検索します。例:httpmuxgo121 の場合は http.NewServeMux と HandleFunc のパターン、TLS設定の場合は tls.Config、x509設定の場合は x509.ParseCertificate または CreateCertificate、randseednop の場合は rand.Seed を探します。
  2. 各設定について、コードがそのパスを使用しているかどうかを「使用している」「使用していない」「判断できない(依存関係が呼び出している場合など)」で報告します。
  3. runtime の設定(例:containermaxprocs、updatemaxprocs)はすべてのバイナリに適用されます。CPU制限のあるコンテナなど、デプロイ方法に関連するものを指摘してください。
  4. win で始まる設定はWindowsでのみ影響します。プロジェクトがWindows向けに出荷されていない場合はその旨を伝えてください。
  5. 「goコマンドの変更」に分類される設定は、プログラム自体ではなく、go test -json やCIでのビルドに影響します。

レポート

  1. 短いテーブル:設定、変更内容、影響を受けるバイナリ、コードがそのパスを使用しているかどうか。
  2. 新しいデフォルトを受け入れるか、古い動作を固定するかを推奨します。固定はコードが実際に依存している設定にのみ提案し、ツールの godebug ( ... ) ブロックを使用してください。固定は一時的な措置です:後のGoリリースで削除されることを伝えてください。
  3. ツールの注意事項を伝えます。例:Go 1.22のループ変数の変更、ライブラリのgo行がそれをインポートするプログラムのGODEBUGを設定しないことなど。

禁止事項

  • ユーザーが依頼しない限り、go.modを編集しないでください。
  • 何もリストされていないからといって、バージョン引き上げが安全だと断言しないでください。このツールはGODEBUGのデフォルトのみをカバーしています。リリースノートには他の変更も記載されています。
  • ユーザーが依頼しない限り、動作確認のためにテストやバイナリを実行しないでください。

関連スキル