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

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

このコミットは、Go言語の初期開発段階において、コード整形ツール(pretty)のテストスクリプトから特定のファイル bug118.go を一時的に除外する変更を記録しています。これは、bug118.gopretty ツールに問題を引き起こしていたため、テストプロセスを継続できるようにするための暫定的な措置でした。

コミット

  • コミットハッシュ: 11a3f759fd2ac22c991e3a90efd02cd36d4875ec
  • Author: Robert Griesemer gri@golang.org
  • Date: Wed Nov 5 15:55:51 2008 -0800

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

https://github.com/golang/go/commit/11a3f759fd2ac22c991e3a90efd02cd36d4875ec

元コミット内容

    - temporarily excluding bug118.go, causing pretty trouble
    
    R=r
    OCL=18602
    CL=18602

変更の背景

このコミットが行われた2008年11月は、Go言語がまだGoogle社内で活発に開発されており、一般公開される前の非常に初期の段階でした。当時のGo言語には、現在の go fmt に相当するコード整形ツールが存在し、それが pretty と呼ばれていたと考えられます。

コミットメッセージにある「causing pretty trouble」という記述は、bug118.go というファイルが、この pretty ツールで処理する際に何らかの問題(例えば、パースエラー、予期せぬ出力、クラッシュなど)を引き起こしていたことを示唆しています。開発者は、この問題の根本原因を解決するまでの間、テストスイートの実行を妨げないように、一時的に bug118.go をテスト対象から除外する必要がありました。これは、開発のイテレーションをスムーズに進めるための一般的なプラクティスです。

OCL=18602 および CL=18602 は、Google社内で使用されていたPerforceなどのバージョン管理システムにおけるチェンジリスト番号(Change List number)を指します。これは、Go言語がオープンソースとして公開される前に、Googleの内部インフラで開発されていた名残です。

前提知識の解説

Go言語の初期開発とコード整形ツール

Go言語は、その設計思想の一つとして「強制的なコードフォーマット」を掲げています。これは、go fmt というツールによって実現されており、Goのソースコードを標準的なスタイルに自動的に整形します。これにより、コードの可読性が向上し、スタイルに関する議論の時間を削減できます。このコミットが行われた時期は、go fmt の前身となる pretty と呼ばれるツールが開発・使用されていたと考えられます。

シェルスクリプト (test.sh)

test.sh は、Unix/Linux環境でテストを実行するために使用されるシェルスクリプトです。シェルスクリプトは、一連のコマンドを記述し、自動的に実行するために用いられます。このスクリプトでは、Goのソースファイルを pretty ツールで処理し、その結果を検証するようなテストフローが組まれていたと推測されます。

case 文とファイル除外

シェルスクリプトにおける case 文は、特定の文字列(この場合はファイル名)が複数のパターン(selftest1.go | func3.go | ...)のいずれかに一致するかどうかを評価し、一致したパターンに対応するコマンドを実行します。このコミットでは、bug118.go を既存の「スキップリスト」に追加することで、pretty ツールによる処理を回避させています。

diff コマンド

diff コマンドは、2つのファイルまたはディレクトリの内容を比較し、その差分を表示するUnix/Linuxのユーティリティです。Gitでは、コミット間の変更内容を diff 形式で表示します。

  • --- a/usr/gri/pretty/test.sh: 変更前のファイルパス
  • +++ b/usr/gri/pretty/test.sh: 変更後のファイルパス
  • @@ -22,7 +22,7 @@: 変更が行われた行範囲を示します。-22,7 は変更前のファイルで22行目から7行、+22,7 は変更後のファイルで22行目から7行を示します。
  • - で始まる行は削除された行、+ で始まる行は追加された行を示します。

技術的詳細

変更は usr/gri/pretty/test.sh というシェルスクリプトに対して行われています。このスクリプトは、pretty ツールがGoのソースファイルを正しく処理できるかを検証するためのテストハーネスの一部であると考えられます。

スクリプト内の apply1() 関数は、おそらく個々のGoファイルを pretty ツールに適用し、その結果を評価する役割を担っています。この関数内で、case 文が使用されており、特定のファイル名が「構文エラーを含むためスキップするファイル」のリストに含まれているかどうかをチェックしています。

元のコードでは、以下のファイルがスキップ対象でした: selftest1.go | func3.go | bug014.go | bug029.go | bug032.go | bug050.go | bug068.go | bug088.go | bug083.go | bug106.go

このコミットによって、bug118.go がこのリストに追加されました。これにより、test.sh が実行される際に bug118.gopretty ツールによる処理をスキップし、テストスイート全体が bug118.go の問題に影響されずに完了できるようになります。

この変更は、pretty ツール自体のバグ修正ではなく、そのツールが特定の入力(bug118.go)で問題を起こすことを回避するためのワークアラウンドです。これは、開発の初期段階でよく見られるアプローチであり、主要な開発フローをブロックしないようにするための実用的な解決策です。

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

--- a/usr/gri/pretty/test.sh
+++ b/usr/gri/pretty/test.sh
@@ -22,7 +22,7 @@ apply1() {
 	#echo $1 $2
 	case `basename $F` in
 	selftest1.go | func3.go | bug014.go | bug029.go | bug032.go | bug050.go | \
-	bug068.go | bug088.go | bug083.go | bug106.go ) ;;  # skip - files contain syntax errors
+	bug068.go | bug088.go | bug083.go | bug106.go | bug118.go ) ;;  # skip - files contain syntax errors
 	* ) $1 $2; count ;;\
 	esac
 }

コアとなるコードの解説

変更は usr/gri/pretty/test.sh ファイルの23行目(変更前)/23行目(変更後)にあります。

元の行: bug068.go | bug088.go | bug083.go | bug106.go ) ;; # skip - files contain syntax errors

変更後の行: bug068.go | bug088.go | bug083.go | bug106.go | bug118.go ) ;; # skip - files contain syntax errors

この変更は、case 文のパターンマッチングリストに bug118.go を追加しています。これにより、test.sh スクリプトが bug118.go を処理しようとした際に、この case パターンに一致し、# skip - files contain syntax errors というコメントが示すように、pretty ツールによる処理がスキップされるようになります。

コメントは「ファイルが構文エラーを含んでいるためスキップする」とありますが、これは必ずしも bug118.go 自体が構文エラーを含んでいることを意味するわけではありません。むしろ、pretty ツールがそのファイルを正しくパースまたは整形できない、あるいはそのファイルが pretty ツールのバグをトリガーするという意味合いが強いと考えられます。

関連リンク

このコミットはGo言語の非常に初期の内部開発段階のものであり、特定の公開されたIssueやPull Requestに直接関連するものではない可能性が高いです。しかし、Go言語のコード整形ツール go fmt の歴史や設計思想については、以下のリンクが参考になります。

  • Go Blog: Go fmt - go fmt の哲学と利点について解説されています。
  • Go Wiki: CodeReviewComments#gofmt - go fmt の重要性について言及されています。

参考にした情報源リンク

  • Git commit 11a3f759fd2ac22c991e3a90efd02cd36d4875ec on GitHub: https://github.com/golang/go/commit/11a3f759fd2ac22c991e3a90efd02cd36d4875ec
  • Go言語の歴史に関する一般的な知識
  • シェルスクリプトの case 文に関する一般的な知識
  • diff コマンドに関する一般的な知識
  • Google内部のチェンジリスト番号(CL/OCL)に関する一般的な知識 (Go言語の初期開発がGoogle内部で行われていた背景)