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

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

このコミットは、Go言語のドキュメンテーションツールであるgodocにおけるGo Playgroundへのリンクの修正に関するものです。具体的には、Go PlaygroundのURL構造の変更に対応し、godocが生成するコードスニペットの共有リンクが正しく機能するようにするための修正が行われました。

コミット

commit 9a26a7822eb54fc4d0316b4c57bf5b52124bfd92
Author: Andrew Gerrand <adg@golang.org>
Date:   Wed Feb 22 10:09:34 2012 +1100

    godoc: fix playground url
    
    R=golang-dev, gri
    CC=golang-dev
    https://golang.org/cl/5685070

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

https://github.com/golang/go/commit/9a26a7822eb54fc4d0316b4c57bf5b52124bfd92

元コミット内容

godoc: fix playground url

このコミットの目的は、godocが使用するGo PlaygroundのURLを修正することです。

変更の背景

Go言語の公式ドキュメンテーションツールであるgodocは、Goのソースコードからドキュメントを生成するだけでなく、コード例をGo Playgroundで実行・共有できる機能を提供しています。Go Playgroundは、Goのコードをブラウザ上で記述、実行、共有できるオンラインサービスであり、Go言語の学習やデモンストレーションにおいて非常に重要な役割を担っています。

このコミットが行われた2012年2月頃、Go PlaygroundのURL構造に変更があったと考えられます。以前はhttp://play.golang.org/がコードスニペットの共有に使用されていたのに対し、新しい構造ではパスに/p/が追加され、http://play.golang.org/p/の形式で共有リンクが生成されるようになりました。

このURL構造の変更に対応しないと、godocが生成するGo Playgroundへの共有リンクが正しく機能せず、ユーザーがコード例をGo Playgroundで開こうとした際にエラーが発生したり、意図しないページにリダイレクトされたりする問題が発生します。このコミットは、この問題を解決し、godocの利便性と機能性を維持するために行われました。

前提知識の解説

godoc

godocは、Go言語の公式ドキュメンテーションツールです。Goのソースコードに記述されたコメントや宣言から、自動的にドキュメントを生成します。これは、Goのコードが自己文書化されることを奨励するGoの設計思想の一部です。godocは、ローカルでドキュメントサーバーを起動することもでき、Goの標準ライブラリやプロジェクトのコードベースのドキュメントをブラウザで閲覧できます。また、コード例(Example functions)を検出し、それらをGo Playgroundで実行できるリンクを提供します。

Go Playground

Go Playgroundは、Go言語のコードをブラウザ上で記述、実行、共有できるWebサービスです。Goのコンパイラとランタイムがサーバーサイドで動作し、ユーザーが入力したコードを実行してその結果を返します。これにより、Goの環境をローカルにセットアップすることなく、手軽にGoのコードを試したり、他の人と共有したりすることが可能になります。特に、短いコードスニペットや概念実証(PoC)を共有する際に非常に便利です。

URL構造とパス

WebサイトのURLは、プロトコル(例: http://)、ホスト名(例: play.golang.org)、ポート番号(省略されることが多い)、パス(例: /p/)、クエリパラメータ、フラグメントなどから構成されます。このコミットでは、URLの「パス」の部分が変更の対象となりました。パスは、Webサーバー上の特定のリソースや機能を示すために使用されます。Go Playgroundの場合、/p/というパスは、共有されたコードスニペットを識別するための特定の形式を示唆しています。

技術的詳細

このコミットの技術的詳細は、godocがGo Playgroundへの共有リンクを生成する際に使用するJavaScriptコード内のURL文字列の修正にあります。

godocは、ブラウザ上で動作するJavaScriptを使用して、Go Playgroundとの連携を実現しています。具体的には、doc/root.htmlというファイルに含まれるJavaScriptコードが、Go PlaygroundのURLを構築し、コードスニペットを送信するための設定を持っています。

変更前のコードでは、shareRedirectという設定値が"http://play.golang.org/"となっていました。これは、Go PlaygroundのルートURLを指しており、コードスニペットを共有する際に、このルートURLに直接リダイレクトしようとしていました。

しかし、Go Playgroundの内部的なURLルーティングが変更され、共有されたコードスニペットは特定のパス(例: /p/)の下で管理されるようになりました。この変更により、以前のルートURLへのリダイレクトでは、共有されたコードが正しく表示されなくなりました。

このコミットでは、shareRedirectの値を"http://play.golang.org/p/"に変更することで、この新しいURL構造に対応しています。これにより、godocが生成する共有リンクは、Go Playgroundの正しいエンドポイントを指すようになり、ユーザーがコードスニペットを共有した際に、Go Playground上でそのコードが正しくロードされるようになります。

この修正は、クライアントサイドのJavaScript設定の変更であり、サーバーサイドのgodocのロジックやGo Playground自体のバックエンドには影響を与えません。これは、フロントエンドとバックエンドの間のインターフェース(この場合はURL構造)の変更に、フロントエンド側が追従した典型的な例と言えます。

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

変更はdoc/root.htmlファイル内のJavaScriptコードの一行に限定されています。

--- a/doc/root.html
+++ b/doc/root.html
@@ -118,7 +118,7 @@ function init() {
 		"outputEl":      "#output",
 		"runEl":         "#run",
 		"shareEl":       "#share",
-		"shareRedirect": "http://play.golang.org/"
+		"shareRedirect": "http://play.golang.org/p/"
 	});
 }

具体的には、118行目から124行目にかけてのJavaScriptオブジェクトリテラル内のshareRedirectプロパティの値が変更されています。

コアとなるコードの解説

このコードスニペットは、godocのWebインターフェースで使用されるJavaScriptのinit()関数の一部です。この関数は、ページがロードされたときに実行され、Go Playgroundとの連携に必要な設定を初期化します。

function init() {
	// ... (他の設定)
	playground({
		"outputEl":      "#output",
		"runEl":         "#run",
		"shareEl":       "#share",
		"shareRedirect": "http://play.golang.org/p/" // 変更された行
	});
}

ここで注目すべきは、playground()関数への引数として渡されているオブジェクトです。このオブジェクトは、Go Playgroundの機能(コードの実行、出力の表示、コードの共有など)を制御するための設定を含んでいます。

  • outputEl: コード実行結果を表示するHTML要素のセレクタ。
  • runEl: コード実行をトリガーするボタンのHTML要素のセレクタ。
  • shareEl: コードを共有するためのボタンのHTML要素のセレクタ。
  • shareRedirect: このコミットで変更された部分。Go Playgroundにコードを共有する際にリダイレクトされるURLのベースパスを指定します。

以前の"http://play.golang.org/"という値は、Go Playgroundのトップページを指していました。しかし、Go Playgroundが共有されたコードスニペットを処理するために/p/というパスを導入したため、このshareRedirectの値もそれに合わせて"http://play.golang.org/p/"に更新する必要がありました。

この修正により、godocがユーザーのコードをGo Playgroundに送信する際、正しいURLパスを使用してリダイレクトが行われるようになり、共有機能が再び正常に動作するようになりました。これは、Webアプリケーションにおけるフロントエンドと外部サービスの連携において、APIエンドポイントやURL構造の変更に追従することの重要性を示す良い例です。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメンテーション
  • Go Playgroundの動作に関する一般的な知識
  • Gitのコミットログと差分
  • JavaScriptの基本的な構文とWebアプリケーションにおける役割
  • Web検索によるGo PlaygroundのURL構造に関する情報 (2012年頃の変更点)
    • godoc playground url change 2012
    • golang playground /p/ url
    • go playground share url format
    • godoc doc/root.html
    • golang.org/cl/5685070 (Gerritの変更リストを直接参照し、変更の意図とレビューコメントを確認)