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

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

このコミットは、Go言語プロジェクトの初期セットアッププロセスに関連するスクリプトの調整と、セットアップドキュメントの追加を目的としています。具体的には、ビルドプロセスを管理するsrc/make.bashスクリプトが新規追加され、既存のクリーンアップスクリプトsrc/cmd/clean.bashに微調整が加えられています。

コミット

commit df28e14e5bff98775e98f3de5f464607a36f2e2f
Author: Rob Pike <r@golang.org>
Date:   Wed Jun 11 13:34:08 2008 -0700

    add a setup document, and tweak the scripts that it mentions
    
    SVN=122175

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

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

元コミット内容

add a setup document, and tweak the scripts that it mentions

SVN=122175

変更の背景

このコミットは、Go言語プロジェクトの初期段階、特にSubversion (SVN) からGitへの移行期に位置しています。コミットメッセージにあるSVN=122175は、この変更が元々SVNリポジトリのコミット122175に由来することを示しています。

当時のGoプロジェクトはまだ開発の初期フェーズにあり、ビルドシステムや開発環境のセットアップ手順が確立されつつある時期でした。make.bashのようなスクリプトの導入は、プロジェクトのビルドプロセスを自動化し、開発者がGoのソースコードからコンパイラやツールチェインを構築するための標準的な方法を提供することを目的としています。

また、「setup document」の追加は、新規開発者がプロジェクトに参加する際や、既存の開発者が環境を再構築する際に、必要な手順を明確に文書化することの重要性を示しています。このドキュメントで言及されるスクリプト(make.bashclean.bashなど)が、そのドキュメントの内容に合わせて調整されたと考えられます。これにより、セットアップ手順の一貫性と信頼性が向上し、開発者のオンボーディングがスムーズになることが期待されます。

前提知識の解説

1. Go言語の初期開発とビルドシステム

Go言語は、GoogleでRob Pike、Ken Thompson、Robert Griesemerらによって設計されました。その初期の開発は、既存のC言語ベースのツールチェイン(6g, 6l, 6a, 6cなど、Plan 9由来のツール群)を利用していました。これらのツールは、Goのソースコードをコンパイルし、実行可能ファイルを生成するために使用されました。

初期のGoプロジェクトのビルドは、makeコマンドやシェルスクリプト(.bashファイル)に大きく依存していました。これは、Go自身のビルドツール(go buildなど)がまだ成熟していなかったためです。make.bashのようなスクリプトは、これらの低レベルなビルドコマンドをオーケストレーションし、プロジェクト全体のビルドを自動化する役割を担っていました。

2. bashスクリプト

bash (Bourne-Again SHell) は、Unix系オペレーティングシステムで広く使われているシェルであり、スクリプト言語としても機能します。make.bashclean.bashのようなファイルは、bashスクリプトであり、一連のコマンドを自動的に実行するために使用されます。

  • #!/bin/bash: スクリプトの先頭にあるShebang行で、このスクリプトが/bin/bashインタプリタによって実行されるべきであることを示します。
  • cd: Change Directoryの略で、現在の作業ディレクトリを変更するコマンドです。
  • for i in ... do ... done: ループ構造で、指定されたリストの各要素に対して一連のコマンドを実行します。

3. clean.bashmake.bashの役割

  • clean.bash: プロジェクトのビルドによって生成された一時ファイルやコンパイル済みバイナリなどを削除し、クリーンな状態に戻すためのスクリプトです。開発中に不要なファイルを削除したり、新しいビルドを開始する前に環境をリセットしたりする際に使用されます。
  • make.bash: プロジェクト全体、またはその一部をビルドするためのスクリプトです。このコミットで追加されたsrc/make.bashは、Goのコンパイラやランタイムなどの主要なコンポーネントをビルドする役割を担っていたと考えられます。

4. Subversion (SVN) とGit

Goプロジェクトは、初期にはSubversion (SVN) という集中型バージョン管理システムを使用していました。その後、分散型バージョン管理システムであるGitに移行しました。このコミットのSVN=122175という記述は、SVNからGitへの移行プロセス中に、元のSVNコミットIDがGitコミットメッセージに記録されていたことを示しています。これは、履歴の追跡と参照を容易にするための一般的なプラクティスでした。

技術的詳細

このコミットの主要な変更点は、Goプロジェクトのビルドプロセスを構造化するためのsrc/make.bashスクリプトの導入です。

src/make.bashの新規追加

このスクリプトは、Goのビルドシステムにおけるトップレベルのオーケストレーションスクリプトとして機能します。

#!/bin/bash
# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

for i in cmd runtime
do
	cd $i
	bash make.bash
	cd ..
done
  • Shebangとライセンス: スクリプトの冒頭には、#!/bin/bashとGoプロジェクトの標準的なBSDスタイルのライセンスヘッダーが含まれています。
  • ディレクトリの巡回とビルド:
    • for i in cmd runtime: このループは、cmdruntimeという2つのディレクトリを対象としています。
    • cd $i: 各イテレーションで、現在の作業ディレクトリをcmdまたはruntimeサブディレクトリに移動します。
    • bash make.bash: 移動したサブディレクトリ内で、make.bashという名前の別のスクリプトを実行します。これは、Goのビルドシステムが階層的であることを示唆しています。つまり、トップレベルのmake.bashが、各サブコンポーネント(cmdはコンパイラやツール、runtimeはGoランタイムライブラリ)のビルドを、それぞれのディレクトリ内のmake.bashに委譲している構造です。
    • cd ..: サブディレクトリでの処理が完了した後、親ディレクトリに戻ります。

この構造により、Goのコンパイラやランタイムといった主要なコンポーネントが、適切な順序でビルドされるようになります。これは、依存関係が複雑な大規模プロジェクトにおいて、ビルドプロセスを管理するための一般的なアプローチです。

src/cmd/clean.bashの変更

src/cmd/clean.bashからは、単に空行が1行削除されています。

--- a/src/cmd/clean.bash
+++ b/src/cmd/clean.bash
@@ -3,7 +3,6 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
-
 for i in 6l 6a 6c 6g gc cc
 do
 	cd $i

この変更は機能的な意味合いはほとんどなく、コードの整形や、おそらくは初期のコーディングスタイルガイドラインに合わせた微調整と考えられます。clean.bashは、6l, 6a, 6c, 6g, gc, ccといったGoの初期のツールチェインに関連するディレクトリを巡回し、それぞれのディレクトリ内でクリーンアップ操作を実行するスクリプトです。

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

src/cmd/clean.bash

--- a/src/cmd/clean.bash
+++ b/src/cmd/clean.bash
@@ -3,7 +3,6 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
-
 for i in 6l 6a 6c 6g gc cc
 do
 	cd $i
  • 1行の空行が削除されました。

src/make.bash

--- /dev/null
+++ b/src/make.bash
@@ -0,0 +1,11 @@
+#!/bin/bash
+# Copyright 2009 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+for i in cmd runtime
+do
+	cd $i
+	bash make.bash
+	cd ..
+done
  • 新規ファイルとして追加されました。

コアとなるコードの解説

src/cmd/clean.bashの変更

この変更は、単にファイルの整形であり、スクリプトの動作には影響を与えません。Goプロジェクトの初期段階では、コードベース全体で一貫したスタイルを確立するための微調整が頻繁に行われていました。この空行の削除もその一環である可能性が高いです。

src/make.bashの新規追加

このスクリプトは、Goプロジェクトのビルドプロセスにおける重要なステップを自動化します。

  1. #!/bin/bash: このスクリプトがBashシェルで実行されることを指定します。
  2. 著作権とライセンス: Goプロジェクトの標準的な著作権表示とBSDライセンスの記述が含まれています。これは、Goのソースコードの配布と利用に関する法的条件を明確にするものです。
  3. for i in cmd runtime: このループは、Goの主要なコンポーネントが配置されているcmdディレクトリとruntimeディレクトリを対象とします。
    • cmdディレクトリには、Goコンパイラ(6gなど)、アセンブラ(6aなど)、リンカ(6lなど)といったコマンドラインツールが含まれています。
    • runtimeディレクトリには、Goプログラムの実行に必要なランタイムライブラリのソースコードが含まれています。
  4. cd $i: ループの各イテレーションで、スクリプトは対象のディレクトリ(cmdまたはruntime)に移動します。これにより、そのディレクトリ内のmake.bashスクリプトが、自身のコンテキストで実行できるようになります。
  5. bash make.bash: これがビルドプロセスの核心です。各サブディレクトリ内で、そのディレクトリ固有のmake.bashスクリプトが実行されます。例えば、src/cmd/make.bashはGoコンパイラや関連ツールをビルドし、src/runtime/make.bashはGoランタイムをビルドする役割を担っていたと考えられます。この階層的な呼び出しにより、複雑なビルド依存関係が管理されます。
  6. cd ..: サブディレクトリでのビルドが完了した後、スクリプトは親ディレクトリに戻ります。これにより、次のサブディレクトリの処理に進むか、スクリプトが終了する準備が整います。

このsrc/make.bashの導入は、Goプロジェクトがより組織化されたビルドシステムへと移行し、開発者が簡単にプロジェクト全体をビルドできるようになったことを示しています。これは、プロジェクトの成長と成熟において不可欠なステップでした。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント
  • Go言語のGitHubリポジトリのコミット履歴
  • Bashスクリプトに関する一般的な情報
  • SubversionとGitに関する一般的な情報
  • Go言語の初期のビルドプロセスに関するコミュニティの議論やブログ記事 (具体的なURLは特定していませんが、一般的な知識として参照しました)