[インデックス 16404] ファイルの概要
このコミットは、Go言語のツールチェインからcmd/cov
というコードカバレッジツールを削除するものです。このツールは、機能不全、移植性の欠如、リリースバイナリへの非包含、そしてより優れた代替ツールの登場を理由に廃止されました。
コミット
commit 650a1ef66fa67654e51d0aeaef4247f49525acdc
Author: Rob Pike <r@golang.org>
Date: Fri May 24 11:06:06 2013 -0700
cmd/cov: delete
It doesn't work, it's not portable, it's not part of the released
binaries, and a better tool is due.
Fixes #1319.
Fixes #4621.
R=golang-dev, bradfitz, dave, rsc
CC=golang-dev
https://golang.org/cl/9681044
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/650a1ef66fa67654e51d0aeaef4247f49525acdc
元コミット内容
cmd/cov: delete
It doesn't work, it's not portable, it's not part of the released
binaries, and a better tool is due.
Fixes #1319.
Fixes #4621.
R=golang-dev, bradfitz, dave, rsc
CC=golang-dev
https://golang.org/cl/9681044
変更の背景
このコミットの主な目的は、Go言語の標準ツールセットからcmd/cov
というコードカバレッジツールを完全に削除することです。コミットメッセージには、削除の具体的な理由が明記されています。
- 機能不全 (It doesn't work): ツールが期待通りに動作しない、または信頼性が低い状態であったことを示唆しています。
- 移植性の欠如 (it's not portable):
cmd/cov
はC言語で実装されており、特定のOSやアーキテクチャに依存する可能性がありました。Go言語のクロスプラットフォーム性を考慮すると、これは大きな問題です。 - リリースバイナリへの非包含 (it's not part of the released binaries): このツールがGoの公式リリースに含まれていなかったため、広く利用されることがなく、メンテナンスの優先度が低かったと考えられます。
- より良いツールの登場 (a better tool is due): これは、Go言語の標準的なコードカバレッジツールである
go tool cover
(またはgo test -cover
)の登場を示唆しています。この新しいツールは、Go言語ネイティブで実装され、より堅牢で移植性が高く、Goのエコシステムに統合されています。
これらの理由から、cmd/cov
はGoプロジェクトにとって不要かつ負担となり、削除が決定されました。コミットメッセージに記載されているFixes #1319
とFixes #4621
は、このツールに関連する具体的なバグや問題がこれらのIssueで追跡されていたことを示しています。
前提知識の解説
コードカバレッジとは
コードカバレッジ(Code Coverage)とは、ソフトウェアテストにおいて、テストケースが実行された際に、プログラムのソースコードがどの程度実行されたかを測定する指標です。これにより、テストがコードのどの部分を網羅しているか、あるいは網羅していないかを把握できます。主なカバレッジの種類には、ステートメントカバレッジ、ブランチカバレッジ、ファンクションカバレッジなどがあります。コードカバレッジツールは、通常、ソースコードに計測用のコード(インストゥルメンテーション)を挿入し、実行時にその計測データを収集することでカバレッジを測定します。
Go言語におけるコードカバレッジツール
Go言語には、標準で強力なコードカバレッジツールが組み込まれています。これは主にgo test -cover
コマンドを通じて利用され、go tool cover
コマンドで詳細なレポート(HTML形式など)を生成できます。このツールはGo言語で書かれており、Goのビルドシステムと密接に統合されています。
cmd/cov
の歴史的背景
このコミットで削除されたcmd/cov
は、Go言語の初期に存在したコードカバレッジツールの一つです。コミットログのファイル変更履歴を見ると、main.c
, tree.c
, tree.h
といったC言語のソースファイルが含まれていることから、このツールがC言語で実装されていたことがわかります。Go言語自体がC言語のツールチェイン(Plan 9のツールなど)から影響を受けていた初期の段階では、このようなC言語で書かれた補助ツールが存在することは珍しくありませんでした。しかし、Go言語のエコシステムが成熟し、Go言語ネイティブのツールが開発されるにつれて、C言語で書かれたツールはメンテナンスの負担や移植性の問題から徐々に置き換えられていきました。
技術的詳細
cmd/cov
の削除は、単にディレクトリを削除するだけでなく、Goのビルドシステムや関連スクリプトからの参照も削除する必要がありました。
-
C言語実装の削除:
src/cmd/cov
ディレクトリ全体が削除されています。これには、Makefile
、ドキュメントファイル(doc.go
)、そして主要なC言語ソースファイル(main.c
,tree.c
,tree.h
)が含まれます。C言語で書かれたコードカバレッジツールは、Goのランタイムやコンパイラとの連携において、Goネイティブのツールに比べて複雑さやオーバーヘッドがあった可能性があります。特に、Goの実行バイナリの内部構造を解析し、実行パスを追跡するためには、低レベルなシステムコールやアセンブリレベルの知識が必要となるため、C言語での実装は特定のプラットフォームに強く依存しがちです。 -
ビルドシステムからの参照削除:
src/cmd/dist/build.c
は、Goのビルドプロセスを管理するC言語のプログラムです。このファイルからcmd/cov
への参照が削除されています。具体的には、リリースビルドに含めないディレクトリのリスト(unreleased
配列)や、インストール、ビルド、クリーンアップの対象からcmd/cov
が除外されています。これにより、将来のGoのビルドにおいてcmd/cov
が誤ってビルドされたり、配布されたりすることがなくなります。 -
スクリプトからの参照削除:
src/sudo.bash
は、Goのツールをインストールする際に使用される可能性のあるシェルスクリプトです。このスクリプトからもcmd/cov
への参照が削除されています。これは、ユーザーがsudo.bash
を実行した際に、存在しないcmd/cov
ツールを扱おうとしてエラーが発生するのを防ぐためです。
これらの変更は、cmd/cov
がGoのツールチェインから完全に切り離され、その存在がシステムから抹消されることを意味します。これは、Go言語のツール開発がよりGoネイティブなアプローチへと移行し、C言語ベースのレガシーなツールが整理されていく過程の一部と見なすことができます。
コアとなるコードの変更箇所
このコミットでは、以下のファイルが削除され、または変更されました。
- 削除されたファイル:
src/cmd/cov/Makefile
src/cmd/cov/doc.go
src/cmd/cov/main.c
src/cmd/cov/tree.c
src/cmd/cov/tree.h
- 変更されたファイル:
src/cmd/dist/build.c
src/sudo.bash
コアとなるコードの解説
src/cmd/cov/
ディレクトリ内のファイル (削除)
Makefile
:cmd/cov
ツールのビルド手順を定義していたファイルです。削除により、このツールがビルドシステムから完全に切り離されました。doc.go
:cmd/cov
ツールのドキュメント(使用方法、オプションなど)を記述していたGoファイルです。Goのドキュメンテーションシステムに統合されていましたが、ツール自体の削除に伴い不要となりました。main.c
:cmd/cov
ツールの主要なロジックが記述されていたC言語のソースファイルです。プロセスのアタッチ、ブレークポイントの設定、コード実行の追跡、カバレッジデータの収集とレポート生成など、ツールの核となる機能が含まれていました。特に、u.h
,libc.h
,bio.h
,tree.h
といったヘッダファイルや、ureg_amd64.h
,mach.h
といった低レベルなシステム関連のヘッダがインクルードされていることから、OSのプロセス管理やバイナリ解析に深く関与していたことが伺えます。tree.c
:main.c
から参照されていたtree.h
で定義されるデータ構造(おそらく赤黒木などのツリー構造)の実装が含まれていたC言語のソースファイルです。コードカバレッジの範囲を効率的に管理するために使用されていた可能性があります。tree.h
:tree.c
で使用されるツリー構造の定義が含まれていたC言語のヘッダファイルです。
これらのファイルが削除されたことで、cmd/cov
ツール自体がGoのソースツリーから物理的に消滅しました。
src/cmd/dist/build.c
(変更)
このファイルはGoのビルドシステムの一部であり、Goのツールやパッケージのビルド、インストール、クリーンアップのプロセスを制御します。
変更点としては、cmd/cov
がビルド対象から除外され、特にリリースビルドにおいてcmd/prof
と同様にスキップされるようになりました。
static char *unreleased[] = { ... }
から"src/cmd/cov",
の行が削除されました。これは、リリースブランチに含めるべきではないディレクトリのリストからcmd/cov
が除外されたことを意味します。install(char *dir)
関数内で、cmd/cov
がインストール対象から除外される条件が削除されました。static char *buildorder[] = { ... }
から"cmd/cov",
の行が削除されました。これは、ビルド順序のリストからcmd/cov
が除外されたことを意味します。static char *cleantab[] = { ... }
から"cmd/cov",
の行が削除されました。これは、クリーンアップ対象のリストからcmd/cov
が除外されたことを意味します。clean(void)
関数内で、cmd/cov
がクリーンアップ時にスキップされる条件が削除されました。
これらの変更により、Goのビルドシステムはもはやcmd/cov
の存在を認識せず、ビルドやインストール、クリーンアップの対象から完全に外れることになります。
src/sudo.bash
(変更)
このシェルスクリプトは、Goのツールを/usr/local/bin
のようなシステムパスにインストールする際に使用される補助スクリプトです。
変更点としては、cmd/cov
への参照が削除されました。
if ! [ -x $GOTOOLDIR/cov -a -x $GOTOOLDIR/prof ]; then
の行がif ! [ -x $GOTOOLDIR/prof ]; then
に変更されました。これにより、cov
ツールの存在チェックが不要になりました。for i in prof cov
の行がfor i in prof
に変更されました。これにより、cov
ツールに対するループ処理が削除されました。
これらの変更により、sudo.bash
スクリプトはcmd/cov
ツールを扱わなくなり、存在しないツールへの参照によるエラーを防ぎます。
関連リンク
- GitHubコミットページ: https://github.com/golang/go/commit/650a1ef66fa67654e51d0aeaef4247f49525acdc
- Go CL (Change List): https://golang.org/cl/9681044
- Go Issue #1319: (具体的な内容は不明ですが、
cmd/cov
に関連する問題が報告されていた可能性があります) - Go Issue #4621: (具体的な内容は不明ですが、
cmd/cov
に関連する問題が報告されていた可能性があります)
参考にした情報源リンク
- Go言語のコードカバレッジに関するStack Overflowの議論: https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQH941mqiOHgNRzc1e8ySDBafKjVRVhdi8i345EJP8gkUHiA7aGbE5Bj243uEoQg_uUqMC-Jk4yJaYzf3XCxOhdFM6J2MFwoUemXK7vaybGRbdrsRCq-Pgt3Pm3uhi26WVnWjO5KtXSwgfHtiy1kmin8weVgyPkFVhtClwc6qWca8veIQzbI4tSPKLkvVf7vp8KoBj9HdgBfee5Kxq2=
- Go言語の
cmd/cover
に関するGitHubのIssue (より新しいもの):- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFb3t2_N_JW3xXKwlnrfTIDRV_TJQyLNP0Yydo-gmR46z5MvTXFSKHSNpdI-sC5IH5NVFEvPbaO2EsYL-djkc7Hm3A8HjLTiaTwJM056HX8roHOdeoLBJHtaFzj9qSTBUAcQeDS
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQH19dGKM31v7e65b88cnCa2YHQshTNKAC2FQqMpsyfqrcoSlWtEXE2fGBhgTyxS-mepPqbTb8L-smOF2XFYPs2VFKuLyatn9T05k_glOpdNjQsvOxJeZzf84TnnF3cwu1n4ikdNcRz9AlKkaaino3jempshZzpuuqkmeg==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFoZr2pNFbkuqqE0C2kmHNqflTL8s-m_tumY8JIATniXM36cHrZiPDK30HU4nuZh_bjU2WPi91TSEO-kk5o_QOm1HKf0R_GrxJZx2X7SgZEQjEUkG7TV2zNa2qpqwBYob9nooLfJTWBAVM-ngAEuqHKBSF-EO52ypkZI-MzwtZS3rRbX-VQAr-xpggrhNCSHA6L