Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 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をインストールできるようにするため、この修正は不可欠でした。

前提知識の解説

このコミットの変更内容を理解するためには、以下の前提知識が必要です。

  1. tarコマンド: tar(Tape ARchiver)は、Unix系オペレーティングシステムで広く使われているアーカイブユーティリティです。複数のファイルを一つのアーカイブファイルにまとめたり(アーカイブ化)、そのアーカイブファイルからファイルを展開したり(展開)するために使用されます。

    • -C ディレクトリ: 指定されたディレクトリに移動してから操作を実行します。このコミットでは/usr/localに移動して展開しています。
    • -x (extract): アーカイブからファイルを展開するオプションです。
    • -z (gzip): アーカイブがgzip形式で圧縮されていることを示し、展開時に自動的に解凍します。.gz拡張子のファイルによく使われます。
    • -f ファイル名: 操作対象のアーカイブファイルを指定します。このコミットではgo.release.go1.tar.gzが指定されています。
  2. .tar.gzファイル: これは、まず複数のファイルをtarコマンドで一つのアーカイブファイルにまとめ、次にそのアーカイブファイルをgzipコマンドで圧縮した形式のファイルです。ファイル名の拡張子は通常.tar.gzまたは.tgzとなります。これを展開するには、tarコマンドに-zオプション(gzip解凍)と-xオプション(展開)を組み合わせて使用する必要があります。

  3. Go言語のインストール: Go言語の公式なインストール方法の一つとして、公式サイトから提供されるバイナリディストリビューション(通常は.tar.gz形式)をダウンロードし、それを適切なシステムパス(例: /usr/local)に展開する方法があります。展開後、環境変数(PATHGOROOTなど)を設定することで、Goコマンドが利用可能になります。

  4. HTMLドキュメント: doc/install.htmlはHTML形式のドキュメントであり、ウェブブラウザで閲覧されることを想定しています。このコミットは、そのHTMLファイル内の<pre>タグで囲まれたコードブロック(整形済みテキスト)の内容を修正しています。

技術的詳細

このコミットの技術的な核心は、tarコマンドの正しいオプションの適用にあります。

元のコマンド:

tar -C /usr/local go.release.go1.tar.gz

このコマンドでは、targo.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のコミット履歴と差分表示。