[インデックス 12970] ファイルの概要
このコミットは、Go言語の公式ドキュメントサーバーであるgodoc
をGoogle App Engine (GAE) にデプロイするための設定とドキュメントを、Go 1のリリースに合わせて更新するものです。具体的には、README.godoc-app
ファイルとsetup-godoc-app.bash
スクリプトが修正され、App Engine SDKの推奨バージョン、ディレクトリ構造、およびgodoc
バイナリのパスに関する情報が最新化されています。
コミット
commit e4127614883ed89a0e1db85ac2399253f173e75b
Author: Shenghou Ma <minux.ma@gmail.com>
Date: Thu Apr 26 14:24:53 2012 +0800
cmd/godoc: update App Engine README and script for Go 1
R=adg, dsymonds
CC=golang-dev
https://golang.org/cl/5849053
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/e4127614883ed89a0e1db85ac2399253f173e75b
元コミット内容
cmd/godoc
: Go 1向けにApp EngineのREADMEとスクリプトを更新
変更の背景
この変更は、Go言語がバージョン1(Go 1)に到達したことに伴うものです。Go 1は、Go言語の安定したAPIと互換性を保証する最初のメジャーリリースであり、これまでの開発版(tip)とは異なる多くの変更が導入されました。特に、Go App Engine環境におけるGoアプリケーションのビルドとデプロイのプロセスに影響がありました。
以前のGo App Engine SDKは、Go言語の「tip」(開発版)の変更に追随する必要があり、godoc
のような複雑なアプリケーションをデプロイするには、SDKにまだ含まれていないGoパッケージの最新バージョンをalt/
ディレクトリに手動でコピーする必要がありました。これは、go/token
のFileSet
シリアライゼーションコードやindex/suffixarray
パッケージなど、godoc
が依存する特定の機能がSDKに追いついていなかったためです。
Go 1のリリースにより、Go言語の標準ライブラリとツールチェーンが安定し、App Engine SDKもGo 1の仕様に準拠するように更新されました。これにより、以前必要だった手動でのパッケージコピーや、main.go
の代わりにappinit.go
を使用するといった複雑な手順が不要になりました。このコミットは、これらの変更を反映し、godoc
をApp Engineにデプロイする手順を簡素化することを目的としています。
前提知識の解説
Go言語 (Golang)
Googleによって開発されたオープンソースのプログラミング言語です。シンプルさ、効率性、並行処理のサポートを重視しており、特にネットワークサービスや分散システムに適しています。
Go 1
2012年3月28日にリリースされたGo言語の最初のメジャーバージョンです。Go 1の目標は、言語と標準ライブラリの安定性を提供し、将来のバージョンとの互換性を保証することでした。これにより、Go言語はより広範な採用を促進し、長期的なプロジェクトでの利用を可能にしました。Go 1以前は、言語仕様やAPIが頻繁に変更される可能性がありましたが、Go 1以降は後方互換性が強く意識されるようになりました。
godoc
Go言語の公式ドキュメントツールであり、Goソースコードから直接ドキュメントを生成し、Webサーバーとして提供する機能も持ちます。godoc
は、Goのパッケージ、関数、型、変数などのドキュメントを、コメントとコード構造から自動的に抽出して表示します。開発者がコードを読み、理解する上で不可欠なツールです。
Google App Engine (GAE)
Googleが提供するPlatform as a Service (PaaS) です。開発者はインフラストラクチャの管理を気にすることなく、スケーラブルなWebアプリケーションやモバイルバックエンドを構築・デプロイできます。Go言語は、Python、Java、PHP、Node.jsなどと並んで、App Engineでサポートされるランタイムの一つです。App Engineは、トラフィックの増減に応じて自動的にアプリケーションをスケーリングする機能や、様々なGoogle Cloudサービスとの統合を提供します。
api_version: go1
App Engineのapp.yaml
設定ファイルで使用されるディレクティブです。これは、アプリケーションがGo 1ランタイムを使用することを示します。Go 1以前のApp Engine Goランタイムは、Go言語の「tip」バージョンに基づいており、APIの互換性が保証されていませんでした。api_version: go1
を指定することで、Go 1の安定したAPIセットを使用することが保証されます。
技術的詳細
このコミットは、主にsrc/cmd/godoc/README.godoc-app
とsrc/cmd/godoc/setup-godoc-app.bash
の2つのファイルを変更しています。これらの変更は、Go 1のリリースとそれに伴うApp Engine Go SDKの進化を反映しています。
README.godoc-app
の変更点
-
App Engine SDKの参照更新:
- 旧:
Go appengine SDK 1.5.5 - 2011-10-11
と具体的なバージョンと日付が指定されていました。 - 新: 単に
Go appengine SDK
となり、特定のバージョンへの依存がなくなりました。ダウンロードURLもhttp://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go
からhttps://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go
に更新され、より一般的なダウンロードページを指すようになりました。これは、Go 1以降のSDKが安定し、特定のビルドに依存する必要がなくなったことを示唆しています。
- 旧:
-
ディレクトリ構造の簡素化:
- 旧:
alt/
ディレクトリとそのサブディレクトリ(encoding/binary/
,go/*
,index/suffixarray/
)に関する記述が削除されました。 - これは、Go 1のリリースにより、App Engine SDKがGoの標準ライブラリの最新バージョンを十分にサポートするようになり、以前は手動でコピーする必要があったGoパッケージ(
go/token
のFileSet
シリアライゼーションコードやindex/suffixarray
パッケージなど)がSDKに組み込まれたためです。これにより、デプロイプロセスが大幅に簡素化されました。
- 旧:
-
app.yaml
設定の更新:version
:1-5-5
から1
に変更されました。これは、Go 1の安定版リリースを反映したバージョン管理の簡素化です。api_version
:3
からgo1
に変更されました。これは、Go 1ランタイムを使用することを示す明確な指示であり、Go 1以前の「tip」ベースのランタイムとの区別を明確にします。
-
godoc/
ディレクトリに関する説明の簡素化:- 旧:
godoc/
ディレクトリ内のファイルに関する詳細な説明(doc.go
とmain.go
の除外、appinit.go
の使用、alt/
パッケージへの手動参照の必要性)がありました。 - 新:
doc.go
が除外されることのみが言及され、main.go
やalt/
に関する複雑な説明が削除されました。これは、Go 1のApp Engineランタイムが標準的なGoアプリケーションの構造をより直接的にサポートするようになったため、main.go
が適切に機能し、alt/
ディレクトリが不要になったことを示しています。
- 旧:
setup-godoc-app.bash
の変更点
-
godoc
バイナリのパス変更:- 旧:
godoc
バイナリのパスが$GOROOT/src/cmd/godoc/godoc
とハードコードされていました。 - 新: パスが
$GOROOT/bin/godoc
に変更されました。これは、Go 1以降のGoツールチェーンの標準的な慣習を反映しています。Go 1では、ビルドされたバイナリは通常$GOROOT/bin
または$GOPATH/bin
に配置されます。この変更により、スクリプトがGo 1のビルドシステムと互換性を持つようになりました。
- 旧:
-
zip
コマンドのinclude
パターンに*.xml
を追加:makeZipfile
関数内で、zip
コマンドの-i
オプションに\*.xml
が追加されました。これは、godoc
アプリケーションがXMLファイルを必要とするようになったか、または将来的に必要となる可能性を考慮した変更と考えられます。
これらの変更は全体として、Go 1のリリースによってGo App Engine環境が成熟し、godoc
のようなアプリケーションのデプロイがより標準的で簡素化されたプロセスになったことを示しています。
コアとなるコードの変更箇所
src/cmd/godoc/README.godoc-app
--- a/src/cmd/godoc/README.godoc-app
+++ b/src/cmd/godoc/README.godoc-app
@@ -8,8 +8,8 @@ godoc on appengine
Prerequisites
-------------\n
-* Go appengine SDK 1.5.5 - 2011-10-11
- http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go
+* Go appengine SDK
+ https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go
\n
* Go sources at tip under $GOROOT
\n
@@ -23,10 +23,6 @@ Directory structure
* $APPDIR contains the following entries (this may change depending on
app-engine release and version of godoc):\n
-\talt/\n-\t\tencoding/binary/\n-\t\tgo/*\n-\t\tindex/suffixarray/\n \tapp.yaml
\tgodoc.zip
\tgodoc/\n
@@ -36,31 +32,16 @@ Directory structure
For instance:\n
\tapplication: godoc-app
-\tversion: 1-5-5
+\tversion: 1
\truntime: go
-\tapi_version: 3
+\tapi_version: go1
\n
\thandlers:\n \t- url: /.*\n \t script: _go_app
\n * The godoc/ directory contains a copy of the files under $GOROOT/src/cmd/godoc
- with modifications:\n-\n-\t- doc.go is excluded (it belongs to pseudo-package documentation)\n-\t- main.go is excluded (appinit.go is taking its place)\n-\n- Additional manual modifications are required to refer to the alt/ packages\n- where the app-engine library is not up-to-date with the godoc version.\n-\n-* The alt/ directory contains up-to-date copies of Go packages that a tip-based\n- godoc is dependent on but which do not yet exist in the current app-engine SDK.\n- At the time of this writing (10/14/2011) this is the entire go directory tree\n- (for the missing FileSet serialization code in go/token) as well as the\n- index/suffixarray package (for the missing suffix array serialization code).\n- The latest (alt/)index/suffixarray package internally requires the latest\n- version of encoding/binary, which is why it also needs to be present under\n- alt/.\n+ with doc.go excluded (it belongs to pseudo-package \"documentation\")\n \n \n Configuring and running godoc
src/cmd/godoc/setup-godoc-app.bash
--- a/src/cmd/godoc/setup-godoc-app.bash
+++ b/src/cmd/godoc/setup-godoc-app.bash
@@ -44,8 +44,8 @@ getArgs() {\n \tif [ ! -d $GOROOT ]; then
\t\terror \"$GOROOT is not a directory\"\n \tfi
-\tif [ ! -x $GOROOT/src/cmd/godoc/godoc ]; then
-\t\terror \"$GOROOT/src/cmd/godoc/godoc does not exist or is not executable\"\n+\tif [ ! -x $GOROOT/bin/godoc ]; then
+\t\terror \"$GOROOT/bin/godoc does not exist or is not executable\"\n \tfi
\tif [ ! -d $APPDIR ]; then
\t\terror \"$APPDIR is not a directory\"\n@@ -72,15 +72,15 @@ cleanup() {\n \n makeZipfile() {\n \techo \"*** make $APPDIR/$ZIPFILE\"\n-\tzip -q -r $APPDIR/$ZIPFILE $GOROOT -i \\*.go -i \\*.html -i \\*.css -i \\*.js -i \\*.txt -i \\*.c -i \\*.h -i \\*.s -i \\*.png -i \\*.jpg -i \\*.sh -i \\*.ico\n+\tzip -q -r $APPDIR/$ZIPFILE $GOROOT -i \\*.go -i \\*.html -i \\*.xml -i \\*.css -i \\*.js -i \\*.txt -i \\*.c -i \\*.h -i \\*.s -i \\*.png -i \\*.jpg -i \\*.sh -i \\*.ico\n }\n \n makeIndexfile() {\n \techo \"*** make $APPDIR/$INDEXFILE\"\n \tOUT=/tmp/godoc.out\n-\t$GOROOT/src/cmd/godoc/godoc -write_index -index_files=$APPDIR/$INDEXFILE -zip=$APPDIR/$ZIPFILE 2> $OUT\n+\t$GOROOT/bin/godoc -write_index -index_files=$APPDIR/$INDEXFILE -zip=$APPDIR/$ZIPFILE 2> $OUT\n \tif [ $? != 0 ]; then
-\t\terror \"$GOROOT/src/cmd/godoc/godoc failed - see $OUT for details\"\n+\t\terror \"$GOROOT/bin/godoc failed - see $OUT for details\"\n \tfi\n }\n \n```
## コアとなるコードの解説
### `README.godoc-app`の変更
* **SDKバージョンの抽象化とURL更新**:
* 以前は特定のSDKバージョン(`1.5.5 - 2011-10-11`)が指定されていましたが、Go 1の安定性により、具体的なバージョン指定が不要になりました。これは、Go App Engine SDKがGo 1のリリースサイクルに同期し、より安定したAPIを提供できるようになったことを示唆しています。URLの変更は、Google Developersサイトの構造変更に対応したものです。
* **`alt/`ディレクトリの削除**:
* Go 1以前は、App Engine SDKがGoの最新の「tip」バージョンに追いついていない場合、`godoc`が依存する特定のパッケージ(例: `go/token`の`FileSet`シリアライゼーション、`index/suffixarray`)を手動で`alt/`ディレクトリにコピーする必要がありました。Go 1のリリースとSDKの更新により、これらのパッケージがSDKに組み込まれたため、この複雑な手動手順が不要になりました。これにより、デプロイプロセスが大幅に簡素化され、エラーの可能性が減少します。
* **`app.yaml`の`version`と`api_version`の更新**:
* `version: 1-5-5`から`version: 1`への変更は、Go 1の安定版リリースを反映したバージョン管理の簡素化です。
* `api_version: 3`から`api_version: go1`への変更は非常に重要です。これは、アプリケーションがGo 1の安定したAPIセットを使用することを明示的に宣言します。Go 1以前のApp Engine Goランタイムは、Go言語の「tip」バージョンに基づいており、APIの互換性が保証されていませんでした。`go1`を指定することで、将来のApp Engineの更新によってアプリケーションが予期せず動作しなくなるリスクが低減されます。
* **`godoc/`ディレクトリの説明の簡素化**:
* 以前は、`main.go`が除外され、`appinit.go`がその代わりに使用されるといった、App Engine特有の複雑な起動メカニズムに関する説明がありました。Go 1のApp Engineランタイムは、標準的なGoアプリケーションの構造をより直接的にサポートするようになったため、これらの詳細な説明が不要になりました。`doc.go`の除外は、`godoc`の内部的な構造(`doc.go`が擬似パッケージ「documentation」に属するため)によるもので、これはGo 1以前から変わっていません。
### `setup-godoc-app.bash`の変更
* **`godoc`バイナリのパス変更**:
* スクリプト内で`godoc`バイナリを参照するパスが`$GOROOT/src/cmd/godoc/godoc`から`$GOROOT/bin/godoc`に変更されました。Go 1以降、Goのビルドシステムはコンパイルされたバイナリを`$GOROOT/bin`(または`$GOPATH/bin`)に配置するのが標準的な慣習となりました。この変更により、スクリプトがGo 1のツールチェーンと互換性を持つようになり、`godoc`バイナリの正しい場所を確実に参照できるようになります。これは、`godoc`の実行可能性チェックと、インデックス作成時の`godoc`コマンドの呼び出しの両方に影響します。
* **`zip`コマンドの`include`パターンに`*.xml`を追加**:
* `makeZipfile`関数内で、App Engineにデプロイされる`godoc.zip`ファイルに含めるファイルのタイプに`*.xml`が追加されました。これは、`godoc`アプリケーションがXML形式のデータや設定ファイルを処理するようになったか、または将来的にその可能性を考慮した変更であると考えられます。これにより、必要なすべてのリソースがデプロイパッケージに含まれることが保証されます。
これらの変更は、Go 1のリリースがGoエコシステム全体、特にApp EngineのようなプラットフォームでのGoアプリケーションのデプロイと管理に与えた影響を明確に示しています。Go 1は、言語の安定性だけでなく、ツールチェーンとデプロイメントプラットフォームの成熟も促進しました。
## 関連リンク
* [Go言語公式サイト](https://go.dev/)
* [Google App Engine 公式サイト](https://cloud.google.com/appengine)
* [Go 1 Release Notes](https://go.dev/doc/go1)
* [godoc コマンド](https://pkg.go.dev/cmd/godoc)
## 参考にした情報源リンク
* [Go 1 Release Notes](https://go.dev/doc/go1)
* [Google App Engine Documentation](https://cloud.google.com/appengine/docs)
* [Go App Engine SDK Downloads](https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go) (コミットで参照されているURL)
* [Go App Engine Standard Environment Overview](https://cloud.google.com/appengine/docs/standard/go/how-it-works) (現在のApp Engine Goのドキュメント)
* [Go App Engine Flexible Environment Overview](https://cloud.google.com/appengine/docs/flexible/go/how-it-works)I have generated the commit explanation based on the provided instructions and the commit data. I have included all the required sections in the specified order, with detailed explanations in Japanese. I have also used web search to gather additional context about Go 1 and App Engine.