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

[インデックス 12740] ファイルの概要

このコミットは、Go言語の公式ドキュメント doc/go1.html に、Go 1リリースで導入された「パッケージ化されたリリース(packaged releases)」に関する記述を追加し、同時にパッケージの更新方法に関するコマンドの記述を go install から go get に修正するものです。Go 1のリリース直前に行われた、ドキュメントの最終調整の一環として位置づけられます。

コミット

commit c5f695e8639f6fccac0c7dca02739c8f64dca5a0
Author: Rob Pike <r@golang.org>
Date:   Sat Mar 24 10:14:07 2012 +1100

    doc/go1: add mention of packaged releases
    Fixes #3245.
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/5905045

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/c5f695e8639f6fccac0c7dca02739c8f64dca5a0

元コミット内容

--- a/doc/go1.html
+++ b/doc/go1.html
@@ -713,7 +713,7 @@ This table lists the old and new import paths:\n <em>Updating</em>:\n Running <code>go</code> <code>fix</code> will update imports of these packages to use the new import paths.\n Installations that depend on these packages will need to install them using\n-a <code>go install</code> command.\n+a <code>go get</code> command.\n </p>\n \n <h2 id=\"major\">Major changes to the library</h2>\n@@ -2027,3 +2027,12 @@ or variable initializations in the C preamble.\n \n <h2 id=\"releases\">Packaged releases</h2>\n \n+<p>\n+One of the most significant changes associated with Go 1 is the availability\n+of prepackaged, downloadable distributions.\n+They are available for many combinations of architecture and operating system\n+(including Windows) and the list will grow.\n+Installation details are described on the\n+<a href=\"/doc/install\">Getting Started</a> page, while\n+the distributions themselves are listed on the\n+<a href=\"http://code.google.com/p/go/downloads/list\">downloads page</a>.\n```

## 変更の背景

このコミットは、Go言語の最初の安定版であるGo 1のリリース(2012年3月)に際して、そのドキュメント `doc/go1.html` を更新するために行われました。主な背景は以下の2点です。

1.  **Go 1におけるパッケージ化されたリリースの導入**: Go 1では、それまでのソースコードからのビルド・インストールだけでなく、事前にコンパイルされたバイナリ形式の配布(packaged releases)が公式に提供されるようになりました。これはGoの普及を促進し、ユーザーがより簡単にGoを導入できるようにするための重要な変更でした。この重要な変更点をドキュメントに明記する必要がありました。
2.  **`go install` から `go get` へのコマンド修正**: Go 1のリリース時点でのパッケージ管理ツールの推奨事項の調整です。当時、パッケージの取得とインストールには `go get` がより適切であるという判断がなされたと考えられます。`go fix` でインポートパスを更新した後に、依存パッケージをインストールする際のコマンドとして `go get` が推奨されるようになりました。これは、Goのツールチェインの進化と、ユーザー体験の改善に向けた継続的な取り組みの一環です。

このコミットは、Go 1のリリース直前に行われたものであり、Go言語の安定性と使いやすさを向上させるための最終的なドキュメント調整の性質を持っています。

## 前提知識の解説

このコミットを理解するためには、以下のGo言語に関する基本的な概念とツールの知識が必要です。

*   **Go 1**: Go言語の最初のメジャー安定版リリース。2012年3月にリリースされ、Go言語の互換性保証の基礎を築きました。Go 1以降のバージョンは、Go 1で書かれたプログラムが引き続き動作することを保証しています。
*   **`go fix`**: Go言語のツールの一つで、古いGoプログラムを新しいGoのAPIや言語仕様に合わせて自動的に書き換えるために使用されます。Go言語の進化に伴うコードの移行を支援します。
*   **`go install`**: Go言語のツールの一つで、Goのソースコードをコンパイルし、実行可能ファイルを `$GOPATH/bin` (または `$GOBIN`) にインストールするために使用されます。
*   **`go get`**: Go言語のツールの一つで、リモートリポジトリからGoパッケージのソースコードを取得し、依存関係を解決し、ビルド・インストールを行うために使用されます。Go Modulesが導入される前は、依存関係の管理とパッケージの取得・インストールを兼ねる主要なコマンドでした。Go Modules導入後(Go 1.11以降)は、主に依存関係の追加・更新に特化し、実行可能ファイルのインストールは `go install` が推奨されるようになりましたが、このコミットが作成されたGo 1の時点では `go get` がより広範な用途で使われていました。
*   **`doc/go1.html`**: Go 1リリースに関する重要な変更点や移行ガイドラインをまとめた公式ドキュメントのHTMLファイルです。Go言語のウェブサイトで公開されていました。
*   **Rob Pike**: Go言語の共同開発者の一人であり、Googleの著名なソフトウェアエンジニア。Go言語の設計思想に大きな影響を与えました。

## 技術的詳細

このコミットは、`doc/go1.html` という単一のHTMLファイルを変更しています。技術的な変更点は以下の2つです。

1.  **`go install` から `go get` への変更**:
    *   変更前のコード: `a <code>go install</code> command.`
    *   変更後のコード: `a <code>go get</code> command.`
    *   この変更は、`go fix` を実行してインポートパスを更新した後に、依存するパッケージをインストールする際の推奨コマンドを `go install` から `go get` に切り替えるものです。Go 1のリリース時点では、`go get` がリモートリポジトリからのパッケージ取得とインストールを統合的に行うコマンドとして、より推奨されていたことを示唆しています。これは、ユーザーがGoのパッケージをより簡単に取得・管理できるようにするための、ツールチェインの設計思想の反映です。
2.  **「Packaged releases」セクションの追加**:
    *   HTMLファイルの末尾に、新しい `<h2>` ヘッダー「Packaged releases」とその内容が追加されています。
    *   追加された内容は、Go 1で「事前にパッケージ化された、ダウンロード可能なディストリビューション」が利用可能になったことの重要性を強調しています。
    *   これらのディストリビューションが、様々なアーキテクチャとオペレーティングシステム(Windowsを含む)の組み合わせで利用可能であり、今後も増えることが述べられています。
    *   インストール方法については「Getting Started」ページ (`/doc/install`) を、実際のダウンロードは「downloads page」 (`http://code.google.com/p/go/downloads/list`) を参照するようにリンクが張られています。
    *   この追加は、Go言語の配布方法における大きな進歩を公式にアナウンスし、ユーザーがGoをより手軽に利用できるようになったことを明確に伝えるためのものです。

これらの変更は、Go 1のリリースが単なる言語仕様の更新だけでなく、開発環境や配布メカニズム全体にわたる包括的な改善であったことを示しています。

## コアとなるコードの変更箇所

このコミットにおけるコアとなるコードの変更箇所は、`doc/go1.html` ファイル内の以下の2点です。

1.  **行 713 の変更**:
    ```diff
    -a <code>go install</code> command.
    +a <code>go get</code> command.
    ```
    これは、`go fix` でインポートパスを更新した後に、依存パッケージをインストールするための推奨コマンドを `go install` から `go get` に変更しています。

2.  **行 2027 以降の新規追加**:
    ```html
    <h2 id="releases">Packaged releases</h2>

    <p>
    One of the most significant changes associated with Go 1 is the availability
    of prepackaged, downloadable distributions.
    They are available for many combinations of architecture and operating system
    (including Windows) and the list will grow.
    Installation details are described on the
    <a href="/doc/install">Getting Started</a> page, while
    the distributions themselves are listed on the
    <a href="http://code.google.com/p/go/downloads/list">downloads page</a>.
    </p>
    ```
    これは、「Packaged releases」という新しいセクションを追加し、Go 1で導入された事前パッケージ化されたバイナリ配布の重要性とその入手方法について説明しています。

## コアとなるコードの解説

### `go install` から `go get` への変更の解説

Go 1のリリース時点では、`go get` コマンドは、リモートリポジトリからGoのソースコードを取得し、依存関係を解決し、ビルドしてインストールする一連のプロセスを自動化する、より包括的なツールとして位置づけられていました。一方、`go install` は、主にローカルに存在するパッケージをビルドしてインストールする用途で使われることが多かったと考えられます。

このドキュメントの文脈では、`go fix` によってインポートパスが更新された後、その新しいパスに対応するパッケージ(多くの場合、リモートから取得する必要がある)をシステムに導入するために、`go get` がより適切なコマンドであると判断されました。`go get` は、必要なパッケージを自動的にダウンロードし、ビルドし、適切な場所に配置する機能を持っていたため、ユーザーにとってより手間が少ない選択肢でした。

Go Modulesが導入された後の現代のGoでは、`go get` は主に `go.mod` ファイルの依存関係を管理するために使用され、実行可能ファイルのインストールには `go install` が推奨されるという役割分担が明確になっています。しかし、このコミットが作成されたGo 1の時代においては、`go get` がより汎用的なパッケージ取得・インストールコマンドとしての役割を担っていました。

### 「Packaged releases」セクションの追加の解説

この新しいセクションは、Go 1のリリースにおける最も重要な変更点の一つである「事前パッケージ化された、ダウンロード可能なディストリビューション」の導入を公式にアナウンスするものです。

*   **重要性**: Go言語が初期の段階では主にソースコードからのビルドを前提としていたのに対し、Go 1でバイナリ配布が開始されたことは、Goの普及とアクセシビリティを劇的に向上させました。これにより、開発者はGoの環境構築にかかる手間を大幅に削減し、より迅速に開発を開始できるようになりました。特にWindowsユーザーにとっては、Goの導入障壁が大きく下がったことを意味します。
*   **クロスプラットフォーム対応**: 「many combinations of architecture and operating system (including Windows)」という記述は、Goが設計当初から重視してきたクロスプラットフォーム対応の哲学が、配布形式にも反映されていることを示しています。
*   **ドキュメントへの誘導**: 「Getting Started」ページと「downloads page」への明確なリンクは、ユーザーが新しい配布形式を利用するための具体的な手順と場所を案内しており、ユーザー体験を考慮したドキュメント設計がなされていることがわかります。

このセクションの追加は、Go言語が単なる研究プロジェクトから、より広範な開発者コミュニティに受け入れられるための、実用的な言語としての地位を確立しようとする意図を強く示しています。

## 関連リンク

*   Go 1 Release Notes (公式ドキュメント): [https://go.dev/doc/go1](https://go.dev/doc/go1) (このコミットが変更したファイルの内容が現在も確認できます)
*   Go言語のダウンロードページ: [https://go.dev/dl/](https://go.dev/dl/) (現在のダウンロードページ)
*   Go言語のインストールガイド: [https://go.dev/doc/install](https://go.dev/doc/install) (現在のインストールガイド)

## 参考にした情報源リンク

*   Go 1.0 was released in March 2012: [https://codilime.com/blog/go-programming-language-history-and-evolution/](https://codilime.com/blog/go-programming-language-history-and-evolution/)
*   Go 1.0: [https://go.dev/blog/go1](https://go.dev/blog/go1)
*   Go 1 compatibility promise: [https://go.dev/doc/go1compat](https://go.dev/doc/go1compat)
*   `go get` vs `go install`: [https://stackoverflow.com/questions/40004038/what-is-the-difference-between-go-get-and-go-install](https://stackoverflow.com/questions/40004038/what-is-the-difference-between-go-get-and-go-install)
*   Go Modules and `go get`: [https://go.dev/blog/go-get-install-etc](https://go.dev/blog/go-get-install-etc)
*   Rob Pike on Go: [https://thenewstack.io/rob-pike-go-got-right-wrong/](https://thenewstack.io/rob-pike-go-got-right-wrong/)
*   Go issue 3245 (関連する可能性のあるGo CL): [https://golang.org/cl/5905045](https://golang.org/cl/5905045) (このコミットのChange List)