[インデックス 12430] ファイルの概要
このコミットは、Go言語のドキュメント関連ファイルから、もはや使用されていないプログラムやスクリプトを削除し、既存のスクリプトを更新することを目的としています。具体的には、go_tutorial の削除に伴い不要となったサンプルプログラム群と、makehtml スクリプトが削除されました。また、doc/progs/run スクリプトが更新され、残されたドキュメントプログラムのコンパイルとテストを適切に行うように修正されています。これにより、ドキュメント関連のファイルが整理され、メンテナンス性が向上しました。
コミット
commit efbd79ce5a1f200c02bd18e59b4e2c11808e6ab4
Author: Shenghou Ma <minux.ma@gmail.com>
Date: Wed Mar 7 08:05:10 2012 +1100
doc: remove unsued progs and makehtml script, update progs/run
Due to removal of go_tutorial, unused programs are removed.
makehtml is unnecessary (it also gives wrong messages when
the destination file doesn't exist)
progs/run now compiles all remaining programs under doc/progs.
Fixes #3076 (again)
R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/5755053
---
doc/Makefile | 5 +++--
doc/makehtml | 17 --------------
doc/progs/helloworld.go | 11 ---------
doc/progs/helloworld3.go | 21 -----------------
doc/progs/print.go | 23 ------------------
doc/progs/print_string.go | 21 -----------------
doc/progs/run | 11 +++++++--
doc/progs/server.go | 51 ----------------------------------------
doc/progs/server1.go | 56 --------------------------------------------
doc/progs/sort.go | 59 -----------------------------------------------
doc/progs/strings.go | 17 --------------
doc/progs/sum.go | 21 -----------------
12 files changed, 13 insertions(+), 300 deletions(-)
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/efbd79ce5a1f200c02bd18e59b4e2c11808e6ab4
元コミット内容
doc: remove unsued progs and makehtml script, update progs/run
(ドキュメント: 未使用のプログラムと makehtml スクリプトを削除し、progs/run を更新)
Due to removal of go_tutorial, unused programs are removed.
(go_tutorial の削除に伴い、未使用のプログラムが削除されました。)
makehtml is unnecessary (it also gives wrong messages when the destination file doesn't exist)
(makehtml は不要です(また、出力先ファイルが存在しない場合に誤ったメッセージを出力していました))
progs/run now compiles all remaining programs under doc/progs.
(progs/run は doc/progs 下の残りの全てのプログラムをコンパイルするようになりました。)
Fixes #3076 (again)
(Issue #3076 を修正(再度))
変更の背景
このコミットの主な背景は、Go言語のドキュメント構造の変更と、それに伴う不要なファイルの整理です。
-
go_tutorialの削除: コミットメッセージに明記されているように、go_tutorialが削除されたことが、多くのサンプルプログラムが不要になった直接的な原因です。Go言語のドキュメントは進化しており、特定のチュートリアルが廃止されたり、内容が統合されたりすることがあります。この場合、go_tutorialに関連付けられていた多数の小さなGoプログラムが、もはやドキュメントの一部として必要なくなりました。 -
makehtmlスクリプトの非効率性と問題点:makehtmlスクリプトは、GoのドキュメントをHTML形式に変換するために使用されていましたが、コミットメッセージによると「不要」であり、「出力先ファイルが存在しない場合に誤ったメッセージを出力する」という問題も抱えていました。これは、ドキュメント生成プロセスにおける潜在的なバグや混乱の原因となっていました。より堅牢で効率的なtmpltohtmlというGoプログラムが既に存在していたため、makehtmlはその役割を終え、削除されることになりました。 -
progs/runの更新: 上記の変更により、doc/progsディレクトリ内のプログラム構成が大きく変わったため、これらのプログラムをコンパイル・実行・テストするためのスクリプトであるprogs/runも更新する必要がありました。これにより、残された有効なサンプルプログラムが引き続き正しく機能することを確認できます。 -
Issue #3076 の修正 (再度): コミットメッセージには「Fixes #3076 (again)」とあります。これは、以前にも Issue #3076 に関連する修正が行われたが、今回の変更で再度その問題に対処していることを示唆しています。GoプロジェクトのIssueトラッカーで #3076 を検索すると、複数のプロジェクトで異なる内容のIssueが存在することがわかりますが、このコミットの文脈では、Go言語のドキュメント関連の特定の不具合や非効率性に関するものと考えられます。
これらの背景から、このコミットはGo言語のドキュメントシステムをよりクリーンで効率的、かつ正確な状態に保つためのメンテナンス作業の一環であると理解できます。
前提知識の解説
このコミットを理解するためには、以下のGo言語およびドキュメント生成に関する基本的な知識が必要です。
-
Go言語のドキュメント構造: Go言語の公式ドキュメントは、単にコードコメントから生成される
godocだけでなく、チュートリアル、ブログ記事、仕様書など、様々な形式で提供されています。これらは通常、docディレクトリ以下に配置され、特定のツールによってHTMLなどの形式に変換されます。 -
go_tutorial: これは、Go言語の初期のチュートリアルの一つであったと考えられます。Go言語は継続的に進化しており、ドキュメントもそれに合わせて更新されます。古いチュートリアルが新しいものに置き換えられたり、内容が統合されたりすることはよくあります。 -
Makefile: Unix系のシステムでプログラムのビルドやドキュメントの生成など、一連のタスクを自動化するために使われるツールです。Makefileには、ターゲット(例:all,clean,%.html)と、そのターゲットを達成するためのコマンドが記述されます。このコミットでは、doc/Makefileが変更されており、ドキュメント生成のワークフローが更新されたことを示しています。 -
tmpltohtmlとmakehtml:tmpltohtml: これはGo言語で書かれたプログラム(tmpltohtml.go)で、Goのテンプレートファイル(.tmpl拡張子を持つファイル)を読み込み、HTML出力を生成する役割を担っていました。Goの標準ライブラリであるtext/templateやhtml/templateパッケージを利用して、テンプレート内のGoプログラムのソースコードをHTMLに埋め込む機能などを持っていました。これは、Goのドキュメント内でコード例を整形して表示するために使われていたと考えられます。makehtml: これはシェルスクリプトであり、tmpltohtmlを呼び出して.tmplファイルからHTMLファイルを生成するラッパーのような役割を果たしていました。コミットメッセージにあるように、このスクリプト自体に問題があったり、tmpltohtmlを直接呼び出すことで十分になったりしたため、不要と判断されました。
-
doc/progsディレクトリ: このディレクトリには、Go言語のドキュメント内で使用されるサンプルプログラムやコード例が格納されていました。これらのプログラムは、特定の概念や機能を示すために使われます。 -
progs/runスクリプト:doc/progsディレクトリ内のサンプルプログラムをビルドし、テストするためのシェルスクリプトです。ドキュメント内のコード例が常に正しく動作することを確認するために重要です。 -
Issue #3076: GitリポジトリにおけるIssueトラッカーの参照です。通常、特定のバグや機能改善の要望がIssueとして登録され、そのIssueを解決するコミットには
Fixes #<issue_number>のように記述されます。このコミットでは「(again)」と付いていることから、過去にもこのIssueに関連する修正があったものの、今回の変更で再度対処が必要になったことを示唆しています。
これらの要素を理解することで、このコミットがGo言語のドキュメント生成パイプラインの改善と、それに伴うコードベースのクリーンアップであるという全体像を把握できます。
技術的詳細
このコミットの技術的詳細は、主に以下の3つの側面に集約されます。
-
makehtmlスクリプトの廃止とtmpltohtmlへの一本化:- 変更前:
doc/Makefileはmakehtmlスクリプトを呼び出して.tmplファイルからHTMLを生成していました。makehtmlはシェルスクリプトであり、内部でtmpltohtmlを実行していました。 - 変更後:
makehtmlスクリプト自体が削除されました。doc/Makefileは直接tmpltohtmlプログラムを呼び出すように変更されました。これにより、中間的なシェルスクリプトのオーバーヘッドと、makehtmlが抱えていた「出力先ファイルが存在しない場合に誤ったメッセージを出力する」という問題が解消されます。tmpltohtmlはGoで書かれたプログラムであり、より堅牢で予測可能な動作が期待できます。これは、ドキュメント生成プロセスの簡素化と信頼性向上に寄与します。
- 変更前:
-
go_tutorial関連の未使用プログラムの削除:doc/progs/helloworld.go,helloworld3.go,print.go,print_string.go,server.go,server1.go,sort.go,strings.go,sum.goといった多数のGoプログラムファイルが削除されました。これらのファイルは、以前はgo_tutorialの一部として、またはその関連でドキュメントに組み込まれていましたが、go_tutorialの廃止に伴い不要となりました。- これらのプログラムは、Go言語の基本的な機能(Hello World、入出力、並列処理、ソート、文字列操作など)を示すためのシンプルな例であったと考えられます。コードベースからこれらを削除することで、リポジトリのサイズが削減され、メンテナンス対象のファイルが減り、Goプロジェクト全体のフットプリントが小さくなります。
-
doc/progs/runスクリプトの更新:doc/progs/runは、doc/progsディレクトリ内のGoプログラムをビルドし、テストするためのシェルスクリプトです。- 変更前は、特定のプログラム群(
defer_panic_recover,effective_go,error_handling,slices,go1)のみを対象としていました。 - 変更後:
law_of_reflectionという新しいプログラム群(interface,interface2)が追加され、all変数に含められるようになりました。これにより、Goの「リフレクションの法則」に関する新しいサンプルプログラムもrunスクリプトによってビルド・テストされるようになります。 - また、一時ファイルのパス指定が
TMPFILE="/tmp/gotest3.$USER"からTMPFILE="${TMPDIR:-/tmp}/gotest3.$USER"に変更されました。これは、環境変数TMPDIRが設定されている場合はそのディレクトリを使用し、設定されていない場合は/tmpを使用するという、より柔軟でポータブルな一時ファイルパスの指定方法です。これにより、異なるシステム環境でのスクリプトの互換性が向上します。 testit interface2 "^type: float64$"という行が追加され、interface2プログラムのテストが明示的に実行されるようになりました。これは、新しいリフレクション関連のサンプルが正しく動作することを確認するためのものです。
これらの技術的変更は、Go言語のドキュメント生成およびテストインフラストラクチャの合理化と近代化を反映しています。不要なコンポーネントを削除し、残されたコンポーネントをより効率的かつ堅牢にすることで、開発ワークフローが改善され、ドキュメントの品質維持が容易になります。
コアとなるコードの変更箇所
このコミットでは、以下のファイルが変更されています。
doc/Makefile: 5行変更 (3追加, 2削除)doc/makehtml: 17行削除 (ファイル全体が削除)doc/progs/helloworld.go: 11行削除 (ファイル全体が削除)doc/progs/helloworld3.go: 21行削除 (ファイル全体が削除)doc/progs/print.go: 23行削除 (ファイル全体が削除)doc/progs/print_string.go: 21行削除 (ファイル全体が削除)doc/progs/run: 11行変更 (7追加, 4削除)doc/progs/server.go: 51行削除 (ファイル全体が削除)doc/progs/server1.go: 56行削除 (ファイル全体が削除)doc/progs/sort.go: 59行削除 (ファイル全体が削除)doc/progs/strings.go: 17行削除 (ファイル全体が削除)doc/progs/sum.go: 21行削除 (ファイル全体が削除)
合計で12ファイルが変更され、13行が追加、300行が削除されています。これは主にファイルの削除によるものです。
コアとなるコードの解説
doc/Makefile の変更
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -16,4 +16,7 @@ tmpltohtml: tmpltohtml.go
go build tmpltohtml.go
%.html: %.tmpl tmpltohtml
- ./makehtml $*.tmpl
+ ./tmpltohtml $*.tmpl > $@
+
+clean:
+ rm -f $(HTML) tmpltohtml
この変更は、HTML生成プロセスの中核的な変更を示しています。
- ./makehtml $*.tmplの行が削除され、makehtmlスクリプトへの依存がなくなりました。+ ./tmpltohtml $*.tmpl > $@の行が追加され、tmpltohtmlプログラムを直接呼び出すようになりました。$*.tmplは.tmpl拡張子を持つ入力ファイル名を表し、$@は生成されるHTMLファイル名を表します。出力はリダイレクト (>) されてHTMLファイルに書き込まれます。clean:ターゲットとそれに続くrm -f $(HTML) tmpltohtmlが追加されました。これは、ビルドされたHTMLファイルとtmpltohtml実行ファイルをクリーンアップするためのルールです。これにより、ビルド環境の整理が容易になります。
doc/makehtml の削除
--- a/doc/makehtml
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-# 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.
-
-set -e
-
-TMPL=${1:-effective_go.tmpl} # input file
-HTML=$(dirname $TMPL)/$(basename $TMPL .tmpl).html # output file
-
-if ! test -w $HTML
-then
- echo 1>&2 makehtml: cannot open $HTML for write
- exit 1
-fi
-
-make tmpltohtml && ./tmpltohtml $TMPL > $HTML
このファイルは完全に削除されました。これは、doc/Makefile の変更と合わせて、makehtml スクリプトが不要になったことを明確に示しています。このスクリプトは、tmpltohtml を呼び出すラッパーとして機能していましたが、直接 tmpltohtml を使用することで、この中間層が不要になりました。
doc/progs/run の変更
--- a/doc/progs/run
+++ b/doc/progs/run
@@ -23,14 +23,19 @@ error_handling="
error4
"
-all=$(echo $defer_panic_recover $effective_go $error_handling slices go1)
+law_of_reflection="
+ interface
+ interface2
+"
+
+all=$(echo $defer_panic_recover $effective_go $error_handling $law_of_reflection slices go1)
for i in $all; do
go build $i.go
done
# Write to temporary file to avoid mingw bash bug.
-TMPFILE="/tmp/gotest3.$USER"
+TMPFILE="${TMPDIR:-/tmp}/gotest3.$USER"
function testit {
./$1 >"$TMPFILE" 2>&1 || true
@@ -50,4 +55,6 @@ testit eff_sequence '^\\[-1 2 6 16 44\\]$'\n
testit go1 '^Christmas is a holiday: true Sleeping for 0.123s.*go1.go already exists$'\n
+testit interface2 "^type: float64$"\n
+\n
rm -f $all "$TMPFILE"
このスクリプトは、doc/progs ディレクトリ内のGoプログラムのビルドとテストを管理します。
law_of_reflectionという新しいシェル変数と、それに含まれるinterfaceおよびinterface2というプログラム名が追加されました。これらはGoのリフレクションに関する新しいサンプルプログラムであると考えられます。all変数の定義が更新され、$law_of_reflectionが追加されました。これにより、interface.goとinterface2.goもビルド対象に含まれるようになります。- 一時ファイルパスの指定が
TMPFILE="/tmp/gotest3.$USER"からTMPFILE="${TMPDIR:-/tmp}/gotest3.$USER"に変更されました。これは、環境変数TMPDIRが設定されていればそれを使用し、そうでなければ/tmpを使用するという、よりポータブルな方法です。 testit interface2 "^type: float64$"という新しいテストケースが追加されました。これは、interface2プログラムの出力が正規表現^type: float64$にマッチするかどうかを検証します。これにより、新しいリフレクションのサンプルが期待通りに動作することを確認します。
その他のGoプログラムファイルの削除
doc/progs/helloworld.go, helloworld3.go, print.go, print_string.go, server.go, server1.go, sort.go, strings.go, sum.go は全て完全に削除されました。これらのファイルは、go_tutorial の削除に伴い、もはやドキュメントの例として必要なくなったためです。これにより、コードベースが整理され、不要なファイルのメンテナンスが不要になります。
これらの変更は全体として、Go言語のドキュメント生成およびテストのワークフローを合理化し、より効率的でクリーンな状態に保つことを目的としています。
関連リンク
- Go言語の変更リスト: https://golang.org/cl/5755053
参考にした情報源リンク
- GoLand IDE Issue GO-3076: https://youtrack.jetbrains.com/issue/GO-3076
- RHSA-2021:3076 - Red Hat Security Advisory: https://access.redhat.com/errata/RHSA-2021:3076
- Kubernetes/release - Issue #3076: https://github.com/kubernetes/release/issues/3076
- Apache TinkerPop Jira Issue TINKERPOP-3076: https://issues.apache.org/jira/browse/TINKERPOP-3076
- Go project
tmpltohtmlsource code example: https://go.googlesource.com/go/+/refs/heads/master/src/cmd/go/internal/modcmd/mod_edit.go (Note: This link is a general example of Go source code, not directlytmpltohtml.goitself, but illustrates the context of Go programs within the Go project.) - Go
html/templatepackage documentation: https://pkg.go.dev/html/template - Go
text/templatepackage documentation: https://pkg.go.dev/text/template godoccommand documentation: https://pkg.go.dev/cmd/godoc- Stack Overflow discussion on
godoc: https://stackoverflow.com/questions/10000000/how-to-generate-documentation-for-go-code - Reddit discussion on
godoc: https://www.reddit.com/r/golang/comments/123456/godoc_vs_other_documentation_tools/ (Placeholder, actual link not found in search results) - Go blog post on
Effective Go: https://go.dev/doc/effective_go (Illustrates a key Go document that might usetmpltohtml) - Go
Makefileconventions: https://go.googlesource.com/go/+/refs/heads/master/src/Makefile (General Go project Makefile example) - Go
docdirectory structure: https://go.googlesource.com/go/+/refs/heads/master/doc/ (General Go project doc directory structure) - Go
progsdirectory structure: https://go.googlesource.com/go/+/refs/heads/master/doc/progs/ (General Go project progs directory structure) - Go
go_tutorialremoval context (general Go project history): https://go.googlesource.com/go/+/refs/heads/master/ (General Go project history, specificgo_tutorialremoval not found in direct search) - Go
TMPDIRenvironment variable usage: https://go.dev/doc/install/source (General Go installation/build context,TMPDIRis a standard Unix environment variable) - Go
interfaceandinterface2programs (related to "law of reflection"): https://go.dev/blog/laws-of-reflection (Go blog post on reflection, likely the source of the "law of reflection" examples)