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

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

このコミットは、Go言語の初期開発段階において、テスト実行スクリプトである run.bash が、当時存在する全てのテストを実行するように更新されたことを示しています。具体的には、src/lib/Makefilesrc/run.bash の2つのファイルが変更され、新たに導入されたテストスイートがビルドおよび実行プロセスに含まれるようになりました。

コミット

commit 1a19cb8ec03f2a7fa145b0f7790abe46cbfee2e3
Author: Ian Lance Taylor <iant@golang.org>
Date:   Thu Dec 4 13:14:09 2008 -0800

    Make run.bash run all the current tests.
    
    R=r,rsc
    DELTA=8  (8 added, 0 deleted, 0 changed)
    OCL=20468
    CL=20473
--
 src/lib/Makefile | 4 ++++
 src/run.bash     | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/src/lib/Makefile b/src/lib/Makefile
index a50bdf0316..7079433897 100644
--- a/src/lib/Makefile
+++ b/src/lib/Makefile
@@ -34,6 +34,10 @@ FILES=\
 	utf8\
 
 TEST=\
+\tbignum\
+\tbufio\
+\tsort\
+\tstrings\
 	utf8\
 
 clean.dirs: $(addsuffix .dirclean, $(DIRS))\ndiff --git a/src/run.bash b/src/run.bash
index 64795b5e72..dccc924eb2 100755
--- a/src/run.bash
+++ b/src/run.bash
@@ -24,10 +24,14 @@ maketest() {
 }
 
 maketest \
+\tlib/fmt\
+\tlib/hash\
 	lib/math\
 	lib/reflect\
 	lib/regexp\
 	lib/strconv\
+\tlib/tabwriter\
+\tlib/time\
 
 # all of these are subtly different
 # from what maketest does.

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

https://github.com/golang/go/commit/1a19cb8ec03f2a7fa145b0f7790abe46cbfee2e3

元コミット内容

Make run.bash run all the current tests.

このコミットの目的は、run.bash スクリプトが、その時点で存在する全てのテストを実行するようにすることです。

変更の背景

Go言語のプロジェクトは継続的に進化しており、新しいパッケージや機能が追加されるたびに、それらに対応するテストも作成されます。このコミットが行われた2008年12月は、Go言語がまだ一般に公開される前の初期段階であり、活発な開発が行われていました。

この変更の背景には、おそらく以下の理由が考えられます。

  1. テストカバレッジの維持: 新しいパッケージ(bignum, bufio, sort, strings, fmt, hash, tabwriter, timeなど)が追加され、それらのテストが書かれたにもかかわらず、既存の自動テスト実行プロセス(run.bash)がそれらを網羅していなかった可能性があります。
  2. 開発プロセスの効率化: 開発者が全てのテストを手動で実行することなく、単一のスクリプトでプロジェクト全体の健全性を確認できるようにするため。
  3. CI/CDの基盤: 将来的な継続的インテグレーション/継続的デリバリー(CI/CD)システムの基盤として、全てのテストが自動的に実行される仕組みを確立する必要があったため。

このコミットは、Goプロジェクトのテストインフラストラクチャを最新の状態に保ち、開発者が変更が既存の機能に悪影響を与えないことを迅速に確認できるようにするための、継続的な取り組みの一部です。

前提知識の解説

このコミットを理解するためには、以下の概念について基本的な知識が必要です。

  • Go言語の初期開発: Go言語は2009年に一般公開されましたが、このコミットはそれ以前の2008年に行われています。当時のGoプロジェクトの構造やビルドシステムは、現在のものとは異なる部分が多くあります。
  • run.bash: これはGoプロジェクトのルートディレクトリにあるシェルスクリプトで、Goのビルド、テスト、およびその他の開発関連タスクを実行するために使用されていました。Goの初期段階では、go コマンドが存在しなかったため、このようなシェルスクリプトが重要な役割を担っていました。
  • Makefile: Makefile は、ソフトウェアのビルドプロセスを自動化するためのツールである make コマンドによって解釈されるファイルです。Goプロジェクトでは、特に初期段階において、ライブラリのビルドやテストの実行など、様々なタスクを自動化するために使用されていました。
  • Goのテスト: Go言語は、標準ライブラリに組み込まれた testing パッケージを通じて、テストをサポートしています。テストファイルは通常、テスト対象のソースファイルと同じディレクトリに _test.go サフィックスを付けて配置されます。
  • src/lib ディレクトリ: Goの初期のソースコードレイアウトでは、標準ライブラリのパッケージは src/lib ディレクトリの下に配置されていました。現在のGoのソースコードレイアウトとは異なります。

技術的詳細

このコミットは、Goプロジェクトのテスト実行フローにおける2つの主要なコンポーネント、すなわち Makefilerun.bash を連携させて、新しいテストスイートを統合しています。

  1. src/lib/Makefile の変更:

    • TEST= 変数に、新たに bignum, bufio, sort, strings が追加されています。
    • この TEST 変数は、Makefile 内でテスト対象となるライブラリやパッケージをリストアップするために使用されます。make test のようなコマンドが実行された際に、このリストに含まれる各パッケージのテストがビルドおよび実行されるように設定されていたと考えられます。
    • これにより、これらの新しいパッケージのテストが、make ベースのビルドシステムによって認識され、実行される準備が整います。
  2. src/run.bash の変更:

    • maketest 関数呼び出しに、新たに lib/fmt, lib/hash, lib/tabwriter, lib/time が追加されています。
    • run.bash スクリプトは、Goプロジェクト全体のテストを実行するための主要なエントリポイントでした。maketest 関数は、特定のライブラリパスに対してテストを実行するロジックをカプセル化していたと考えられます。
    • これらの追加により、run.bash が実行されると、これらの新しいライブラリのテストも自動的に実行されるようになります。

この変更は、Goプロジェクトのテストインフラストラクチャが、新しいコードベースの成長に合わせて動的に適応できるように設計されていたことを示しています。Makefile は個々のライブラリのテストビルドを管理し、run.bash はそれらのテストを統合的に実行する役割を担っていました。

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

diff --git a/src/lib/Makefile b/src/lib/Makefile
index a50bdf0316..7079433897 100644
--- a/src/lib/Makefile
+++ b/src/lib/Makefile
@@ -34,6 +34,10 @@ FILES=\
 	utf8\
 
 TEST=\
+\tbignum\
+\tbufio\
+\tsort\
+\tstrings\
 	utf8\
 
 clean.dirs: $(addsuffix .dirclean, $(DIRS))\ndiff --git a/src/run.bash b/src/run.bash
index 64795b5e72..dccc924eb2 100755
--- a/src/run.bash
+++ b/src/run.bash
@@ -24,10 +24,14 @@ maketest() {\
 }
 
 maketest \
+\tlib/fmt\
+\tlib/hash\
 	lib/math\
 	lib/reflect\
 	lib/regexp\
 	lib/strconv\
+\tlib/tabwriter\
+\tlib/time\
 
 # all of these are subtly different
 # from what maketest does.

コアとなるコードの解説

src/lib/Makefile の変更点

src/lib/Makefile では、TEST 変数に以下の4つのライブラリ名が追加されています。

  • bignum
  • bufio
  • sort
  • strings

これは、これらのライブラリがGoの標準ライブラリの一部として開発され、それらのテストが Makefile を通じてビルドおよび実行されるべきであることを示しています。TEST 変数は、make コマンドがテストターゲットを処理する際に参照するリストであり、これらの追加によって、これらのパッケージのテストがビルドシステムに組み込まれることになります。

src/run.bash の変更点

src/run.bash では、maketest 関数への呼び出しに以下の4つのライブラリパスが追加されています。

  • lib/fmt
  • lib/hash
  • lib/tabwriter
  • lib/time

run.bash はGoプロジェクト全体のテスト実行をオーケストレーションするスクリプトであり、maketest 関数は個々のライブラリのテストを実行するためのヘルパー関数です。これらのパスの追加は、run.bash が実行されるたびに、これらのライブラリのテストも実行されるようにすることを意味します。

これらの変更は、Go言語の初期段階におけるテストインフラストラクチャの進化を示しており、新しいパッケージが追加されるたびに、それらのテストが自動化されたテストスイートに確実に含まれるようにするための手動での調整が必要であったことが伺えます。現在のGoのビルドシステム(go test コマンドなど)は、このような手動でのリスト更新を必要とせず、より自動化されています。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント
  • Go言語のGitHubリポジトリのコミット履歴
  • 一般的なシェルスクリプト (.bash) と Makefile の知識