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

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

このコミットは、Go言語の公式ドキュメントの一部である doc/go_faq.html ファイルに対する変更です。具体的には、パッケージのバージョン管理に関するFAQセクションから、PackageVersioning というWikiページへのリンクを削除しています。

コミット

commit fe1c92a203fdc60c76eaaef9030390219fbadd86
Author: Russ Cox <rsc@golang.org>
Date:   Thu Oct 3 13:53:16 2013 -0400

    doc: remove link to PackageVersioning wiki
    
    That page may be fine for experienced Go programmers
    but it's not really targeting new programmers.
    There's too much we don't know yet.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/14345043

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

https://github.com/golang/go/commit/fe1c92a203fdc60c76eaaef9030390219fbadd86

元コミット内容

doc: remove link to PackageVersioning wiki

That page may be fine for experienced Go programmers
but it's not really targeting new programmers.
There's too much we don't know yet.

変更の背景

このコミットの背景には、Go言語のパッケージバージョン管理に関する当時の状況と、公式ドキュメントの対象読者への配慮があります。2013年当時、Go言語には現在のような公式のモジュールシステム(Go Modules)は存在せず、パッケージのバージョン管理はコミュニティの慣習やサードパーティツールに大きく依存していました。

コミットメッセージによると、PackageVersioning というWikiページは、経験豊富なGoプログラマーにとっては有用であるものの、新規プログラマー向けではないと判断されました。その理由として「まだ分からないことが多すぎる」と述べられており、これは当時のGoエコシステムにおけるパッケージバージョン管理のベストプラクティスがまだ確立されていなかったことを示唆しています。

公式のFAQドキュメントは、Go言語を学び始めたばかりのユーザーにとっての主要な情報源であるため、未成熟な情報や複雑すぎる内容へのリンクは、かえって混乱を招く可能性がありました。そのため、新規ユーザーの学習体験をシンプルに保つために、このリンクが削除されたと考えられます。

前提知識の解説

このコミットを理解するためには、2013年当時のGo言語におけるパッケージ管理の状況を把握しておく必要があります。

  • go get コマンド: 当時、Goのパッケージ取得には主に go get コマンドが使用されていました。しかし、go get は常にリポジトリの最新(HEAD)バージョンを取得するため、特定のバージョンを固定したり、再現性のあるビルドを保証したりする機能はありませんでした。
  • ベンダーリング (Vendoring): 外部パッケージの予期せぬ変更を防ぐための一つの方法として、ベンダーリングが推奨されていました。これは、依存するパッケージのソースコードを自身のプロジェクトのリポジトリ内にコピーして管理する手法です。Google社内でもこのアプローチが採用されていました。
  • Go 1 互換性ガイドライン: Go 1のリリースに伴い、後方互換性を維持するためのガイドラインが定められていました。これは、エクスポートされた名前を削除しない、既存の機能を変更するのではなく新しい機能を追加する際には新しい名前を使用するなど、パッケージ開発者が互換性を保つための指針でした。しかし、これはあくまで開発者側の努力に依存するものであり、バージョン管理システムそのものではありませんでした。
  • 非公式なツールと慣習: goven のようなサードパーティツールや、コミュニティ内での非公式な慣習がパッケージバージョン管理の課題を解決しようと試みられていましたが、統一された公式なソリューションは存在しませんでした。
  • Go Modules の不在: 現在のGo言語の標準的なパッケージ管理システムであるGo Modulesは、2018年のGo 1.11で導入され、2019年のGo 1.13でデフォルトとなりました。したがって、2013年時点ではGo Modulesは存在せず、パッケージバージョン管理はより手動で、かつ複雑な課題でした。

PackageVersioning Wikiページは、このような状況下でコミュニティが試行錯誤していた様々なアプローチやツールをまとめたものだったと推測されます。

技術的詳細

このコミットは、doc/go_faq.html というHTMLドキュメントから特定のハイパーリンクを削除するという、技術的には非常にシンプルな変更です。しかし、その背後にある意図は、Go言語のドキュメンテーション戦略と、当時のパッケージ管理の課題に対する公式なスタンスを示しています。

削除されたリンクは、Goの公式Wiki(golang.org/wiki/PackageVersioning)を指していました。Wikiはコミュニティ主導で情報が更新される性質上、公式ドキュメントのような厳密なレビュープロセスを経ない情報が含まれる可能性があります。特に、パッケージバージョン管理のような重要なトピックにおいて、まだ確立されていない、あるいは議論の途上にある情報を公式FAQから参照させることは、以下のリスクを伴いました。

  1. 情報の陳腐化: Wikiページの内容が頻繁に更新されたり、古くなったりする可能性があり、FAQの信頼性を損なう。
  2. 混乱の招来: 複数のアプローチや未確定な情報が混在することで、特に新規ユーザーがどの方法を採用すべきか判断に迷う。
  3. 公式な推奨の欠如: 公式ドキュメントが特定の解決策を推奨しているかのように誤解される可能性があるが、実際にはまだ公式な推奨がない状態であった。

Russ Cox氏(Goチームの主要メンバー)によるこの変更は、公式ドキュメントが提供する情報の品質と、新規ユーザーへの明確なガイダンスを重視する姿勢の表れと言えます。当時のGoチームは、パッケージバージョン管理の課題を認識しつつも、性急に特定のソリューションを公式に推奨するのではなく、より堅牢で普遍的な解決策(後のGo Modules)の登場を待つという慎重なアプローチを取っていたことが伺えます。

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

変更は doc/go_faq.html ファイルの以下の部分です。

--- a/doc/go_faq.html
+++ b/doc/go_faq.html
@@ -1060,11 +1060,6 @@ For example, you might copy "original.com/pkg" to "you.com/external/original.com\n Keith Rarick's <a href="https://github.com/kr/goven">goven</a> is one tool to help automate this process.\n </p>\n \n-<p>\n-The <a href="/wiki/PackageVersioning">PackageVersioning</a> wiki page collects \n-additional tools and approaches.\n-</p>\n-\n <h2 id="Pointers">Pointers and Allocation</h2>

具体的には、以下の5行が削除されました。

<p>
The <a href="/wiki/PackageVersioning">PackageVersioning</a> wiki page collects 
additional tools and approaches.
</p>

コアとなるコードの解説

削除されたコードは、GoのFAQドキュメント内で、パッケージバージョン管理に関する追加のツールやアプローチをまとめた PackageVersioning というWikiページへのハイパーリンクを含む段落でした。

  • <p> タグはHTMLにおける段落を示します。
  • <a href="/wiki/PackageVersioning">PackageVersioning</a> は、PackageVersioning というテキストが表示され、クリックすると /wiki/PackageVersioning というURLに遷移するリンクです。これは golang.org ドメイン内のWikiページを指していました。
  • wiki page collects additional tools and approaches. というテキストは、そのWikiページが追加のツールやアプローチを収集していることを説明していました。

このコードの削除は、FAQドキュメントからこの特定の情報源への参照を完全に断ち切ることを意味します。これにより、新規ユーザーは、まだ公式に確立されていない、あるいは複雑なパッケージバージョン管理の議論に直接触れることなく、より基本的なGoの概念に集中できるようになります。

関連リンク

  • Go 1.2 Release Notes (2013年12月): このコミットの直後にリリースされたGo 1.2のFAQには、パッケージバージョン管理に関する基本的なアドバイスが含まれていました。
    • https://go.dev/doc/go1.2#faq (当時のFAQの内容は現在のものとは異なる可能性がありますが、Go 1.2のリリースノートから関連情報を辿れるかもしれません)
  • Go 1 Compatibility Guarantee: Go 1のリリース時に発表された互換性保証は、Goエコシステムにおける安定性の基盤となりました。

参考にした情報源リンク