[インデックス 12240] ファイルの概要
このコミットは、Go言語の公式ドキュメントである doc/go1.html
および doc/go1.tmpl
内の壊れたリンクを修正するものです。具体的には、正規表現エンジンRE2へのリンクが code.google.com/p/re2
から http://code.google.com/p/re2/
へと変更され、プロトコル指定が追加されています。
コミット
commit 4fae9f794331eecc6106269f27b063aa060a5bfa
Author: Stefan Nilsson <snilsson@nada.kth.se>
Date: Tue Feb 28 09:22:55 2012 +1100
doc/go1: fix broken link
R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5695072
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/4fae9f794331eecc6106269f27b063aa060a5bfa
元コミット内容
doc/go1: fix broken link
R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5695072
変更の背景
このコミットの背景には、Go言語のドキュメントにおけるリンクの正確性の維持があります。Go 1のリリースノートまたは関連ドキュメント (doc/go1.html
および doc/go1.tmpl
) 内で、正規表現パッケージ regexp
の基盤となっているRE2エンジンへの参照リンクが正しく機能していなかったと考えられます。
当時のWebブラウザやHTTPプロトコルの解釈によっては、http://
や https://
といったスキーム(プロトコル)が明示されていないURL(いわゆる「スキームレスURL」や「プロトコル相対URL」)が正しく解決されない、あるいは意図しないプロトコルでアクセスされてしまうケースがありました。特に、code.google.com
のような特定のプラットフォームでは、スキームが省略された場合にリダイレクトが正しく機能しない、またはセキュリティ上の理由からアクセスが拒否される可能性がありました。
このコミットは、ユーザーがドキュメントからRE2のプロジェクトページにスムーズにアクセスできるように、リンクに明示的に http://
スキームを追加することで、リンク切れを解消し、ドキュメントのユーザビリティを向上させることを目的としています。
前提知識の解説
Go言語の regexp
パッケージとRE2
Go言語の標準ライブラリには、正規表現を扱うための regexp
パッケージが含まれています。このパッケージは、Googleが開発した高性能な正規表現エンジンであるRE2("Regular Expression 2")に基づいています。
- RE2: RE2は、線形時間(入力文字列の長さに比例する時間)で動作することを保証する正規表現エンジンです。これは、バックトラッキングを多用するPerl互換正規表現エンジン(PCRE)などとは異なり、最悪の場合の性能が非常に優れているという特徴があります。RE2は、正規表現の複雑さに関わらず、常に高速なマッチングを提供するため、セキュリティや性能が重要な場面で特に有用です。Go言語がRE2を採用しているのは、その堅牢性と予測可能な性能のためです。
HTMLにおけるハイパーリンク (<a>
タグ)
HTMLの <a>
(アンカー) タグは、他のWebページ、ファイル、または同じページ内の特定の部分へのハイパーリンクを作成するために使用されます。href
属性は、リンク先のURLを指定します。
- 絶対URL:
http://example.com/page.html
のように、プロトコル(http://
やhttps://
)、ドメイン名、パスなど、リソースの完全な場所を指定するURLです。 - 相対URL: 現在のドキュメントからの相対的な位置でリソースを指定するURLです。例えば、
/images/logo.png
は現在のドメインのルートからの相対パスを示します。 - スキームレスURL (プロトコル相対URL):
//example.com/page.html
のように、プロトコル部分を省略し、現在のページのプロトコル(HTTPまたはHTTPS)を継承するURLです。これは、HTTPとHTTPSの両方でコンテンツを提供する場合に便利ですが、今回のケースのようにドメイン名のみが記述されている場合は、ブラウザの解釈に依存する可能性がありました。
code.google.com/p/re2
code.google.com
は、かつてGoogleが提供していたオープンソースプロジェクトのホスティングサービス「Google Code」のドメインです。多くのオープンソースプロジェクトがここでホストされていましたが、2015年にサービスが終了し、プロジェクトはGitHubなどの他のプラットフォームに移行されました。このコミットが行われた2012年当時は、RE2プロジェクトが code.google.com/p/re2
でホストされていたため、このURLが使用されていました。
技術的詳細
このコミットの技術的詳細は、HTMLドキュメント内のハイパーリンクの記述方法と、それがWebブラウザによってどのように解釈されるかという点に集約されます。
変更前は、RE2へのリンクが <a href="code.google.com/p/re2">RE2</a>
と記述されていました。この形式は、厳密には有効な絶対URLではありません。Webブラウザは通常、href
属性の値が http://
や https://
で始まっていない場合、それを相対URLとして解釈しようとします。
例えば、現在のページが https://go.dev/doc/go1.html
であった場合、ブラウザは code.google.com/p/re2
を https://go.dev/doc/code.google.com/p/re2
のような相対パスとして解決しようとする可能性があります。これは明らかに意図したRE2のプロジェクトページとは異なるURLになります。
あるいは、一部のブラウザや古いブラウザでは、スキームが省略されたドメイン名のみの記述を、現在のページのプロトコルを継承したスキームレスURLとして解釈する試みを行うこともありますが、この挙動は一貫性がなく、特に http://
や https://
が明示されていない場合は、リンク切れの原因となりやすかったのです。
このコミットでは、リンクを <a href="http://code.google.com/p/re2/">RE2</a>
に修正しています。これにより、明示的に http://
プロトコルが指定され、ブラウザはこれを絶対URLとして正しく解釈し、RE2のプロジェクトページへ直接ナビゲートできるようになります。この修正は、ドキュメントの正確性とユーザビリティを確保するための、シンプルながらも重要な変更です。
コアとなるコードの変更箇所
変更は doc/go1.html
と doc/go1.tmpl
の2つのファイルで行われています。両ファイルで同じ行が修正されています。
--- a/doc/go1.html
+++ b/doc/go1.html
@@ -1786,7 +1786,7 @@ The compiler will catch code using the old interface.
The <a href="/pkg/regexp/"><code>regexp</code></a> package has been rewritten.
It has the same interface but the specification of the regular expressions
it supports has changed from the old "egrep" form to that of
-<a href="code.google.com/p/re2">RE2</a>.
+<a href="http://code.google.com/p/re2/">RE2</a>.
</p>
<p>
--- a/doc/go1.tmpl
+++ b/doc/go1.tmpl
@@ -1671,7 +1671,7 @@ The compiler will catch code using the old interface.
The <a href="/pkg/regexp/"><code>regexp</code></a> package has been rewritten.
It has the same interface but the specification of the regular expressions
it supports has changed from the old "egrep" form to that of
-<a href="code.google.com/p/re2">RE2</a>.
+<a href="http://code.google.com/p/re2/">RE2</a>.
</p>
<p>
コアとなるコードの解説
上記のdiffが示すように、変更は非常に単純です。
- 変更前:
<a href="code.google.com/p/re2">RE2</a>
- 変更後:
<a href="http://code.google.com/p/re2/">RE2</a>
この変更の核心は、href
属性の値に http://
というプロトコルスキームを明示的に追加したことです。これにより、ブラウザは code.google.com/p/re2/
を絶対URLとして認識し、現在のページのコンテキストに依存することなく、指定されたWebサイトに直接アクセスできるようになります。末尾のスラッシュ /
も追加されていますが、これは通常、ディレクトリを示すURLの慣習であり、リンクの機能には直接影響しませんが、より完全なURL形式となります。
doc/go1.html
はGo 1のリリースノートまたは関連ドキュメントのHTMLファイルであり、doc/go1.tmpl
はそのHTMLファイルを生成するためのテンプレートファイルであると考えられます。両方を修正することで、ドキュメントの直接的な表示と、将来的なドキュメント生成の両方で正しいリンクが使用されることが保証されます。
関連リンク
- Go言語の正規表現パッケージ
regexp
のドキュメント: https://pkg.go.dev/regexp - RE2プロジェクト(現在のGitHubリポジトリ): https://github.com/google/re2
- Google Codeの閉鎖に関する情報(参考): https://developers.google.com/open-source/google-code-archive/
参考にした情報源リンク
- コミット情報:
/home/orange/Project/comemo/commit_data/12240.txt
- GitHubコミットページ: https://github.com/golang/go/commit/4fae9f794331eecc6106269f27b063aa060a5bfa
- HTML
<a>
タグとhref
属性に関する一般的なWeb開発ドキュメント(例: MDN Web Docs) - RE2正規表現エンジンに関する情報(例: RE2の公式ドキュメントや関連する技術記事)
- Google Codeの歴史に関する情報