[インデックス 12214] ファイルの概要
このコミットは、Go言語のインストール手順に関するドキュメント(doc/install.html
)における、FreeBSDおよびLinux環境でのtar
コマンドの記述ミスを修正するものです。具体的には、アーカイブを展開するコマンドに不足していたオプション-xzf
を追加し、ユーザーが正しくGoをインストールできるように改善しています。
コミット
commit f7ad1834ea2db813914314d14cfdf94d197d204e
Author: Shenghou Ma <minux.ma@gmail.com>
Date: Sun Feb 26 01:40:29 2012 +0800
doc/install: fix FreeBSD/Linux install command
R=adg, golang-dev, go.peter.90, rsc
CC=golang-dev
https://golang.org/cl/5700062
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/f7ad1834ea2db813914314d14cfdf94d197d204e
元コミット内容
このコミットは、Go言語の公式ドキュメントであるdoc/install.html
ファイル内のインストール手順を修正することを目的としています。元のコミットメッセージは「doc/install: fix FreeBSD/Linux install command」と簡潔に述べられており、FreeBSDおよびLinux環境におけるインストールコマンドの誤りを修正したことを示しています。
変更の背景
Go言語のインストール手順では、通常、配布されているバイナリパッケージ(多くの場合、.tar.gz
形式の圧縮アーカイブ)をダウンロードし、それを特定のディレクトリに展開することで行われます。このコミットが行われる前、doc/install.html
に記載されていたtar
コマンドは、go.release.go1.tar.gz
のような圧縮されたtarアーカイブを正しく展開するための必要なオプションが欠けていました。
具体的には、元のコマンドはtar -C /usr/local go.release.go1.tar.gz
となっていました。このコマンドでは、-C /usr/local
はアーカイブを/usr/local
ディレクトリに展開することを指定していますが、アーカイブがgzipで圧縮されていること、およびそれがtarアーカイブであることをtar
コマンドに伝えるオプションが不足していました。このため、ユーザーがドキュメントの指示通りにコマンドを実行しても、アーカイブが正しく展開されず、Goのインストールに失敗する可能性がありました。
この問題は、特にFreeBSDやLinuxのようなUnix系OSで一般的なtar
コマンドの挙動と、圧縮されたアーカイブの取り扱いに関する基本的な知識の欠如、またはドキュメント作成時の単純なミスに起因すると考えられます。ユーザーがスムーズにGoをインストールできるようにするため、この修正は不可欠でした。
前提知識の解説
このコミットの変更内容を理解するためには、以下の前提知識が必要です。
-
tar
コマンド:tar
(Tape ARchiver)は、Unix系オペレーティングシステムで広く使われているアーカイブユーティリティです。複数のファイルを一つのアーカイブファイルにまとめたり(アーカイブ化)、そのアーカイブファイルからファイルを展開したり(展開)するために使用されます。-C ディレクトリ
: 指定されたディレクトリに移動してから操作を実行します。このコミットでは/usr/local
に移動して展開しています。-x
(extract): アーカイブからファイルを展開するオプションです。-z
(gzip): アーカイブがgzip形式で圧縮されていることを示し、展開時に自動的に解凍します。.gz
拡張子のファイルによく使われます。-f ファイル名
: 操作対象のアーカイブファイルを指定します。このコミットではgo.release.go1.tar.gz
が指定されています。
-
.tar.gz
ファイル: これは、まず複数のファイルをtar
コマンドで一つのアーカイブファイルにまとめ、次にそのアーカイブファイルをgzip
コマンドで圧縮した形式のファイルです。ファイル名の拡張子は通常.tar.gz
または.tgz
となります。これを展開するには、tar
コマンドに-z
オプション(gzip解凍)と-x
オプション(展開)を組み合わせて使用する必要があります。 -
Go言語のインストール: Go言語の公式なインストール方法の一つとして、公式サイトから提供されるバイナリディストリビューション(通常は
.tar.gz
形式)をダウンロードし、それを適切なシステムパス(例:/usr/local
)に展開する方法があります。展開後、環境変数(PATH
やGOROOT
など)を設定することで、Goコマンドが利用可能になります。 -
HTMLドキュメント:
doc/install.html
はHTML形式のドキュメントであり、ウェブブラウザで閲覧されることを想定しています。このコミットは、そのHTMLファイル内の<pre>
タグで囲まれたコードブロック(整形済みテキスト)の内容を修正しています。
技術的詳細
このコミットの技術的な核心は、tar
コマンドの正しいオプションの適用にあります。
元のコマンド:
tar -C /usr/local go.release.go1.tar.gz
このコマンドでは、tar
はgo.release.go1.tar.gz
を単なるtarアーカイブとして扱おうとします。しかし、ファイル名が示す通り、これはgzipで圧縮されたtarアーカイブです。tar
コマンドは、デフォルトではgzip圧縮されたファイルを自動的に解凍するわけではありません(少なくとも、このコミットが作成された2012年時点では、すべてのtar
実装がそうではなかったか、あるいは明示的なオプションが推奨されていました)。そのため、tar
は圧縮されたデータをそのまま展開しようとし、結果としてファイルが破損したり、エラーが発生したりしました。
修正後のコマンド:
tar -C /usr/local -xzf go.release.go1.tar.gz
追加されたオプションの意味は以下の通りです。
-x
: これは「extract」(展開)を意味し、アーカイブからファイルを取り出すことをtar
に指示します。-z
: これは「gzip」を意味し、入力ファイルがgzip形式で圧縮されていることをtar
に伝えます。tar
は内部的にgunzip
のようなツールを呼び出してファイルを解凍してから展開します。-f
: これは「file」(ファイル)を意味し、その後に続く引数(go.release.go1.tar.gz
)が操作対象のアーカイブファイルであることを明示的に指定します。
これらのオプションを組み合わせることで、tar
コマンドはgo.release.go1.tar.gz
という名前のgzip圧縮されたtarアーカイブを正しく解凍し、その内容を/usr/local
ディレクトリに展開できるようになります。この修正により、ドキュメントの指示に従うユーザーは、Go言語のインストールをスムーズに完了できるようになりました。
コアとなるコードの変更箇所
変更はdoc/install.html
ファイルの一箇所のみです。
--- a/doc/install.html
+++ b/doc/install.html
@@ -75,7 +75,7 @@ Extract the archive into <code>/usr/local</code>, creating a Go tree in
</p>
<pre>
-tar -C /usr/local go.release.go1.tar.gz
+tar -C /usr/local -xzf go.release.go1.tar.gz
</pre>
<p>
具体的には、78行目の<pre>
タグ内のtar
コマンドが変更されています。
コアとなるコードの解説
この変更は、HTMLドキュメント内のコードスニペットを修正するものです。
- tar -C /usr/local go.release.go1.tar.gz
: 削除された行です。これは、gzip圧縮されたアーカイブを展開するために必要な-x
(展開)と-z
(gzip解凍)オプションが欠けている不完全なコマンドでした。+ tar -C /usr/local -xzf go.release.go1.tar.gz
: 追加された行です。この行では、tar
コマンドに-x
、-z
、-f
の3つのオプションが追加されています。これにより、go.release.go1.tar.gz
という名前のgzip圧縮されたtarアーカイブが、/usr/local
ディレクトリに正しく展開されるようになります。
この修正は、Go言語のインストール手順の正確性を保証し、ユーザーがドキュメントに従ってGoを問題なくセットアップできるようにするために非常に重要です。ドキュメントの小さな修正ですが、ユーザー体験に直接影響を与えるため、その価値は大きいです。
関連リンク
- Go言語公式サイト: https://go.dev/
- Go言語のインストール手順(公式): https://go.dev/doc/install (このコミットで修正されたドキュメントの現在のバージョン)
tar
コマンドのmanページ (例):man tar
(Linux/Unixシステムで実行)
参考にした情報源リンク
tar
コマンドの基本的な使い方に関するドキュメントやチュートリアル。- Go言語の過去のインストール手順に関する情報。
- Gitのコミット履歴と差分表示。