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を実行する前にユーザーに確認を取ってください(ネットワークを使用するため)。
バイナリに影響を与える各変更の確認
ツールは設定を、それを読み取るパッケージごとにリストします。パッケージをインポートしても、変更されたコードパスが実際に使われるとは限らないため、以下の手順で確認します:
- 設定に関するドキュメントの一文とリンクを読みます。次に、コード内でそのAPIが使われている箇所を検索します。例:
httpmuxgo121の場合はhttp.NewServeMuxとHandleFuncのパターン、TLS設定の場合はtls.Config、x509設定の場合はx509.ParseCertificateまたはCreateCertificate、randseednopの場合はrand.Seedを探します。 - 各設定について、コードがそのパスを使用しているかどうかを「使用している」「使用していない」「判断できない(依存関係が呼び出している場合など)」で報告します。
runtimeの設定(例:containermaxprocs、updatemaxprocs)はすべてのバイナリに適用されます。CPU制限のあるコンテナなど、デプロイ方法に関連するものを指摘してください。winで始まる設定はWindowsでのみ影響します。プロジェクトがWindows向けに出荷されていない場合はその旨を伝えてください。- 「goコマンドの変更」に分類される設定は、プログラム自体ではなく、
go test -jsonやCIでのビルドに影響します。
レポート
- 短いテーブル:設定、変更内容、影響を受けるバイナリ、コードがそのパスを使用しているかどうか。
- 新しいデフォルトを受け入れるか、古い動作を固定するかを推奨します。固定はコードが実際に依存している設定にのみ提案し、ツールの
godebug ( ... )ブロックを使用してください。固定は一時的な措置です:後のGoリリースで削除されることを伝えてください。 - ツールの注意事項を伝えます。例:Go 1.22のループ変数の変更、ライブラリのgo行がそれをインポートするプログラムのGODEBUGを設定しないことなど。
禁止事項
- ユーザーが依頼しない限り、go.modを編集しないでください。
- 何もリストされていないからといって、バージョン引き上げが安全だと断言しないでください。このツールはGODEBUGのデフォルトのみをカバーしています。リリースノートには他の変更も記載されています。
- ユーザーが依頼しない限り、動作確認のためにテストやバイナリを実行しないでください。