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

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

このコミットは、Go言語プロジェクトにおけるクリーンアッププロセス(ビルド生成物や一時ファイルの削除)の改善を目的としています。具体的には、doc/codelab/wiki/Makefile において index.htmlmake clean コマンドで削除されないように変更し、src/clean.bash スクリプトにこれまで見落とされていたディレクトリ(../misc/dashboard/builder, ../misc/goplay, ../doc/codelab/wiki)のクリーンアップを追加しています。これにより、クリーンアップの範囲が拡張され、同時に不要なファイルの削除が防止されることで、ビルド環境の整合性が向上します。

コミット

Housekeeping: Cleaning up the clean-up process.

src/clean.bash: Add clean-ups for previously overlooked directories. doc/codelab/wiki/Makefile: Dropped "index.html" from CLEANFILES so it will not be deleted on cleaning.

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

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

https://github.com/golang/go/commit/90913cf17042af06ea783c9568dc4af892677589

元コミット内容

commit 90913cf17042af06ea783c9568dc4af892677589
Author: Lucio De Re <lucio.dere@gmail.com>
Date:   Sun Dec 11 09:23:17 2011 -0800

    Housekeeping: Cleaning up the clean-up process.
    
    src/clean.bash:
            Add clean-ups for previously overlooked directories.
    doc/codelab/wiki/Makefile:
            Dropped "index.html" from CLEANFILES so it will not be
            deleted on cleaning.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/5476050

変更の背景

このコミットの背景には、Go言語プロジェクトのビルドシステムにおける「クリーンアップ」の不完全性がありました。プロジェクトの規模が拡大し、様々なツールやドキュメントが追加されるにつれて、ビルドプロセス中に生成される一時ファイルやキャッシュ、あるいは古いビルド成果物が蓄積される問題が発生していました。

既存のクリーンアップスクリプトやMakefileの clean ターゲットは、これらの新しいディレクトリや特定の生成ファイルを適切に処理できていませんでした。特に、doc/codelab/wiki/Makefile において index.htmlCLEANFILES に含まれていたことは、このファイルが生成物であるにもかかわらず、クリーンアップ時に削除されるべきではないという判断があったことを示唆しています。これは、index.html が他のドキュメント生成の基盤となる重要なファイルであるか、あるいは再生成に時間がかかるため、開発効率を考慮して削除対象から外す必要があったためと考えられます。

また、src/clean.bash スクリプトが特定のディレクトリ(../misc/dashboard/builder, ../misc/goplay, ../doc/codelab/wiki)をクリーンアップ対象としていなかったため、これらのディレクトリに不要なファイルが残り続け、ディスクスペースの消費や、潜在的なビルドの不整合を引き起こす可能性がありました。

このコミットは、これらの問題を解決し、プロジェクト全体のクリーンアッププロセスをより包括的かつ正確にすることで、開発者が常にクリーンな状態で作業を開始できるようにすることを目的としています。

前提知識の解説

このコミットを理解するためには、以下の技術的な前提知識が役立ちます。

  1. Makefile:

    • Makefile は、主にUnix系システムでプログラムのコンパイルやビルドプロセスを自動化するために使用されるファイルです。make コマンドによって解釈され、依存関係に基づいてタスクを実行します。
    • ターゲット (Target): all, clean など、実行したい操作の名前です。
    • 依存関係 (Dependencies): ターゲットを生成するために必要なファイルや他のターゲットです。
    • レシピ (Recipe): ターゲットを生成するために実行されるコマンドのリストです。
    • clean ターゲット: 慣習的に、ビルドプロセスで生成された一時ファイルや実行可能ファイルなどを削除するためのターゲットです。開発者がプロジェクトをクリーンな状態に戻す際に使用します。
    • CLEANFILES 変数: 多くのMakefileで慣習的に使用される変数で、clean ターゲットによって削除されるべきファイルやディレクトリのリストを保持します。
  2. Bashスクリプト:

    • clean.bash はBashシェルスクリプトであり、Unix/Linux環境でコマンドラインから実行される一連のコマンドを記述したファイルです。
    • rm -rf: rm はファイルを削除するコマンド、-r はディレクトリを再帰的に削除するオプション、-f は確認なしで強制的に削除するオプションです。この組み合わせは、指定されたファイルやディレクトリをその内容ごと完全に削除する際に使用されます。
    • for ループ: スクリプト内でリストの各要素に対して一連のコマンドを繰り返すために使用されます。
    • $GOROOT: Go言語のインストールディレクトリを示す環境変数です。Goプロジェクトのビルドシステムでは、この変数を使ってGoのソースコードやツールが配置されている場所を参照します。
  3. Go言語プロジェクトの構造 (2011年頃):

    • Go言語の初期のプロジェクト構造では、src ディレクトリにGoのソースコード、doc ディレクトリにドキュメント、misc ディレクトリに様々なユーティリティや実験的なコードが配置されていました。
    • codelab: Goのチュートリアルやハンズオン資料を指すことが多いです。
    • wiki: ドキュメントや情報共有のためのWiki形式のコンテンツを指します。
    • dashboard/builder: GoプロジェクトのビルドシステムやCI/CDに関連するツールやスクリプトが含まれる可能性があります。
    • goplay: Go Playgroundのような、Goコードをオンラインで実行・共有するためのツールや関連コードを指す可能性があります。
  4. Gerrit (Change-ID):

    • https://golang.org/cl/5476050 は、Goプロジェクトが当時使用していたコードレビューシステムであるGerritのChange-IDへのリンクです。GerritはGitの上に構築されたWebベースのコードレビューツールで、変更セット(Change List, CL)ごとにレビューと承認のプロセスを管理します。

技術的詳細

このコミットは、Goプロジェクトのビルドおよびクリーンアッププロセスにおける2つの異なる側面を改善しています。

1. doc/codelab/wiki/Makefile の変更

  • 変更前:
    CLEANFILES+=index.html srcextract.bin htmlify.bin get.bin
    
  • 変更後:
    CLEANFILES+=srcextract.bin htmlify.bin get.bin
    
  • 詳細: この変更は、CLEANFILES 変数から index.html を削除しています。index.html は、同じMakefile内の index.html: wiki.html srcextract.bin htmlify.bin というルールによって wiki.html から生成されるファイルです。通常、CLEANFILES にはビルドプロセスで生成される一時ファイルや成果物が含まれ、make clean コマンドによって削除されます。 index.htmlCLEANFILES から除外するということは、このファイルがクリーンアップ時に削除されるべきではないと判断されたことを意味します。考えられる理由はいくつかあります。
    • 重要な生成物: index.html が、他のドキュメントやウェブサイトの基盤となる重要な出力であり、開発者が頻繁に再生成する必要がない、あるいは削除されると困るような性質のファイルである可能性。
    • 再生成コスト: index.html の再生成に時間がかかるため、開発効率を考慮して、不必要に削除しないようにした可能性。
    • 静的コンテンツとしての扱い: 生成物ではあるものの、実質的に静的なコンテンツとして扱われ、頻繁なクリーンアップの対象から外された可能性。 この変更により、make clean を実行しても doc/codelab/wiki/index.html は削除されなくなり、開発者はこのファイルをより安定して利用できるようになります。

2. src/clean.bash の変更

  • 変更前 (関連部分):
    for i in lib9 libbio libmach cmd pkg \
    	../misc/cgo/gmp ../misc/cgo/stdio \
    	../misc/cgo/life ../misc/cgo/test
    do
    	# Do not use gomake here. It may not be available.
    	rm -rf "$GOROOT"/$i
    done
    
  • 変更後 (関連部分):
    for i in lib9 libbio libmach cmd pkg \
    	../misc/cgo/gmp ../misc/cgo/stdio \
    	../misc/cgo/life ../misc/cgo/test \
    	../misc/dashboard/builder ../misc/goplay \
    	../doc/codelab/wiki
    do
    	# Do not use gomake here. It may not be available.
    	rm -rf "$GOROOT"/$i
    done
    
  • 詳細: この変更は、src/clean.bash スクリプト内の for ループに、新たに3つのディレクトリパスを追加しています。
    • ../misc/dashboard/builder
    • ../misc/goplay
    • ../doc/codelab/wiki このスクリプトは、$GOROOT(Goのインストールルートディレクトリ)を基準として、指定されたディレクトリを rm -rf コマンドで再帰的に削除します。これは、これらのディレクトリがビルド成果物、一時ファイル、キャッシュ、あるいは古いバージョンのツールなどを蓄積する可能性があり、定期的なクリーンアップが必要であると判断されたためです。 特に、../misc/dashboard/builder はビルドシステム関連、../misc/goplay はGo Playground関連、../doc/codelab/wiki はドキュメント関連のディレクトリであり、それぞれが独自のビルドプロセスや生成物を持ち得ます。これらのディレクトリをクリーンアップ対象に加えることで、Goプロジェクト全体のクリーンアップがより網羅的になり、開発環境の健全性が保たれます。

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

doc/codelab/wiki/Makefile

--- a/doc/codelab/wiki/Makefile
+++ b/doc/codelab/wiki/Makefile
@@ -8,7 +8,7 @@ all: index.html
 
 include ../../../src/Make.common
 
-CLEANFILES+=index.html srcextract.bin htmlify.bin get.bin
+CLEANFILES+=srcextract.bin htmlify.bin get.bin
 
 index.html: wiki.html srcextract.bin htmlify.bin
 	PATH=.:$$PATH awk '/^!/{system(substr($$0,2)); next} {print}' < wiki.html | tr -d '\r' > index.html

src/clean.bash

--- a/src/clean.bash
+++ b/src/clean.bash
@@ -22,6 +22,8 @@ rm -f "$GOROOT"/lib/*.a
 for i in lib9 libbio libmach cmd pkg \
 	../misc/cgo/gmp ../misc/cgo/stdio \
 	../misc/cgo/life ../misc/cgo/test \
+	../misc/dashboard/builder ../misc/goplay\
+	../doc/codelab/wiki\
 	../test/bench ../test/garbage
 do
 	# Do not use gomake here. It may not be available.

コアとなるコードの解説

doc/codelab/wiki/Makefile の変更点

この変更は、CLEANFILES という変数から index.html を削除しています。CLEANFILES は、make clean コマンドが実行された際に削除されるべきファイルやディレクトリのリストを定義するために使用されるのが一般的です。

  • 変更前: CLEANFILESindex.html が含まれていたため、make clean を実行すると index.html も削除されていました。
  • 変更後: index.htmlCLEANFILES から除外されたため、make clean を実行しても index.html は削除されなくなります。

この変更の意図は、index.htmlwiki.html から生成されるファイルであるにもかかわらず、クリーンアップ時に削除されるべきではないという判断に基づいています。これは、index.html が頻繁に再生成する必要のない重要なドキュメントの成果物であるか、あるいは再生成に時間がかかるため、開発者が手動で削除しない限り保持しておきたいという意図があると考えられます。これにより、開発者は make clean を実行しても、このドキュメントのトップページが失われることを心配する必要がなくなります。

src/clean.bash の変更点

この変更は、src/clean.bash スクリプト内の for ループのリストに、新たに3つのディレクトリパスを追加しています。このスクリプトは、Goプロジェクトの様々なディレクトリをクリーンアップするために使用されます。

  • 追加されたディレクトリ:
    • ../misc/dashboard/builder: GoプロジェクトのビルドダッシュボードやCI/CDシステムに関連する一時ファイルやビルド成果物が生成される可能性のあるディレクトリ。
    • ../misc/goplay: Go Playground(Goコードをオンラインで実行できるサービス)に関連する一時ファイルやキャッシュが生成される可能性のあるディレクトリ。
    • ../doc/codelab/wiki: GoのコードラボやWikiドキュメントに関連する生成物や一時ファイルが生成される可能性のあるディレクトリ。

この for ループは、リスト内の各ディレクトリに対して rm -rf "$GOROOT"/$i コマンドを実行します。これは、$GOROOT(Goのインストールルートディレクトリ)を基準として、指定されたディレクトリとその内容を再帰的に強制削除することを意味します。

この変更の目的は、Goプロジェクト全体のクリーンアップ範囲を拡大し、これまで見落とされていたこれらのディレクトリに蓄積される可能性のある不要なファイルやビルド成果物を確実に削除することです。これにより、開発環境のディスクスペースが節約され、潜在的なビルドの不整合が解消され、常にクリーンなビルド状態を保つことができます。

関連リンク

  • Gerrit Change-ID: https://golang.org/cl/5476050
    • Goプロジェクトが当時使用していたコードレビューシステムであるGerritにおけるこのコミットの変更セット(Change List, CL)です。詳細なレビューコメントや議論が記録されている可能性があります。

参考にした情報源リンク

  • Go言語の公式ドキュメント (当時のプロジェクト構造に関する情報)
  • Makefileの一般的な使用法と CLEANFILES 変数に関する情報
  • Bashスクリプトの for ループと rm -rf コマンドに関する情報
  • Gerritコードレビューシステムに関する一般的な情報