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

[インデックス 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/re2https://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.htmldoc/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ファイルを生成するためのテンプレートファイルであると考えられます。両方を修正することで、ドキュメントの直接的な表示と、将来的なドキュメント生成の両方で正しいリンクが使用されることが保証されます。

関連リンク

参考にした情報源リンク

  • コミット情報: /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の歴史に関する情報