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

[インデックス 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つのファイルに影響を与えています。

  1. misc/dashboard/app/build/notify.go: ビルドの失敗時に開発者へメール通知を送信するロジックが含まれています。このメールの本文中に、失敗したビルドの詳細ページへのリンクが含まれる場合、そのリンクのホスト名が appengine.DefaultVersionHostname から取得されていました。変更後は、このホスト名が build.golang.org に固定されます。
  2. 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" // 新しく追加された行
    )
    

    mailFromfailMailTo と同様に、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 := "http://" + appengine.DefaultVersionHostname(c) + t.path
    // 変更後
    url := "http://" + domain + t.path // appengine.DefaultVersionHostname(c) が domain に置き換えられた
    
    テストリクエストのURLを生成する際に、ホスト名部分が appengine.DefaultVersionHostname(c) から domain 定数に置き換えられました。これにより、内部的なテストリクエストも build.golang.org をホスト名として使用するようになります。

これらの変更により、Goダッシュボードアプリケーションは、その外部に公開されるURL(メール通知など)や内部的な通信において、常に build.golang.org という意図されたドメイン名を使用するようになり、運用上の一貫性と信頼性が向上しました。

関連リンク

参考にした情報源リンク

  • 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 and appengine.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つのファイルに影響を与えています。

  1. misc/dashboard/app/build/notify.go: ビルドの失敗時に開発者へメール通知を送信するロジックが含まれています。このメールの本文中に、失敗したビルドの詳細ページへのリンクが含まれる場合、そのリンクのホスト名が appengine.DefaultVersionHostname から取得されていました。変更後は、このホスト名が build.golang.org に固定されます。
  2. 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" // 新しく追加された行
    )
    

    mailFromfailMailTo と同様に、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 := "http://" + appengine.DefaultVersionHostname(c) + t.path
    // 変更後
    url := "http://" + domain + t.path // appengine.DefaultVersionHostname(c) が domain に置き換えられた
    
    テストリクエストのURLを生成する際に、ホスト名部分が appengine.DefaultVersionHostname(c) から domain 定数に置き換えられました。これにより、内部的なテストリクエストも build.golang.org をホスト名として使用するようになります。

これらの変更により、Goダッシュボードアプリケーションは、その外部に公開されるURL(メール通知など)や内部的な通信において、常に build.golang.org という意図されたドメイン名を使用するようになり、運用上の一貫性と信頼性が向上しました。

関連リンク

参考にした情報源リンク