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

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

このコミットは、Go言語の公式ドキュメント「Effective Go」内のコード例におけるパスの記述を修正するものです。具体的には、ユーザーのホームディレクトリを示すパスが、かつての慣習であった /usr/ から、現代のUnix系システムで一般的な /home/ に変更されています。これは、ドキュメントの正確性を保ち、現在のシステム環境に即した内容にするための軽微ながらも重要な修正です。

コミット

commit 0cd0c3e8ca224ee605cc5e8a9a2274296c30fd36
Author: Rob Pike <r@golang.org>
Date:   Sun Sep 23 10:44:56 2012 +1000

    effective_go: s/usr/home/ in example
    When I was a lad (and well past), users were in /usr;
    now they're somewhere else, I'm told.
    Kids today.
    
    Fixes #4122.
    
    R=golang-dev, dsymonds, rsc
    CC=golang-dev
    https://golang.org/cl/6552060

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

https://github.com/golang/go/commit/0cd0c3e8ca224ee605cc5e8a9a2274296c30fd36

元コミット内容

effective_go: s/usr/home/ in example
When I was a lad (and well past), users were in /usr;
now they're somewhere else, I'm told.
Kids today.

Fixes #4122.

R=golang-dev, dsymonds, rsc
CC=golang-dev
https://golang.org/cl/6552060

変更の背景

この変更の背景には、Unix系オペレーティングシステムにおけるユーザーホームディレクトリの標準的な配置場所の変遷があります。コミットメッセージにある「When I was a lad (and well past), users were in /usr; now they're somewhere else, I'm told. Kids today.」というRob Pike氏のコメントは、この歴史的な変化をユーモラスに表現しています。

かつて、一部のUnixシステムではユーザーのホームディレクトリが /usr ディレクトリの下に配置されることがありました(例: /usr/username)。しかし、現代の多くのUnix系システム、特にLinuxディストリビューションでは、ユーザーのホームディレクトリは /home ディレクトリの下に配置されるのが一般的です(例: /home/username)。

Go言語の公式ドキュメントである「Effective Go」は、Goプログラミングのベストプラクティスやイディオムを解説する重要なガイドです。このドキュメント内のコード例が古いパスの慣習に基づいていると、読者が混乱したり、コードをそのままコピー&ペーストした際に意図しない動作をしたりする可能性があります。

このコミットは、ドキュメントの正確性と現代性、そして読者の利便性を向上させるために、この古いパスの記述を現在の標準に合わせて修正することを目的としています。コミットメッセージにある Fixes #4122 は、Goプロジェクトの内部イシュートラッカーで報告された問題に対応するものであることを示しています。

前提知識の解説

Effective Go

「Effective Go」は、Go言語の公式ドキュメントの一つであり、Goプログラミング言語を効果的かつイディオム的に使用するためのガイドラインを提供しています。これは、Go言語の仕様書やチュートリアル「Tour of Go」を補完するもので、Goの設計思想に基づいたコードの書き方、命名規則、エラーハンドリング、並行処理など、多岐にわたるトピックを扱っています。Goプログラマーにとって必読のドキュメントとされており、Goコミュニティにおけるコーディングスタイルの統一にも貢献しています。

Unix系OSにおけるディレクトリ構造とホームディレクトリ

Unix系オペレーティングシステム(Linux、macOSなど)では、ファイルシステムが階層的なディレクトリ構造を持っています。その中でも、特定のディレクトリには慣習的に特定の種類のファイルやデータが格納されます。

  • / (ルートディレクトリ): ファイルシステム階層の最上位。
  • /usr: "Unix System Resources" の略とされることが多く、システム全体で共有されるプログラム、ライブラリ、ドキュメントなどが格納されます。かつてはユーザーのホームディレクトリがここに置かれることもありましたが、現在では主にシステムが利用する静的なデータが置かれます。
  • /home: 現代の多くのUnix系システムにおいて、一般ユーザーのホームディレクトリが配置される標準的な場所です。各ユーザーのホームディレクトリは通常 /home/username の形式で作成され、ユーザー固有の設定ファイル、ドキュメント、ダウンロードなどが格納されます。

このコミットは、Go言語のドキュメントが、この /usr から /home へのホームディレクトリ配置の慣習の変化に対応したものです。

技術的詳細

このコミットは、doc/effective_go.html というHTML形式のドキュメントファイルに対して行われた、非常にシンプルなテキスト置換です。具体的には、ファイル内の特定の行で "home/""usr/" に変更しています。

変更されたコードスニペットは、おそらくGoプログラムがユーザーのホームディレクトリやGoのインストールパス(GOROOT)を決定しようとする例の一部です。

元のコードでは、環境変数 HOME が設定されていない場合に、ユーザー名 (USER) を基にホームディレクトリを /usr/ の下に構築しようとしていました。

    if HOME == "" {
        HOME = "/usr/" + USER
    }

この記述は、現代のシステム環境では不正確であり、Goのプログラムがユーザーのホームディレクトリを正しく特定できない可能性がありました。

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

--- a/doc/effective_go.html
+++ b/doc/effective_go.html
@@ -1774,7 +1774,7 @@ func init() {
         log.Fatal("$USER not set")
     }
     if HOME == "" {
-        HOME = "/usr/" + USER
+        HOME = "/home/" + USER
     }
     if GOROOT == "" {
         GOROOT = HOME + "/go"

コアとなるコードの解説

上記の差分は、doc/effective_go.html ファイル内のGo言語のコード例の一部を示しています。

変更前:

-        HOME = "/usr/" + USER

この行は、環境変数 HOME が空の場合に、ユーザー名 (USER) を取得し、それを /usr/ ディレクトリに結合してホームディレクトリのパスを構築しようとしていました。これは、一部の古いUnixシステムにおけるユーザーディレクトリの慣習を反映したものです。

変更後:

+        HOME = "/home/" + USER

この行は、上記の /usr//home/ に変更しています。これにより、コード例が現代のほとんどのUnix系システム(Linuxなど)で標準的なユーザーホームディレクトリのパス(例: /home/username)を正しく参照するようになります。

この修正は、Go言語のコード自体ではなく、Go言語のドキュメント内のコード例に対するものです。したがって、Goコンパイラやランタイムの動作に直接的な影響はありませんが、ドキュメントの正確性と実用性を向上させる上で重要です。読者がこのコード例を参考にしたり、実際に試したりする際に、より現実的なパスが提供されることになります。

関連リンク

参考にした情報源リンク