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

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

このコミットは、Go 1の公式ドキュメント(doc/go1.html および doc/go1.tmpl)に、新しく導入されたgoコマンドに関する説明を追加するものです。これにより、Go 1リリースにおけるgoコマンドの重要性と、従来のMakefileベースのビルドシステムからの移行についてユーザーに情報を提供します。

コミット

commit 70db237169c35367d6e2b0a13e3b6892849b3c35
Author: Andrew Gerrand <adg@golang.org>
Date:   Thu Mar 8 16:09:49 2012 +1100

    doc: add go command notes to the Go 1 doc
    
    Fixes #2912.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/5783048

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

https://github.com/golang/go/commit/70db237169c35367d6e2b0a13e3b6892849b3c35

元コミット内容

doc: add go command notes to the Go 1 doc

Fixes #2912.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5783048

変更の背景

この変更は、Go言語のメジャーリリースであるGo 1のドキュメントを完成させる一環として行われました。コミットメッセージにある Fixes #2912 は、GoのIssueトラッカーにおける2912番の課題を修正したことを示しています。この課題は、Go 1のドキュメントにおいてgoコマンドに関する記述が不足している、あるいは「TODO: Write this.」というプレースホルダーが残っている状態を指していたと考えられます。

Go 1は、Go言語が安定版としてリリースされた画期的なバージョンであり、その中でgoコマンドはGoエコシステムの中心的なツールとして位置づけられました。従来のGoプロジェクトでは、ビルドやパッケージ管理にMakefileなどの外部ツールを使用することが一般的でしたが、goコマンドの導入により、これらのプロセスが大幅に簡素化され、Go言語のソースコード自体が依存関係の解決やビルド条件の決定を行うようになりました。

このコミットは、Go 1の重要な新機能であるgoコマンドについて、公式ドキュメントで適切に説明し、ユーザーが新しいビルドシステムにスムーズに移行できるよう支援することを目的としています。

前提知識の解説

Go 1

Go 1は、2012年3月28日にリリースされたGo言語の最初の安定版です。このリリースは、Go言語の仕様を安定させ、将来のバージョンとの互換性を保証することを主な目的としていました。Go 1のリリースにより、Goは実験的な言語から、本番環境での利用に適した成熟した言語へと移行しました。多くの新機能や改善が導入されましたが、特にビルドシステムとパッケージ管理の面で大きな変更がありました。

go コマンド

goコマンドは、Go言語の公式ツールチェーンの中核をなすコマンドラインユーティリティです。Go 1で導入され、Goプロジェクトのビルド、テスト、パッケージの取得、インストール、フォーマットなど、多岐にわたるタスクを統合的に管理します。

従来のプログラミング言語では、プロジェクトのビルドにはmakeコマンドとMakefileを使用することが一般的でした。Makefileは、ソースファイルのコンパイル順序や依存関係を記述するファイルで、複雑なビルドプロセスを自動化するために広く利用されていました。しかし、Makefileは記述が複雑になりがちで、異なる環境間での移植性にも課題がありました。

goコマンドは、これらのMakefileの役割を代替し、Goのソースコード自体から依存関係を解決し、ビルド条件を決定する能力を持っています。これにより、Goプロジェクトのビルドプロセスが大幅に簡素化され、開発者はMakefileの記述に時間を費やすことなく、コードの記述に集中できるようになりました。

goコマンドの主な機能には以下のようなものがあります。

  • go build: Goのソースファイルをコンパイルし、実行可能ファイルを生成します。
  • go run: ソースファイルをコンパイルして実行します。
  • go install: パッケージをコンパイルし、GOPATH/bin(またはGOBIN)に実行可能ファイルをインストールします。
  • go get: リモートリポジトリからGoパッケージをダウンロードし、インストールします。
  • go test: パッケージのテストを実行します。
  • go fmt: Goのソースコードを標準的なフォーマットに整形します。

Makefile

Makefileは、ソフトウェアのビルドプロセスを自動化するためのファイルです。makeユーティリティによって解釈され、ソースコードのコンパイル、リンク、テストなどのタスクを実行します。Makefileは、ターゲット、依存関係、コマンドの3つの主要な要素で構成されます。

  • ターゲット: 生成したいファイル(例: 実行可能ファイル)や実行したいアクション(例: clean)の名前。
  • 依存関係: ターゲットを生成するために必要なファイルや他のターゲット。
  • コマンド: ターゲットを生成するために実行されるシェルコマンド。

Go 1以前のGoプロジェクトでは、Makefileがビルドプロセスを管理するために広く使用されていました。しかし、goコマンドの導入により、多くのGoプロジェクトはMakefileを必要としなくなりました。

技術的詳細

このコミットは、Go 1のドキュメントであるdoc/go1.htmldoc/go1.tmpl<h2 id="cmd_go">The go command</h2>セクションに、goコマンドに関する具体的な説明を追加しています。

追加された内容は以下の点を強調しています。

  1. goコマンドの導入: Go 1でgoコマンドが導入されたこと。
  2. 機能: パッケージやコマンドのフェッチ、ビルド、インストールを行うツールであること。
  3. Makefileからの脱却: goコマンドがMakefileを不要にし、Goソースコード自体が依存関係を解決し、ビルド条件を決定すること。これにより、ほとんどの既存のGoプログラムはMakefileなしでビルド可能になること。
  4. 詳細情報への誘導: goコマンドのプライマーとして「How to Write Go Code」ドキュメント(/doc/code.html)を、完全な詳細についてはgoコマンドの公式ドキュメント(/cmd/go/)を参照するよう促していること。
  5. 既存プロジェクトの更新: 従来のMakefileベースのビルドインフラ(Make.pkg, Make.cmdなど)に依存しているプロジェクトは、goコマンドへの移行を推奨し、必要に応じて補助的なビルドタスクのためにMakefileを書き直す必要があること。

この変更は、Go 1のリリースに伴うビルドシステムの大きなパラダイムシフトをユーザーに明確に伝えるための重要なドキュメント更新です。goコマンドは、Go言語のシンプルさと効率性を追求する設計思想を反映しており、ビルドプロセスを言語自体に統合することで、開発体験を向上させました。

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

このコミットでは、以下の2つのファイルが変更されています。

  • doc/go1.html
  • doc/go1.tmpl

両ファイルにおいて、<h2 id="cmd_go">The go command</h2>セクション内の「TODO: Write this.」というプレースホルダーが、goコマンドに関する詳細な説明に置き換えられています。

doc/go1.html の変更点

--- a/doc/go1.html
+++ b/doc/go1.html
@@ -2087,7 +2087,25 @@ The semantic changes make it difficult for the fix tool to update automatically.
 <h2 id="cmd_go">The go command</h2>
 
 <p>
-TODO: Write this.
+Go 1 introduces the <a href="/cmd/go/">go command</a>, a tool for fetching,
+building, and installing Go packages and commands. The <code>go</code> command
+does away with makefiles, instead using Go source code to find dependencies and
+determine build conditions. Most existing Go programs will no longer require
+makefiles to be built.
+</p>
+
+<p>
+See <a href="/doc/code.html">How to Write Go Code</a> for a primer on the
+<code>go</code> command and the <a href="/cmd/go/">go command documentation</a>
+for the full details.
+</p>
+
+<p>
+<em>Updating</em>:
+Projects that depend on the Go project's old makefile-based build
+infrastructure (<code>Make.pkg</code>, <code>Make.cmd</code>, and so on) should
+switch to using the <code>go</code> command for building Go code and, if
+necessary, rewrite their makefiles to perform any auxiliary build tasks.
 </p>
 
 <h2 id="cmd_cgo">The cgo command</h2>

doc/go1.tmpl の変更点

doc/go1.tmplは、doc/go1.htmlのテンプレートファイルであり、同様の変更が適用されています。

--- a/doc/go1.tmpl
+++ b/doc/go1.tmpl
@@ -1959,7 +1959,25 @@ The semantic changes make it difficult for the fix tool to update automatically.
 <h2 id="cmd_go">The go command</h2>
 
 <p>
-TODO: Write this.
+Go 1 introduces the <a href="/cmd/go/">go command</a>, a tool for fetching,
+building, and installing Go packages and commands. The <code>go</code> command
+does away with makefiles, instead using Go source code to find dependencies and
+determine build conditions. Most existing Go programs will no longer require
+makefiles to be built.
+</p>
+
+<p>
+See <a href="/doc/code.html">How to Write Go Code</a> for a primer on the
+<code>go</code> command and the <a href="/cmd/go/">go command documentation</a>
+for the full details.
+</p>
+
+<p>
+<em>Updating</em>:
+Projects that depend on the Go project's old makefile-based build
+infrastructure (<code>Make.pkg</code>, <code>Make.cmd</code>, and so on) should
+switch to using the <code>go</code> command for building Go code and, if
+necessary, rewrite their makefiles to perform any auxiliary build tasks.
 </p>
 
 <h2 id="cmd_cgo">The cgo command</h2>

コアとなるコードの解説

この変更は、Go 1のリリースノートまたは主要なドキュメントの一部として、goコマンドの導入とその影響を公式に説明するものです。

追加されたテキストは、以下の重要なメッセージを伝えています。

  • goコマンドの役割: goコマンドがGoパッケージとコマンドのフェッチ、ビルド、インストールを行うための統合ツールであること。
  • Makefileの置き換え: goコマンドがMakefileを不要にし、Goソースコード自体が依存関係とビルド条件を管理するという、Goのビルドシステムの根本的な変更。これは、Goが独自のビルドシステムを持つことで、開発者がより簡単にプロジェクトを管理できるようにするという設計思想を反映しています。
  • 既存プロジェクトへの影響と移行ガイド: 従来のMakefileベースのビルドシステムを使用していたプロジェクトに対して、goコマンドへの移行を促し、必要に応じてMakefileを補助的なタスクのために書き直す必要があることを明記しています。これは、Go 1へのアップグレードを検討している開発者にとって非常に重要な情報です。
  • 詳細ドキュメントへの誘導: goコマンドの基本的な使い方を学ぶための「How to Write Go Code」と、より詳細な情報のためのgoコマンドの公式ドキュメントへのリンクを提供することで、ユーザーがさらに深く学ぶための道筋を示しています。

このドキュメントの更新は、Go 1のリリースにおけるgoコマンドの戦略的な重要性を強調し、Goエコシステムにおけるその中心的な役割を確立する上で不可欠なものでした。

関連リンク

参考にした情報源リンク