[インデックス 17675] ファイルの概要
このコミットは、Go 1.2のリリースノートに関するドキュメントの更新です。具体的には、godoc
とvet
というGoツールが、$GOPATH/bin
ではなく、以前からの場所にインストールされ続けることを明記しています。
コミット
doc/go1.2: godocとvetが常に古い場所($GOPATH/binではない)にインストールされることを文書化。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/d00fb0a1ea881f43ef320c65ef606c9900a9df86
元コミット内容
doc/go1.2: document that godoc and vet will always be installed to their old locations (not $GOPATH/bin).
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/13830043
変更の背景
Go 1.2のリリースでは、Goツールのインストールパスに関する変更がありました。通常、go get
コマンドで取得したバイナリは$GOPATH/bin
にインストールされるようになりました。しかし、godoc
とvet
という特定のツールについては、この新しい規則が適用されず、以前からの場所にインストールされ続けることになりました。このコミットは、この例外的な挙動をユーザーに明確に伝えるために、Go 1.2のリリースノート(doc/go1.2.html
)にその旨を追記することを目的としています。
この変更の背景には、Goツールの配布と管理に関する設計上の考慮事項があります。godoc
とvet
はGoディストリビューションのコア部分と見なされており、Goのインストールディレクトリ(通常は$GOROOT/bin
)に直接配置されることが期待されていました。これにより、Goのインストールが完了すれば、これらのツールがすぐに利用可能になるという利点があります。もしこれらが$GOPATH/bin
にインストールされると、ユーザーは$GOPATH
を設定し、そのパスを$PATH
に追加する必要があり、Goの初期設定が複雑になる可能性がありました。
前提知識の解説
- Go言語: Googleによって開発されたオープンソースのプログラミング言語。シンプルさ、効率性、並行処理のサポートが特徴です。
godoc
: Go言語のドキュメンテーションツール。Goのソースコードからドキュメントを生成し、Webサーバーとして提供することもできます。開発者がGoの標準ライブラリやサードパーティライブラリのドキュメントを簡単に参照するために不可欠なツールです。vet
: Go言語の静的解析ツール。Goのソースコードを検査し、潜在的なバグや疑わしい構造(例:Printf
のフォーマット文字列と引数の不一致、到達不能なコードなど)を報告します。コードの品質と信頼性を向上させるために使用されます。$GOPATH
: Go言語のワークスペースのルートディレクトリを指す環境変数です。Go 1.11以前では、Goのソースコード、パッケージ、バイナリを配置するための必須の場所でした。Go 1.11以降のGo Modulesの導入により、$GOPATH
の重要性は低下しましたが、依然として一部のツールやレガシーなプロジェクトでは使用されます。$GOPATH/src
: ソースコードが配置されるディレクトリ。$GOPATH/pkg
: コンパイルされたパッケージオブジェクトが配置されるディレクトリ。$GOPATH/bin
:go install
やgo get
でインストールされた実行可能バイナリが配置されるディレクトリ。
go get
: Go言語のコマンドラインツールで、リモートリポジトリからGoパッケージをダウンロードし、インストールするために使用されます。通常、ダウンロードされたソースコードは$GOPATH/src
に配置され、コンパイルされたバイナリは$GOPATH/bin
に配置されます。- Go 1.2: 2013年12月にリリースされたGo言語のバージョンです。このバージョンでは、ランタイムの改善、ツールの強化、言語仕様の微調整など、多くの変更が加えられました。特に、
$GOPATH/bin
へのバイナリのインストールに関する挙動の変更は、ユーザーにとって重要な情報でした。
技術的詳細
このコミットは、Go 1.2のリリースノートであるdoc/go1.2.html
ファイルに、godoc
とvet
のインストールパスに関する重要な注意書きを追加するものです。
Go 1.2では、go get
コマンドによってインストールされるバイナリのデフォルトのインストール先が$GOPATH/bin
に変更されました。これは、ユーザーがGoのプロジェクトを管理し、依存関係を解決する方法を標準化するための一環でした。しかし、godoc
とvet
は、Goのディストリビューションに密接に関連するツールであり、Goのインストールが完了した時点で、特別な設定なしに利用できることが望ましいと判断されました。
そのため、これらのツールは、go get
でインストールされた場合でも、従来の場所(通常は$GOROOT/bin
、Goのインストールディレクトリ内のbin
サブディレクトリ)に引き続きインストールされることになりました。この挙動は、他のgo get
でインストールされるツールとは異なるため、ユーザーが混乱しないように明示的に文書化する必要がありました。
コミットによって追加されたテキストは、この例外を明確に説明しています。
<p>
When building from source, users must use "go get" to install godoc and vet.
+(The binaries will continue to be installed in their usual locations, not
+<code>$GOPATH/bin</code>.)
</p>
この記述は、ソースからGoをビルドするユーザーがgodoc
とvet
をインストールするためにgo get
を使用する必要があることを再確認しつつ、そのバイナリが$GOPATH/bin
ではなく、従来の場所にインストールされることを強調しています。これにより、ユーザーは$GOPATH/bin
を$PATH
に追加していなくても、これらのツールを直接実行できることを理解できます。
この変更は、Goのツールチェーンの一貫性を保ちつつ、特定のコアツールのアクセシビリティを優先するという設計判断を反映しています。
コアとなるコードの変更箇所
変更はdoc/go1.2.html
ファイルに対して行われました。
--- a/doc/go1.2.html
+++ b/doc/go1.2.html
@@ -175,6 +175,8 @@ include these binaries, so users of these distributions are unaffected.
<p>
When building from source, users must use "go get" to install godoc and vet.
+(The binaries will continue to be installed in their usual locations, not
+<code>$GOPATH/bin</code>.)
</p>
<pre>
具体的には、以下の2行が追加されました。
+(The binaries will continue to be installed in their usual locations, not
+<code>$GOPATH/bin</code>.)
コアとなるコードの解説
追加されたコードはHTMLの段落タグ<p>
内に挿入されています。
+
は追加された行を示します。(The binaries will continue to be installed in their usual locations, not
は、godoc
とvet
のバイナリが、$GOPATH/bin
ではない「通常の場所」にインストールされ続けることを説明するテキストです。<code>$GOPATH/bin</code>.)
は、$GOPATH/bin
というパスをコードとして強調表示し、その場所にはインストールされないことを明確に示しています。
この変更は、Go 1.2のリリースノートにおいて、godoc
とvet
のインストール挙動に関する重要な例外を明記することで、ユーザーの混乱を防ぎ、正しい情報を提供することを目的としています。
関連リンク
- Go Code Review (CL) 13830043: https://golang.org/cl/13830043
参考にした情報源リンク
- Go 1.2 Release Notes: https://golang.org/doc/go1.2 (コミットが適用された後の最終版)
- Go Modules (GOPATHの役割の変化について): https://go.dev/blog/using-go-modules
go get
command documentation: https://go.dev/cmd/go/#hdr-Download_and_install_packages_and_dependenciesgodoc
command documentation: https://go.dev/cmd/godoc/vet
command documentation: https://go.dev/cmd/vet/