[インデックス 10581] ファイルの概要
このコミットは、Go言語のドキュメンテーションツールであるgodoc
が生成するHTML出力における、コード例の表示方法を改善するものです。具体的には、出力がないコード例に対して「Output:」という空のセクションが表示されてしまう問題を解決し、表示の整合性を高めています。
コミット
commit 1e5aecf6ce72fa16f9e834702d083325646108b7
Author: Volker Dobler <dr.volker.dobler@gmail.com>
Date: Fri Dec 2 09:52:31 2011 +1100
godoc: improved output of examples in html.
Fixes #2467.
Fixes #2464.
R=golang-dev, rsc, adg
CC=golang-dev
https://golang.org/cl/5447051
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/1e5aecf6ce72fa16f9e834702d083325646108b7
元コミット内容
godoc: improved output of examples in html.
Fixes #2467.
Fixes #2464.
R=golang-dev, rsc, adg
CC=golang-dev
https://golang.org/cl/5447051
変更の背景
このコミットは、godoc
ツールが生成するHTMLドキュメントにおけるコード例の表示に関する2つの既存の問題(Issue #2467 と #2464)を修正するために行われました。
特にIssue #2464は、「godoc: example with no output shows empty output box」と題されており、コード例に実際には出力がない場合でも、godoc
がHTML出力に「Output:」という見出しと空の出力ボックスを不必要に表示してしまうという問題でした。これはユーザーエクスペリエンスを損ね、ドキュメントの見た目を乱す原因となっていました。
このコミットは、このような不必要な表示を排除し、コード例の出力セクションが実際に内容を持つ場合にのみ表示されるようにすることで、godoc
のHTML出力の品質と整合性を向上させることを目的としています。また、コード例のヘッディングもより簡潔に改善されています。
前提知識の解説
Go言語のgodoc
ツール
godoc
は、Go言語のソースコードからドキュメンテーションを生成するための公式ツールです。Go言語では、コード内のコメントを特定の形式で記述することで、自動的にAPIドキュメントを生成できます。godoc
はこれらのコメントを解析し、HTML形式で整形されたドキュメントとして提供したり、コマンドラインで表示したりする機能を持っています。
特に、Example
関数(ExampleF
、ExampleT
、ExampleP
など)として記述されたコードは、godoc
によって自動的に実行され、その標準出力がドキュメントに埋め込まれます。これにより、コードの動作例を直接ドキュメント内で示すことができ、ユーザーがAPIの利用方法を理解する上で非常に役立ちます。
Go言語のテンプレートエンジン
Go言語には、HTMLやテキストを動的に生成するための強力なテンプレートエンジンが標準ライブラリとして提供されています。主にhtml/template
パッケージとtext/template
パッケージがあります。
html/template
: HTMLコンテンツを生成する際に使用され、クロスサイトスクリプティング(XSS)攻撃を防ぐための自動エスケープ機能を提供します。text/template
: 任意のテキストコンテンツを生成する際に使用されます。
これらのテンプレートは、{{.FieldName}}
のようなプレースホルダーを使用してデータ構造のフィールドにアクセスしたり、{{if .Condition}}...{{end}}
のような制御構造(条件分岐)を使用してコンテンツの表示を制御したりできます。
HTMLの構造とCSSクラス
このコミットで変更されているexample.html
は、godoc
がコード例を表示するために使用するHTMLテンプレートの一部です。HTMLはウェブページの構造を定義し、CSS(Cascading Style Sheets)はウェブページの見た目(スタイル)を定義します。
テンプレート内の<p class="exampleHeading">
や<p class="code">
、<p class="output">
といった要素は、特定のCSSクラスが適用されており、これによりgodoc
のドキュメント全体で一貫したデザインが実現されています。
技術的詳細
このコミットの技術的な核心は、Go言語のテンプレートエンジンにおける条件分岐の利用です。
変更前は、lib/godoc/example.html
テンプレート内で、コード例の出力セクションが以下のように記述されていました。
<p>Output:</p>
<p class="output"><pre>{{html .Output}}</pre></p>
ここで、{{html .Output}}
は、GoのExample
関数が標準出力に出力した内容をHTMLエスケープして表示するプレースホルダーです。しかし、Example
関数が何も出力しなかった場合でも、.Output
は空文字列となり、結果として「Output:」という見出しと空の<pre>
タグが常に表示されていました。
このコミットでは、この問題を解決するために、{{if .Output}}
という条件分岐が導入されました。
{{if .Output}}
<p>Output:</p>
<p class="output"><pre>{{html .Output}}</pre></p>
{{end}}
この変更により、.Output
フィールドに何らかのコンテンツ(つまり、空文字列ではない値)が存在する場合にのみ、「Output:」という見出しと実際の出力内容を含む<pre>
タグがHTMLにレンダリングされるようになります。.Output
が空の場合、このブロック全体がスキップされるため、不必要な「Output:」セクションが表示されることがなくなります。
また、このコミットでは、コード例のヘッディングも微調整されています。
変更前:
<p class="exampleHeading">▾ Example Code:</p>
変更後:
<p class="exampleHeading">▾ Example</p>
<p>Code:</p>
これにより、「Example Code:」という一つの見出しが、「Example」というより一般的な見出しと、その後に続く「Code:」という独立したパラグラフに分割されました。これは、ドキュメントの視覚的な階層を改善し、より読みやすくするための調整と考えられます。
コアとなるコードの変更箇所
変更はlib/godoc/example.html
ファイルのみです。
diff --git a/lib/godoc/example.html b/lib/godoc/example.html
index 8c1fd1adc6..7badbb6fad 100644
--- a/lib/godoc/example.html
+++ b/lib/godoc/example.html
@@ -3,9 +3,12 @@
<p class="exampleHeading">▹ Example</p>
</div>
<div class="expanded">
- <p class="exampleHeading">▾ Example Code:</p>
+ <p class="exampleHeading">▾ Example</p>
+ <p>Code:</p>
<p class="code"><pre>{{.Code}}</pre></p>
+ {{if .Output}}
<p>Output:</p>
<p class="output"><pre>{{html .Output}}</pre></p>
+ {{end}}
</div>
</div>
コアとなるコードの解説
このコミットの主要な変更点は以下の2つです。
-
出力セクションの条件付きレンダリング:
{{if .Output}}
と{{end}}
のブロックが追加されました。これにより、GoのExample
関数が生成する出力(.Output
)が存在する場合にのみ、<p>Output:</p>
と<p class="output"><pre>{{html .Output}}</pre></p>
の行がHTMLとしてレンダリングされます。出力がない場合は、これらの行は完全にスキップされ、空の「Output:」セクションが表示されることがなくなります。これはIssue #2464の直接的な解決策です。 -
コード例ヘッディングの変更:
<p class="exampleHeading">▾ Example Code:</p>
が、<p class="exampleHeading">▾ Example</p>
と<p>Code:</p>
に分割されました。これにより、コード例のセクションがより明確に「Example」と「Code」に区別され、視覚的な構造が改善されます。これはIssue #2467に関連する改善である可能性があります。
これらの変更は、godoc
が生成するHTMLドキュメントの品質とユーザーエクスペリエンスを向上させるための、細かではあるが重要な改善です。
関連リンク
- Go言語の
godoc
コマンドに関する公式ドキュメント: https://pkg.go.dev/cmd/godoc - Go言語の
Example
関数に関する公式ドキュメント: https://pkg.go.dev/testing#hdr-Examples - Go言語の
text/template
パッケージに関する公式ドキュメント: https://pkg.go.dev/text/template - Go言語の
html/template
パッケージに関する公式ドキュメント: https://pkg.go.dev/html/template
参考にした情報源リンク
- GitHub上のコミットページ: https://github.com/golang/go/commit/1e5aecf6ce72fa16f9e834702d083325646108b7
- Issue #2464: godoc: example with no output shows empty output box: https://github.com/golang/go/issues/2464
- Go言語のChange-Id
5447051
: https://golang.org/cl/5447051 (現在はGoのコードレビューシステムGerritへのリダイレクト)