[インデックス 12461] ファイルの概要
このコミットは、Go言語の標準ライブラリの一部であった exp/wingui パッケージが、外部プロジェクト code.google.com/p/gowingui へ移管されたことを示しています。これにより、GoのコアリポジトリからWindows GUI関連の実験的なコードが削除され、独立したプロジェクトとして開発が継続されることになりました。
コミット
commit 5aee1f3a0facf301230609008a61618a44cf4363
Author: Alex Brainman <alex.brainman@gmail.com>
Date: Wed Mar 7 17:48:09 2012 +1100
exp/wingui: getting relocated to
go get code.google.com/p/gowingui
R=golang-dev, minux.ma, r
CC=golang-dev
https://golang.org/cl/5752067
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/5aee1f3a0facf301230609008a61618a44cf4363
元コミット内容
exp/wingui: getting relocated to
go get code.google.com/p/gowingui
R=golang-dev, minux.ma, r
CC=golang-dev
https://golang.org/cl/5752067
変更の背景
このコミットが行われた2012年頃のGo言語は、まだバージョン1.0がリリースされたばかりの時期であり、言語としての安定化とエコシステムの構築が活発に進められていました。exp (experimental) ディレクトリは、Goの標準ライブラリに将来的に取り込まれる可能性のある、あるいは実験的な性質を持つパッケージを一時的に配置するための場所でした。
exp/wingui パッケージは、GoからWindowsのネイティブGUI API (WinAPI) を利用するための実験的なバインディングを提供していました。しかし、Goの設計思想として、特定のプラットフォームに強く依存するGUIライブラリを標準ライブラリに含めることには慎重な姿勢がありました。Goはクロスプラットフォームでの利用を強く意識しており、GUIツールキットは通常、OS固有の複雑な依存関係を持つため、標準ライブラリに含めるとそのポータビリティを損なう可能性がありました。
このような背景から、exp/wingui のようなプラットフォーム固有の実験的パッケージは、Goのコアリポジトリから切り離され、独立した外部プロジェクトとして開発を継続することが決定されました。これにより、Goの標準ライブラリはより汎用的なものに保たれ、特定のプラットフォームに特化した機能はコミュニティ主導の外部ライブラリとして発展していく道筋が作られました。gowingui プロジェクトへの移管は、この方針に沿ったものであり、Goのエコシステムが成熟していく過程における自然な流れと言えます。
前提知識の解説
Go言語の exp パッケージ
Go言語の初期には、exp (experimental) というプレフィックスを持つパッケージが標準ライブラリ内に存在しました。これらは、将来的に標準ライブラリに昇格する可能性のある、あるいは実験的な機能を提供するパッケージでした。しかし、Go 1の安定化に伴い、exp パッケージの多くは標準ライブラリから削除されるか、独立した外部リポジトリへと移管されました。これは、標準ライブラリの安定性と保守性を保ちつつ、実験的な開発はコミュニティ主導で行うというGoチームの方針によるものです。
WinAPI (Windows API)
WinAPIは、Microsoft Windowsオペレーティングシステムが提供するアプリケーションプログラミングインターフェース (API) の集合体です。Windows上で動作するほとんどのアプリケーションは、WinAPIを呼び出すことで、ウィンドウの作成、イベント処理、グラフィックス描画、ファイル操作など、OSの機能を利用します。WinAPIはC言語で記述されており、GoからWinAPIを呼び出すには、Goの syscall パッケージなどを利用してCの関数呼び出し規約に合わせたラッパーを作成する必要があります。
go get コマンド
go get は、Goのパッケージ管理ツールであり、指定されたURLからGoのソースコードリポジトリをダウンロードし、依存関係を解決し、必要に応じてビルド・インストールを行うコマンドです。このコミットメッセージにある go get code.google.com/p/gowingui は、gowingui パッケージがGoの標準ライブラリから独立した外部リポジトリとして提供されるようになったことを示唆しています。
Google Code
code.google.com/p/gowingui というURLは、かつてGoogleが提供していたオープンソースプロジェクトホスティングサービス「Google Code」を指します。2012年当時は多くのGo言語プロジェクトがGoogle Code上でホストされていました。Google Codeは2015年にサービスを終了し、多くのプロジェクトはGitHubなどの他のプラットフォームへ移行しました。
技術的詳細
このコミットの主要な技術的変更は、src/pkg/exp/wingui ディレクトリ以下のファイルが完全に削除されたことです。具体的には以下のファイルが削除されています。
src/pkg/exp/wingui/Makefile:winguiパッケージのビルド設定ファイル。src/pkg/exp/wingui/gui.go: GUIアプリケーションのメインロジック、ウィンドウプロシージャ (WndProc)、メッセージループなどが実装されていたファイル。src/pkg/exp/wingui/winapi.go: WinAPIの構造体 (Wndclassex,Point,Msgなど) や定数 (WM_CREATE,WS_OVERLAPPEDWINDOWなど) の定義、およびWinAPI関数のGo言語での宣言 (//sysコメントで定義され、mksyscall_windows.plでzwinapi.goが生成される元となる)。src/pkg/exp/wingui/zwinapi.go:winapi.goからmksyscall_windows.plスクリプトによって自動生成されたファイルで、WinAPI関数への実際のシステムコール (syscall.Syscall) のラッパーが含まれていました。
これらのファイルの削除は、exp/wingui パッケージがGoの標準ライブラリから完全に切り離されたことを意味します。
また、doc/go1.html と doc/go1.tmpl の2つのドキュメントファイルが更新されています。これらのファイルはGo 1のリリースノートやドキュメントの一部であり、exp/wingui が code.google.com/p/gowingui へ移管されたことを明記するエントリが追加されています。これは、ユーザーが古い exp/wingui パッケージを探した際に、新しい場所を案内するための重要な情報です。
この変更は、Goの標準ライブラリのスコープを明確にし、特定のOSに特化した機能は外部ライブラリとして提供するというGoチームの戦略を反映しています。これにより、Goのコアはより軽量で汎用的なものに保たれ、GUIのような複雑な領域はコミュニティの貢献によって発展していくことになります。
コアとなるコードの変更箇所
このコミットでは、既存のコードの削除とドキュメントの追加が主な変更点です。
-
doc/go1.htmlおよびdoc/go1.tmpl:exp/winguiがcode.google.com/p/gowinguiへ移管されたことを示す新しいテーブル行が追加されています。これは、Go 1のドキュメントにおいて、パッケージの移管情報を明確にするためのものです。
--- a/doc/go1.html +++ b/doc/go1.html @@ -779,6 +779,10 @@ This table lists the old and new import paths: </tr> <tr><td>encoding/git85</td> <td>code.google.com/p/go.codereview/git85</tr> <tr><td>patch</td> <td>code.google.com/p/go.codereview/patch</tr> +<tr> +<td colspan="2"><hr></td> +</tr> +<tr><td>exp/wingui</td> <td>code.google.com/p/gowingui</tr> </table> <p> -
src/pkg/exp/wingui/Makefile: ファイル全体が削除されています。 -
src/pkg/exp/wingui/gui.go: ファイル全体が削除されています。 -
src/pkg/exp/wingui/winapi.go: ファイル全体が削除されています。 -
src/pkg/exp/wingui/zwinapi.go: ファイル全体が削除されています。
これらの削除されたファイルは、exp/wingui パッケージを構成する主要なソースコードであり、Windows GUIアプリケーションの作成に必要なWinAPIのバインディングと基本的なGUIロジックが含まれていました。
コアとなるコードの解説
このコミットにおける「コアとなるコードの変更箇所」は、実質的に exp/wingui パッケージ全体の削除と、その移管を告知するドキュメントの追加です。
ドキュメントの変更 (doc/go1.html, doc/go1.tmpl)
これらのファイルはGo 1の公式ドキュメントの一部であり、Go 1リリースにおけるパッケージの変更点や移管先をまとめたテーブルが含まれています。このコミットでは、そのテーブルに exp/wingui エントリが追加され、code.google.com/p/gowingui へ移管されたことが明示されています。これは、Goのユーザーが古いパッケージを参照した際に、正しい情報にたどり着けるようにするための重要な変更です。
exp/wingui パッケージの削除
削除された exp/wingui パッケージは、GoからWindowsのネイティブGUIを扱うための実験的な試みでした。
gui.go: このファイルには、Windowsアプリケーションのエントリポイントとなるmain関数、ウィンドウプロシージャ (WndProc)、メッセージループ (GetMessage,TranslateMessage,DispatchMessage) など、基本的なGUIアプリケーションの骨格が実装されていました。ボタンの作成やイベントハンドリングの例も含まれていました。winapi.go: WinAPIの構造体(例:Wndclassex、Msg、Point)や、ウィンドウメッセージ(例:WM_CREATE、WM_CLOSE)、ウィンドウスタイル(例:WS_OVERLAPPEDWINDOW)などの定数が定義されていました。また、//sysコメントを使ってWinAPI関数のGo言語でのシグネチャが宣言されており、これらはmksyscall_windows.plスクリプトによってzwinapi.goのような自動生成ファイルに変換されていました。zwinapi.go:winapi.goの//sysコメントに基づいて自動生成されたファイルで、WinAPI関数への実際のシステムコール (syscall.Syscallやsyscall.Syscall6など) を行うためのGo言語のラッパー関数が実装されていました。kernel32.dllやuser32.dllといったWindowsのDLLから関数をロードし、Goの型とCの型の間で変換を行う役割を担っていました。Makefile:zwinapi.goの生成プロセスや、パッケージのビルドに関する設定が含まれていました。
これらのファイルの削除は、Goの標準ライブラリがGUIフレームワークを直接提供しないという方針を明確にしたものであり、Windows GUI開発は gowingui のような外部ライブラリに委ねられることになりました。これにより、Goのコアはよりシンプルで、言語とランタイムの基盤に集中できるようになります。
関連リンク
- Go言語公式ドキュメント: https://go.dev/doc/
- Go言語の
syscallパッケージ: https://pkg.go.dev/syscall - Google Code (アーカイブ): https://code.google.com/archive/ (gowinguiプロジェクトの直接のアーカイブは現在見つけにくい可能性がありますが、Google Codeの一般的な情報源として)
参考にした情報源リンク
- Go言語の
expパッケージに関する議論や歴史的背景 (GoのメーリングリストやIssueトラッカーのアーカイブ):- GoのIssueトラッカー (例:
golang/goリポジトリの過去のIssueやPull Request) golang-nutsやgolang-devメーリングリストのアーカイブ
- GoのIssueトラッカー (例:
- WinAPIに関するMicrosoftの公式ドキュメント: https://learn.microsoft.com/en-us/windows/win32/api/
- Go 1リリースノート (当時の情報): https://go.dev/doc/go1
gowinguiプロジェクトに関する情報 (当時のGoogle Codeのページ、またはその後のGitHubなどへの移管先):- 当時の
code.google.com/p/gowinguiのスナップショットや、関連するブログ記事、フォーラムの議論など。 - 現在のGoのGUIライブラリに関する情報 (例:
fyne,walk,webviewなど) を検索することで、GoにおけるGUI開発の進化を理解する手助けになります。
- 当時の