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

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

このコミットは、Go言語のビルドシステムにおける変更を記録しています。具体的には、run.bashスクリプトが--no-bannerオプションを受け付けなくなったことを反映し、src/all.bash内の関連する呼び出しを修正しています。これは、ビルドプロセスの簡素化またはオプションの廃止を示唆しています。

コミット

commit 149983f13682ecd1cf19db3fb9a7788f614f1aa9
Author: Shenghou Ma <minux.ma@gmail.com>
Date:   Tue Apr 10 01:49:49 2012 +0800

    build: run.bash no longer accepts --no-banner
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/5986063

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

https://github.com/golang/go/commit/149983f13682ecd1cf19db3fb9a7788f614f1aa9

元コミット内容

build: run.bash no longer accepts --no-banner

このコミットメッセージは、Go言語のビルドスクリプトであるrun.bashが、もはや--no-bannerというコマンドライン引数を受け付けなくなったことを明確に示しています。これは、ビルドプロセスの動作変更、特にバナー(ビルド情報やヘッダーメッセージ)の表示に関する挙動の変更を意味します。

変更の背景

Go言語のプロジェクトでは、all.bashmake.bashrun.bashといったシェルスクリプトがビルドプロセスの中核を担っています。これらのスクリプトは、Goのソースコードのコンパイル、テストの実行、ツールのビルドなど、Go開発環境の構築と管理に必要な一連のタスクを自動化するために使用されます。

このコミットが行われた2012年4月という時期は、Go言語がまだ比較的新しく、活発に開発が進められていた段階でした。このような初期段階では、ビルドシステム自体も頻繁に改善やリファクタリングの対象となります。--no-bannerオプションの廃止は、以下のような背景が考えられます。

  1. 機能の冗長性または不要化: run.bashが提供していた--no-bannerオプションが、もはや必要とされなくなったか、別の方法で同等の機能が実現されるようになった可能性があります。例えば、バナー表示の制御がより上位のスクリプトや設定に移行した、あるいはバナー表示が常にデフォルトとなり、それを抑制するオプションが不要になった、などが考えられます。
  2. ビルドプロセスの簡素化: オプションを減らすことで、スクリプトの複雑性を低減し、保守性を向上させる狙いがあったかもしれません。特に、ビルドシステムは多くの開発者が利用するため、シンプルであることは重要です。
  3. 一貫性の向上: ビルドスクリプト全体でバナー表示の挙動に一貫性を持たせるため、特定のスクリプトでのみ利用可能だったオプションを廃止した可能性もあります。

この変更は、Goのビルドシステムが成熟していく過程で、より効率的で管理しやすい形へと進化していることを示しています。

前提知識の解説

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

  1. Go言語のビルドシステム: Go言語は、自身のコンパイラやツールチェインをGo自身で記述しており、そのビルドプロセスは一連のシェルスクリプトによって管理されています。
    • make.bash: Goのツールチェイン(コンパイラ、リンカなど)をビルドするための主要なスクリプトです。通常、GoのソースコードからGoをビルドする際に最初に実行されます。
    • all.bash: Goのソースコード全体をビルドし、テストを実行するためのスクリプトです。make.bashを呼び出し、その後run.bashを使ってテストを実行するなどの一連の処理を行います。
    • run.bash: Goのテストスイートを実行するためのスクリプトです。様々なテストオプションを受け取り、Goのテストフレームワークを起動します。
  2. シェルスクリプトの基本: bashスクリプトの基本的な構文、特にコマンドライン引数の扱い(例: $1, $2、オプションのパース)、条件分岐(if文)、コマンドの実行(例: bash command. ./scriptによるソース化)を理解している必要があります。
  3. --no-banner--bannerオプション: 一般的に、CLIツールやスクリプトにおいて--bannerオプションは、プログラムの開始時や特定の処理の前に、バージョン情報、著作権表示、またはその他のメッセージ(バナー)を表示するために使用されます。--no-bannerはその逆で、バナーの表示を抑制するために使用されます。
  4. $GOTOOLDIR: Goのビルドシステムで使用される環境変数の一つで、Goのツール(goコマンド、コンパイラ、リンカなど)が配置されるディレクトリを指します。
  5. $GOTOOLDIR/dist banner: これは、Goのビルドツールの一部であるdistコマンドのbannerサブコマンドを呼び出しています。このコマンドは、Goのビルドに関する情報(バージョン、ビルド日時など)を表示する役割を担っていると推測されます。

技術的詳細

このコミットの技術的な詳細は、src/all.bashスクリプト内でのrun.bashの呼び出し方法の変更に集約されます。

変更前は、src/all.bash内でrun.bashを呼び出す際に、--bannerオプションが明示的に渡されていました。 bash run.bash --no-rebuild --banner

この行は、run.bashスクリプトを--no-rebuild(再ビルドしない)と--banner(バナーを表示する)というオプションを付けて実行することを意味していました。

変更後、--bannerオプションが削除されました。 bash run.bash --no-rebuild

これは、run.bashがもはや--bannerオプションを認識しないか、あるいはバナー表示がデフォルトの挙動となり、それを明示的に指定する必要がなくなったことを示しています。コミットメッセージが「run.bash no longer accepts --no-banner」とあることから、--no-bannerオプションが廃止されたことが直接的な理由であり、それに伴い--bannerオプションも不要になったか、あるいはその存在自体が意味をなさなくなったと考えられます。

また、変更後のコードでは、run.bashの呼び出しの直後に$GOTOOLDIR/dist bannerというコマンドが追加されています。 $GOTOOLDIR/dist banner # print build info

この行は、Goのビルド情報(バナー)を明示的に表示するためのものです。この変更は、run.bashがバナー表示の責任を持たなくなったため、all.bashが直接dist bannerコマンドを呼び出すことで、ビルド情報の表示を引き続き保証していることを示唆しています。これにより、バナー表示のロジックがrun.bashからdistツールへと移譲され、より一元的に管理されるようになった可能性があります。

この変更は、Goのビルドシステムにおけるモジュール間の責任分担の再構築、およびオプションの合理化の一環と見ることができます。

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

変更はsrc/all.bashファイルの一箇所のみです。

--- a/src/all.bash
+++ b/src/all.bash
@@ -9,5 +9,5 @@ if [ ! -f make.bash ]; then
  fi
  . ./make.bash --no-banner
-bash run.bash --no-rebuild --banner
+bash run.bash --no-rebuild
 $GOTOOLDIR/dist banner  # print build info

具体的には、以下の行が変更されました。

  • -bash run.bash --no-rebuild --banner (削除された行)
  • +bash run.bash --no-rebuild (追加された行)
  • +$GOTOOLDIR/dist banner # print build info (追加された行)

コアとなるコードの解説

この変更は、src/all.bashスクリプトがGoのテストスイートを実行する部分に影響を与えます。

  1. bash run.bash --no-rebuild --banner の削除:

    • 以前は、all.bashrun.bashを呼び出す際に、--bannerオプションを渡していました。これは、run.bashがテスト実行の前に何らかのバナー(例えば、Goのバージョン情報やテストの開始メッセージなど)を表示する役割を担っていたことを示唆しています。
    • この行が削除されたのは、コミットメッセージにある通り、run.bashがもはや--no-banner(そしておそらく--bannerも)オプションを受け付けなくなったためです。これは、run.bashからバナー表示の責任が取り除かれたことを意味します。
  2. bash run.bash --no-rebuild の追加:

    • --bannerオプションが削除された新しいrun.bashの呼び出しです。--no-rebuildオプションは引き続き渡されており、これはテストを実行する前にGoのツールチェインを再ビルドしないことを指示しています。これは、all.bashの実行前にmake.bashによって既にビルドが完了しているため、冗長な再ビルドを避けるためのものです。
  3. $GOTOOLDIR/dist banner # print build info の追加:

    • この行は、run.bashの呼び出しの直後に新しく追加されました。
    • $GOTOOLDIR/dist bannerは、Goのビルドツールの一部であるdistコマンドのbannerサブコマンドを実行します。コメントに# print build infoとあるように、このコマンドはGoのビルドに関する情報(バージョン、ビルド日時など)を標準出力に表示する役割を持っています。
    • この追加により、run.bashがバナー表示の責任を負わなくなった代わりに、all.bash自身が明示的にdist bannerコマンドを呼び出すことで、ビルド情報の表示が引き続き行われるように保証されています。これは、バナー表示のロジックがrun.bashからdistツールへと移譲され、ビルドシステム全体でバナー表示のメカニズムが統一された可能性を示唆しています。

全体として、この変更はGoのビルドシステムにおける役割分担の明確化と、オプションの合理化を目的としたリファクタリングの一環であると考えられます。

関連リンク

  • Go言語の公式リポジトリ: https://github.com/golang/go
  • このコミットのGerrit Code Reviewページ: https://golang.org/cl/5986063 (これは古いGerritインスタンスへのリンクであり、現在はアクセスできない可能性がありますが、コミットメッセージに記載されているため含めます。)

参考にした情報源リンク

  • Go言語のソースコード(特にsrc/all.bash, src/make.bash, src/run.bash
  • Gitのdiff出力の解釈に関する一般的な知識
  • シェルスクリプトのコマンドライン引数に関する一般的な知識
  • Go言語のビルドプロセスに関する一般的な知識 (Goの公式ドキュメントや関連するブログ記事など)
  • Google検索によるgolang all.bash run.bash make.bashなどのキーワードでの情報収集。