[インデックス 11129] ファイルの概要
このコミットは、Goプロジェクトのダッシュボードアプリケーションにおいて、使用するドメイン名を動的に取得する appengine.DefaultVersionHostname
から、明示的に build.golang.org
に変更するものです。これにより、ダッシュボードが生成するURLやメール通知のホスト名が常に build.golang.org
となるように統一されます。
コミット
commit eb9432706803566bcf6e42fef75902fe1d80b862
Author: Rob Pike <r@golang.org>
Date: Thu Jan 12 10:42:39 2012 -0800
dashboard: use build.golang.org as the domain
The domain returned by appengine.DefaultVersionHostname
isn't the one we want.
This change has been uploaded to build.golang.org
R=golang-dev, rsc, r
CC=golang-dev
https://golang.org/cl/5539043
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/eb9432706803566bcf6e42fef75902fe1d80b862
元コミット内容
dashboard: use build.golang.org as the domain
The domain returned by appengine.DefaultVersionHostname
isn't the one we want.
This change has been uploaded to build.golang.org
R=golang-dev, rsc, r
CC=golang-dev
https://golang.org/cl/5539043
変更の背景
この変更の背景には、GoプロジェクトのビルドダッシュボードがGoogle App Engine上で動作しており、そのアプリケーションが自身のホスト名を動的に取得するために appengine.DefaultVersionHostname
関数を使用していたという事情があります。しかし、この関数が返すドメイン名が、ダッシュボードの運用上意図するものではなかったため、明示的に build.golang.org
という特定のドメインを使用するように修正する必要が生じました。
具体的には、ダッシュボードが生成するメール通知内のリンクや、内部的なテストリクエストのURLにおいて、常に build.golang.org
をホスト名として使用することが求められていました。appengine.DefaultVersionHostname
は、App Engineのデプロイ環境やバージョンによって異なるホスト名を返す可能性があり、これが意図しないURLの生成につながる恐れがあったため、固定のドメインに切り替えることで一貫性と信頼性を確保する目的がありました。
前提知識の解説
Google App Engine (GAE)
Google App Engineは、Googleが提供するPlatform as a Service (PaaS) であり、開発者がインフラストストラクチャの管理を気にすることなく、スケーラブルなウェブアプリケーションやモバイルバックエンドを構築・デプロイできるクラウドコンピューティングプラットフォームです。Go言語もサポートされており、GoアプリケーションをGAE上で実行することが可能です。GAEアプリケーションは、特定のドメイン名で公開され、そのドメインはアプリケーションのバージョンや設定によって異なります。
appengine.DefaultVersionHostname
関数
appengine.DefaultVersionHostname
は、Google App EngineのGo SDKで提供される関数の一つです。この関数は、現在のアプリケーションのデフォルトバージョンに割り当てられているホスト名を返します。通常、これは [アプリケーションID].appspot.com
のような形式のドメイン名、またはカスタムドメインが設定されている場合はそのドメイン名になります。この関数は、アプリケーションが自身のURLを構築する際に、実行環境のホスト名を動的に取得するために使用されます。
Go ダッシュボード
Goダッシュボード(build.golang.org
)は、Goプロジェクトの公式なビルドおよびテストの状態を監視するためのウェブアプリケーションです。様々なプラットフォームやアーキテクチャでのGoのビルドとテストの結果を集約し、開発者がGoの変更が各環境に与える影響を迅速に確認できるようにします。このダッシュボードは、Goプロジェクトの継続的インテグレーション/継続的デリバリー (CI/CD) パイプラインの重要な一部です。
ドメイン名とURLの構築
ウェブアプリケーションが外部に公開される際、そのアプリケーションへのアクセスは特定のドメイン名(例: example.com
)を介して行われます。アプリケーション内部で他のリソースへのリンクを生成したり、外部サービスにリクエストを送信したりする場合、そのURLのホスト名部分を正しく設定する必要があります。動的にホスト名を取得する方法(例: appengine.DefaultVersionHostname
)は柔軟性がありますが、特定の運用要件(例: 常に特定の公開ドメインを使用する)がある場合には、固定のドメイン名を指定する方が望ましい場合があります。
技術的詳細
このコミットは、Goダッシュボードアプリケーションが使用するホスト名の取得方法を変更するものです。以前は、Google App EngineのAPIである appengine.DefaultVersionHostname(c)
を呼び出して、実行中のアプリケーションのデフォルトホスト名を取得していました。しかし、このコミットでは、この動的なホスト名取得を廃止し、代わりに build.golang.org
という固定の文字列をドメインとして使用するように変更しています。
この変更は、主に以下の2つのファイルに影響を与えています。
misc/dashboard/app/build/notify.go
: ビルドの失敗時に開発者へメール通知を送信するロジックが含まれています。このメールの本文中に、失敗したビルドの詳細ページへのリンクが含まれる場合、そのリンクのホスト名がappengine.DefaultVersionHostname
から取得されていました。変更後は、このホスト名がbuild.golang.org
に固定されます。misc/dashboard/app/build/test.go
: 内部的なテストリクエストを構築する際に、リクエスト先のURLのホスト名としてappengine.DefaultVersionHostname
を使用していました。変更後は、ここでもbuild.golang.org
が使用されます。
変更の実装としては、notify.go
ファイル内に const domain = "build.golang.org"
という新しい定数を定義し、既存の appengine.DefaultVersionHostname(c)
の呼び出しをこの domain
定数に置き換える形で行われています。これにより、アプリケーション全体で一貫して build.golang.org
がホスト名として使用されるようになります。
コアとなるコードの変更箇所
misc/dashboard/app/build/notify.go
--- a/misc/dashboard/app/build/notify.go
+++ b/misc/dashboard/app/build/notify.go
@@ -19,6 +19,7 @@ import (
const (
mailFrom = "builder@golang.org" // use this for sending any mail
failMailTo = "golang-dev@googlegroups.com"
+ domain = "build.golang.org"
)
// notifyOnFailure checks whether the supplied Commit or the subsequent
@@ -127,7 +128,7 @@ func sendFailMail(c appengine.Context, com *Commit, builder string) {
var body bytes.Buffer
err := sendFailMailTmpl.Execute(&body, map[string]interface{}{
"Builder": builder, "Commit": com, "Result": r, "Log": l,
- "Hostname": appengine.DefaultVersionHostname(c),
+ "Hostname": domain,
})
if err != nil {
c.Errorf("rendering mail template: %v", err)
misc/dashboard/app/build/test.go
--- a/misc/dashboard/app/build/test.go
+++ b/misc/dashboard/app/build/test.go
@@ -146,7 +146,7 @@ func testHandler(w http.ResponseWriter, r *http.Request) {
body = new(bytes.Buffer)
json.NewEncoder(body).Encode(t.req)
}
- url := "http://" + appengine.DefaultVersionHostname(c) + t.path
+ url := "http://" + domain + t.path
if t.vals != nil {
url += "?" + t.vals.Encode()
}
コアとなるコードの解説
misc/dashboard/app/build/notify.go
の変更
このファイルでは、ビルド失敗時の通知メールを送信する sendFailMail
関数が変更されています。
-
定数
domain
の追加:const ( mailFrom = "builder@golang.org" failMailTo = "golang-dev@googlegroups.com" domain = "build.golang.org" // 新しく追加された行 )
mailFrom
やfailMailTo
と同様に、build.golang.org
という文字列がdomain
という定数として定義されました。これにより、このドメイン名を複数の場所で再利用し、変更があった場合の一元管理が可能になります。 -
Hostname
の置き換え:// 変更前 "Hostname": appengine.DefaultVersionHostname(c), // 変更後 "Hostname": domain, // appengine.DefaultVersionHostname(c) が domain に置き換えられた
sendFailMailTmpl.Execute
関数に渡されるマップのHostname
キーの値が、appengine.DefaultVersionHostname(c)
の動的な呼び出しから、新しく定義されたdomain
定数に置き換えられました。これにより、メールテンプレート内で使用されるホスト名が常にbuild.golang.org
となります。
misc/dashboard/app/build/test.go
の変更
このファイルでは、テストリクエストのURLを構築する部分が変更されています。
- URL構築における
domain
の使用:
テストリクエストのURLを生成する際に、ホスト名部分が// 変更前 url := "http://" + appengine.DefaultVersionHostname(c) + t.path // 変更後 url := "http://" + domain + t.path // appengine.DefaultVersionHostname(c) が domain に置き換えられた
appengine.DefaultVersionHostname(c)
からdomain
定数に置き換えられました。これにより、内部的なテストリクエストもbuild.golang.org
をホスト名として使用するようになります。
これらの変更により、Goダッシュボードアプリケーションは、その外部に公開されるURL(メール通知など)や内部的な通信において、常に build.golang.org
という意図されたドメイン名を使用するようになり、運用上の一貫性と信頼性が向上しました。
関連リンク
- Go CL (Change List) 5539043: https://golang.org/cl/5539043
参考にした情報源リンク
- Google App Engine (公式ドキュメント): https://cloud.google.com/appengine/docs
- Go App Engine SDK (当時のドキュメントに基づく情報):
appengine.DefaultVersionHostname
の挙動に関する一般的な理解。 - Go Build Dashboard: https://build.golang.org/I have generated the detailed explanation based on the commit data and the specified structure. I have also incorporated explanations for
Google App Engine
andappengine.DefaultVersionHostname
as prerequisite knowledge.
The output is in Markdown format and is sent to standard output as requested.# [インデックス 11129] ファイルの概要
このコミットは、Goプロジェクトのダッシュボードアプリケーションにおいて、使用するドメイン名を動的に取得する appengine.DefaultVersionHostname
から、明示的に build.golang.org
に変更するものです。これにより、ダッシュボードが生成するURLやメール通知のホスト名が常に build.golang.org
となるように統一されます。
コミット
commit eb9432706803566bcf6e42fef75902fe1d80b862
Author: Rob Pike <r@golang.org>
Date: Thu Jan 12 10:42:39 2012 -0800
dashboard: use build.golang.org as the domain
The domain returned by appengine.DefaultVersionHostname
isn't the one we want.
This change has been uploaded to build.golang.org
R=golang-dev, rsc, r
CC=golang-dev
https://golang.org/cl/5539043
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/eb9432706803566bcf6e42fef75902fe1d80b862
元コミット内容
dashboard: use build.golang.org as the domain
The domain returned by appengine.DefaultVersionHostname
isn't the one we want.
This change has been uploaded to build.golang.org
R=golang-dev, rsc, r
CC=golang-dev
https://golang.org/cl/5539043
変更の背景
この変更の背景には、GoプロジェクトのビルドダッシュボードがGoogle App Engine上で動作しており、そのアプリケーションが自身のホスト名を動的に取得するために appengine.DefaultVersionHostname
関数を使用していたという事情があります。しかし、この関数が返すドメイン名が、ダッシュボードの運用上意図するものではなかったため、明示的に build.golang.org
という特定のドメインを使用するように修正する必要が生じました。
具体的には、ダッシュボードが生成するメール通知内のリンクや、内部的なテストリクエストのURLにおいて、常に build.golang.org
をホスト名として使用することが求められていました。appengine.DefaultVersionHostname
は、App Engineのデプロイ環境やバージョンによって異なるホスト名を返す可能性があり、これが意図しないURLの生成につながる恐れがあったため、固定のドメインに切り替えることで一貫性と信頼性を確保する目的がありました。
前提知識の解説
Google App Engine (GAE)
Google App Engineは、Googleが提供するPlatform as a Service (PaaS) であり、開発者がインフラストラクチャの管理を気にすることなく、スケーラブルなウェブアプリケーションやモバイルバックエンドを構築・デプロイできるクラウドコンピューティングプラットフォームです。Go言語もサポートされており、GoアプリケーションをGAE上で実行することが可能です。GAEアプリケーションは、特定のドメイン名で公開され、そのドメインはアプリケーションのバージョンや設定によって異なります。
appengine.DefaultVersionHostname
関数
appengine.DefaultVersionHostname
は、Google App EngineのGo SDKで提供される関数の一つです。この関数は、現在のアプリケーションのデフォルトバージョンに割り当てられているホスト名を返します。通常、これは [アプリケーションID].appspot.com
のような形式のドメイン名、またはカスタムドメインが設定されている場合はそのドメイン名になります。この関数は、アプリケーションが自身のURLを構築する際に、実行環境のホスト名を動的に取得するために使用されます。
Go ダッシュボード
Goダッシュボード(build.golang.org
)は、Goプロジェクトの公式なビルドおよびテストの状態を監視するためのウェブアプリケーションです。様々なプラットフォームやアーキテクチャでのGoのビルドとテストの結果を集約し、開発者がGoの変更が各環境に与える影響を迅速に確認できるようにします。このダッシュボードは、Goプロジェクトの継続的インテグレーション/継続的デリバリー (CI/CD) パイプラインの重要な一部です。
ドメイン名とURLの構築
ウェブアプリケーションが外部に公開される際、そのアプリケーションへのアクセスは特定のドメイン名(例: example.com
)を介して行われます。アプリケーション内部で他のリソースへのリンクを生成したり、外部サービスにリクエストを送信したりする場合、そのURLのホスト名部分を正しく設定する必要があります。動的にホスト名を取得する方法(例: appengine.DefaultVersionHostname
)は柔軟性がありますが、特定の運用要件(例: 常に特定の公開ドメインを使用する)がある場合には、固定のドメイン名を指定する方が望ましい場合があります。
技術的詳細
このコミットは、Goダッシュボードアプリケーションが使用するホスト名の取得方法を変更するものです。以前は、Google App EngineのAPIである appengine.DefaultVersionHostname(c)
を呼び出して、実行中のアプリケーションのデフォルトホスト名を取得していました。しかし、このコミットでは、この動的なホスト名取得を廃止し、代わりに build.golang.org
という固定の文字列をドメインとして使用するように変更しています。
この変更は、主に以下の2つのファイルに影響を与えています。
misc/dashboard/app/build/notify.go
: ビルドの失敗時に開発者へメール通知を送信するロジックが含まれています。このメールの本文中に、失敗したビルドの詳細ページへのリンクが含まれる場合、そのリンクのホスト名がappengine.DefaultVersionHostname
から取得されていました。変更後は、このホスト名がbuild.golang.org
に固定されます。misc/dashboard/app/build/test.go
: 内部的なテストリクエストを構築する際に、リクエスト先のURLのホスト名としてappengine.DefaultVersionHostname
を使用していました。変更後は、ここでもbuild.golang.org
が使用されます。
変更の実装としては、notify.go
ファイル内に const domain = "build.golang.org"
という新しい定数を定義し、既存の appengine.DefaultVersionHostname(c)
の呼び出しをこの domain
定数に置き換える形で行われています。これにより、アプリケーション全体で一貫して build.golang.org
がホスト名として使用されるようになります。
コアとなるコードの変更箇所
misc/dashboard/app/build/notify.go
--- a/misc/dashboard/app/build/notify.go
+++ b/misc/dashboard/app/build/notify.go
@@ -19,6 +19,7 @@ import (
const (
mailFrom = "builder@golang.org" // use this for sending any mail
failMailTo = "golang-dev@googlegroups.com"
+ domain = "build.golang.org"
)
// notifyOnFailure checks whether the supplied Commit or the subsequent
@@ -127,7 +128,7 @@ func sendFailMail(c appengine.Context, com *Commit, builder string) {
var body bytes.Buffer
err := sendFailMailTmpl.Execute(&body, map[string]interface{}{
"Builder": builder, "Commit": com, "Result": r, "Log": l,
- "Hostname": appengine.DefaultVersionHostname(c),
+ "Hostname": domain,
})
if err != nil {
c.Errorf("rendering mail template: %v", err)
misc/dashboard/app/build/test.go
--- a/misc/dashboard/app/build/test.go
+++ b/misc/dashboard/app/build/test.go
@@ -146,7 +146,7 @@ func testHandler(w http.ResponseWriter, r *http.Request) {
body = new(bytes.Buffer)
json.NewEncoder(body).Encode(t.req)
}
- url := "http://" + appengine.DefaultVersionHostname(c) + t.path
+ url := "http://" + domain + t.path
if t.vals != nil {
url += "?" + t.vals.Encode()
}
コアとなるコードの解説
misc/dashboard/app/build/notify.go
の変更
このファイルでは、ビルド失敗時の通知メールを送信する sendFailMail
関数が変更されています。
-
定数
domain
の追加:const ( mailFrom = "builder@golang.org" failMailTo = "golang-dev@googlegroups.com" domain = "build.golang.org" // 新しく追加された行 )
mailFrom
やfailMailTo
と同様に、build.golang.org
という文字列がdomain
という定数として定義されました。これにより、このドメイン名を複数の場所で再利用し、変更があった場合の一元管理が可能になります。 -
Hostname
の置き換え:// 変更前 "Hostname": appengine.DefaultVersionHostname(c), // 変更後 "Hostname": domain, // appengine.DefaultVersionHostname(c) が domain に置き換えられた
sendFailMailTmpl.Execute
関数に渡されるマップのHostname
キーの値が、appengine.DefaultVersionHostname(c)
の動的な呼び出しから、新しく定義されたdomain
定数に置き換えられました。これにより、メールテンプレート内で使用されるホスト名が常にbuild.golang.org
となります。
misc/dashboard/app/build/test.go
の変更
このファイルでは、テストリクエストのURLを構築する部分が変更されています。
- URL構築における
domain
の使用:
テストリクエストのURLを生成する際に、ホスト名部分が// 変更前 url := "http://" + appengine.DefaultVersionHostname(c) + t.path // 変更後 url := "http://" + domain + t.path // appengine.DefaultVersionHostname(c) が domain に置き換えられた
appengine.DefaultVersionHostname(c)
からdomain
定数に置き換えられました。これにより、内部的なテストリクエストもbuild.golang.org
をホスト名として使用するようになります。
これらの変更により、Goダッシュボードアプリケーションは、その外部に公開されるURL(メール通知など)や内部的な通信において、常に build.golang.org
という意図されたドメイン名を使用するようになり、運用上の一貫性と信頼性が向上しました。
関連リンク
- Go CL (Change List) 5539043: https://golang.org/cl/5539043
参考にした情報源リンク
- Google App Engine (公式ドキュメント): https://cloud.google.com/appengine/docs
- Go App Engine SDK (当時のドキュメントに基づく情報):
appengine.DefaultVersionHostname
の挙動に関する一般的な理解。 - Go Build Dashboard: https://build.golang.org/