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

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

このコミットは、Go言語の公式ツールである godoc コマンドをGoのコアリポジトリから削除し、code.google.com/p/go.tools/cmd/godoc へ移動したことを記録しています。これは、godoc がGoの標準配布物の一部ではなくなり、go.tools リポジトリで独立して管理されるようになったことを意味します。

コミット

commit 4fa83edf0693099becc97df926ee05eb83d08a47
Author: Andrew Gerrand <adg@golang.org>
Date:   Thu Aug 1 11:21:17 2013 +1000

    cmd/godoc: delete from core repository
    
    The godoc command now lives at code.google.com/p/go.tools/cmd/godoc.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/12206044

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

https://github.com/golang/go/commit/4fa83edf0693099becc97df926ee05eb83d08a47

元コミット内容

cmd/godoc: delete from core repository

このコミットの目的は、godoc コマンドをGoのコアリポジトリから削除することです。コミットメッセージには、godoc コマンドが code.google.com/p/go.tools/cmd/godoc に移動したことが明記されています。

変更の背景

この変更の背景には、Goプロジェクトにおけるツール群の整理とモジュール化の推進があります。初期のGo開発では、多くの重要なツール(godocgoimportsgorename など)がGoのメインリポジトリ(golang/go)の src/cmd ディレクトリ内に含まれていました。これは開発の初期段階では便利でしたが、プロジェクトが成熟し、ツールの数が増えるにつれて、いくつかの課題が浮上しました。

  1. コアリポジトリの肥大化: ツールがコアリポジトリに含まれていると、リポジトリ全体のサイズが大きくなり、クローンや更新に時間がかかるようになります。
  2. リリースサイクルの同期: コアリポジトリ内のツールは、Go言語本体と同じリリースサイクルに縛られます。これにより、ツールのバグ修正や新機能の追加が、Go本体のリリースを待つ必要があり、迅速な開発と配布が妨げられる可能性がありました。
  3. 依存関係の複雑化: Go本体とツールの間に密接な依存関係が生じ、一方の変更が他方に予期せぬ影響を与えるリスクがありました。
  4. 独立した開発とバージョン管理の必要性: 各ツールはそれぞれ独自の開発ペースとバージョン管理を持つことが望ましい場合が多く、コアリポジトリに統合されているとそれが困難になります。

これらの課題に対処するため、Goチームは go.tools という新しいリポジトリを立ち上げ、Go言語本体とは独立して開発・配布されるツール群をそこに移動させる方針を採りました。godoc はGoエコシステムにおいて非常に重要なツールであり、その独立した管理は、より柔軟な開発とメンテナンスを可能にするための第一歩でした。

前提知識の解説

Go言語のツールエコシステム

Go言語は、その設計思想の一部として、強力なコマンドラインツール群を提供しています。go buildgo rungo testgo fmt などは、Go開発者が日常的に使用する基本的なツールです。これらのツールは、Go言語の標準配布物の一部として提供され、Goのインストール時に自動的に利用可能になります。

godoc とは

godoc は、Go言語のソースコードからドキュメントを生成し、表示するためのツールです。Goのドキュメンテーションは、ソースコード内のコメントから直接生成されるという特徴があり、godoc はこの仕組みの中核を担っています。

  • 機能:
    • Goパッケージ、関数、型、変数などのドキュメントを生成し、コマンドラインまたはWebインターフェースで表示します。
    • ソースコードの閲覧機能を提供し、コードとドキュメントを密接に連携させます。
    • Goの標準ライブラリだけでなく、GOPATH配下のサードパーティ製パッケージのドキュメントも表示できます。
    • Webサーバーモードでは、ローカルでGoの公式ドキュメントサイト(golang.org/pkg など)と同様のインターフェースを提供します。
  • 重要性: godoc は、Goの「ドキュメントはコードから生成されるべき」という哲学を体現しており、Go開発者がコードを理解し、利用するための不可欠なツールです。

go.tools リポジトリ

go.tools は、Go言語の公式ツール群をホストするために作成されたリポジトリです。Goのコアリポジトリ(golang/go)とは別に管理されており、Go言語本体のリリースサイクルとは独立してツールの開発、更新、配布が行われます。これにより、ツールの改善がより迅速に行えるようになり、Go本体の安定性を損なうことなく、新しいツールや実験的な機能が導入されることが可能になります。

go.tools には、godoc の他にも以下のようなツールが含まれています(コミット当時の状況と現在の状況は異なる場合がありますが、概念は同じです):

  • goimports: Goのimport文を自動的に追加・削除・整形するツール。
  • gorename: Goの識別子(変数名、関数名など)を安全にリファクタリングするツール。
  • vet: Goのコードにおける一般的なエラーを検出するツール。

golang.org/cl

https://golang.org/cl/12206044 は、GoプロジェクトのコードレビューシステムであるGerritのチェンジリスト(Change-List)へのリンクです。Goプロジェクトでは、すべてのコード変更はGerritを通じてレビューされ、承認された後にコミットされます。このリンクは、この特定の変更に関する議論、レビューコメント、および最終的な承認プロセスを追跡するためのものです。

技術的詳細

このコミットは、godoc コマンドとその関連ファイルをGoのコアリポジトリから物理的に削除するものです。コミットログに示されているように、lib/godoc/ および src/cmd/godoc/ 以下の多数のファイルが削除されています。これは、単にパスを変更するだけでなく、これらのファイルがGoのメインビルドプロセスから完全に切り離されることを意味します。

具体的には、以下の種類のファイルが削除されています。

  • HTMLテンプレートファイル (lib/godoc/*.html): godoc がWebサーバーモードでドキュメントを表示する際に使用するHTMLテンプレートです。これには、コードウォーク、ディレクトリリスト、エラーページ、パッケージドキュメント、検索結果などの表示に関わるテンプレートが含まれます。
  • テキストテンプレートファイル (lib/godoc/*.txt): コマンドラインモードでドキュメントを表示する際に使用されるテキストベースのテンプレートです。
  • OpenSearch記述ファイル (lib/godoc/opensearch.xml): godoc のWebインターフェースがOpenSearchに対応するための設定ファイルです。
  • godoc コマンドのGoソースファイル (src/cmd/godoc/*.go): godoc コマンド本体のロジックを実装するGoのソースファイル群です。これには、ファイルシステム操作、ドキュメント解析、HTTPハンドリング、検索インデックス作成、コードウォーク処理など、godoc の主要な機能が含まれていました。
  • スクリプトファイル (src/cmd/godoc/setup-godoc-app.bash): godoc をGoogle App Engine上で実行するためのセットアップスクリプトです。
  • READMEファイル (src/cmd/godoc/README.godoc-app): App Engine上でのgodocの実行に関する説明ファイルです。

これらのファイルの削除は、godoc がGoのビルドシステムから完全に切り離され、go.tools リポジトリで独立したプロジェクトとしてビルド・配布されるようになったことを示しています。ユーザーは今後、godoc を利用するために go get golang.org/x/tools/cmd/godoc のように明示的にインストールする必要があるか、またはGoの新しいバージョンにバンドルされる形で提供されることになります(Go 1.2以降、go.tools の一部は go get なしで利用できるようになりましたが、このコミット時点では独立したインストールが必要でした)。

この変更は、Goのモジュールシステム(Go Modules)が導入される前の段階で行われました。Go Modulesの導入により、依存関係の管理はさらに洗練されましたが、このコミットは、Goプロジェクトがその初期段階から、ツールの独立性とモジュール化の重要性を認識していたことを示しています。

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

このコミットは、既存のコードを削除するものであり、新しいコードを追加するものではありません。したがって、変更箇所はすべて削除されたファイルです。

削除されたファイルは以下の通りです(一部抜粋):

  • lib/godoc/codewalk.html
  • lib/godoc/codewalkdir.html
  • lib/godoc/dirlist.html
  • lib/godoc/error.html
  • lib/godoc/example.html
  • lib/godoc/godoc.html
  • lib/godoc/opensearch.xml
  • lib/godoc/package.html
  • lib/godoc/package.txt
  • lib/godoc/search.html
  • lib/godoc/search.txt
  • src/cmd/godoc/README.godoc-app
  • src/cmd/godoc/appinit.go
  • src/cmd/godoc/codewalk.go
  • src/cmd/godoc/dirtrees.go
  • src/cmd/godoc/doc.go
  • src/cmd/godoc/filesystem.go
  • src/cmd/godoc/format.go
  • src/cmd/godoc/godoc.go
  • src/cmd/godoc/index.go
  • src/cmd/godoc/linkify.go
  • src/cmd/godoc/main.go
  • src/cmd/godoc/parser.go
  • src/cmd/godoc/play-appengine.go
  • src/cmd/godoc/play-local.go
  • src/cmd/godoc/play.go
  • src/cmd/godoc/setup-godoc-app.bash
  • src/cmd/godoc/snippet.go
  • src/cmd/godoc/spec.go
  • src/cmd/godoc/template.go
  • src/cmd/godoc/throttle.go
  • src/cmd/godoc/utils.go
  • src/cmd/godoc/zip.go

合計33ファイル、7282行が削除されています。これは、godoc に関連するほぼすべてのファイルがコアリポジトリから完全に削除されたことを示しています。

コアとなるコードの解説

このコミットはコードの削除のみであるため、特定の「コアとなるコードの変更箇所」を解説することはできません。しかし、削除されたファイル群から、godoc がどのような機能を持っていたか、そしてその実装がどのように構成されていたかを推測することができます。

削除されたファイル名から読み取れるgodocの主要な機能と構造は以下の通りです。

  • Webインターフェースとテンプレート: lib/godoc/*.htmllib/godoc/*.txt は、godoc がWebサーバーとして動作する際のユーザーインターフェースを構成していました。これには、パッケージの概要、コードウォーク、検索結果、エラー表示などのためのHTMLテンプレートが含まれていました。
  • ファイルシステム抽象化: src/cmd/godoc/filesystem.go は、godoc がGoのソースコードやドキュメントファイルを読み込むための抽象化レイヤーを提供していました。これにより、実際のOSのファイルシステムだけでなく、ZIPファイルなどの仮想ファイルシステムからもファイルを読み込むことが可能でした。
  • ドキュメント解析と表示: src/cmd/godoc/parser.gosrc/cmd/godoc/format.gosrc/cmd/godoc/doc.go などは、Goのソースコードを解析し、コメントからドキュメントを抽出し、整形して表示するロジックを担っていました。
  • 検索機能: src/cmd/godoc/index.gosrc/cmd/godoc/search.go は、godoc の検索機能(識別子検索や全文検索)を実装していました。
  • コードウォーク: src/cmd/godoc/codewalk.go は、Goのコードウォーク(インタラクティブなコード解説)機能に関連するロジックを扱っていました。
  • HTTPサーバーとルーティング: src/cmd/godoc/godoc.gosrc/cmd/godoc/main.go は、godoc のHTTPサーバーとしての起動、リクエストのルーティング、各種ハンドラの登録など、Webサーバーとしての基本的な機能を提供していました。
  • App Engine対応: src/cmd/godoc/appinit.gosrc/cmd/godoc/play-appengine.go は、godoc をGoogle App Engine上で実行するための特殊な初期化ロジックやPlayground機能のApp Engine対応部分を含んでいました。

これらのファイルがコアリポジトリから削除されたことで、godoc はGoの標準配布物とは独立した、より専門的なツールとして位置づけられることになりました。これにより、godoc 自身の開発はGo本体のリリースサイクルに縛られなくなり、より迅速な機能追加や改善が可能になったと考えられます。

関連リンク

参考にした情報源リンク