[インデックス 12503] ファイルの概要
このコミットは、Go言語プロジェクトのドキュメント関連スクリプトにおけるビルドプロセスの修正とファイル名の変更を目的としています。具体的には、FreeBSD環境でのビルド問題を解決するため、make
コマンドによるビルドをGo言語のネイティブビルドコマンドであるgo build
に置き換え、さらにスクリプトのファイル名を.sh
から.bash
に変更することで、命名規則の一貫性を保ち、スクリプトの実行環境を明確にしています。
コミット
commit d56e0e7e9403236296da426854165b82600699e0
Author: Shenghou Ma <minux.ma@gmail.com>
Date: Thu Mar 8 12:04:49 2012 +0900
doc: fix freebsd build
Also rename it to test.bash, for naming consistency.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5784045
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/d56e0e7e9403236296da426854165b82600699e0
元コミット内容
このコミットの元の内容は以下の通りです。
- コミットメッセージ:
doc: fix freebsd build
- これは、ドキュメント関連のビルドプロセスにおいて、FreeBSD環境で発生していた問題を修正することを示しています。
- 追加の変更点:
Also rename it to test.bash, for naming consistency.
- これは、関連するスクリプトのファイル名を
test.sh
からtest.bash
に変更し、プロジェクト内の命名規則に一貫性を持たせることを示しています。
- これは、関連するスクリプトのファイル名を
変更の背景
この変更の背景には、主に以下の2つの要因が考えられます。
-
FreeBSD環境でのビルド問題の解決: Go言語はクロスプラットフォーム対応を重視していますが、特定のOS(この場合はFreeBSD)環境において、ビルドスクリプトが期待通りに動作しない問題が発生していた可能性があります。特に、
make
コマンドはUnix系システムで広く使われるビルドツールですが、その動作やMakefile
の記述方法はOSやmake
の実装(GNU Make, BSD Makeなど)によって微妙に異なることがあります。これにより、FreeBSD環境でmake
が正しく動作しない、あるいは予期せぬ挙動を示すことがあったと考えられます。Go言語のネイティブビルドツールであるgo build
を使用することで、このような環境依存の問題を回避し、より安定したビルドプロセスを確保することが目的です。 -
命名規則の一貫性の確保: スクリプトのファイル名を
test.sh
からtest.bash
に変更することは、そのスクリプトがbash
シェルに特化した機能を使用していることを明示し、プロジェクト全体の命名規則に一貫性を持たせるためです。多くのUnix系システムでは、/bin/sh
はbash
以外のシェル(例:dash
on Debian/Ubuntu,zsh
on macOS)へのシンボリックリンクである場合があります。#!/usr/bin/env bash
というシバン(shebang)行はbash
で実行することを指定していますが、ファイル名も.bash
とすることで、その意図をより明確にし、誤解を防ぐことができます。これにより、開発者がスクリプトの実行に必要なシェル環境を容易に判断できるようになります。
前提知識の解説
このコミットを理解するためには、以下の技術的な前提知識が役立ちます。
-
make
コマンドとMakefile
:make
は、プログラムのコンパイルやファイルの生成など、プロジェクトのビルドプロセスを自動化するためのユーティリティです。Makefile
という設定ファイルに、ターゲット(生成したいファイル)と、それを生成するための依存関係およびコマンドを記述します。make
は依存関係を解決し、必要なコマンドのみを実行することで、効率的なビルドを実現します。しかし、Makefile
の記述は複雑になりがちで、OSやmake
の実装によって動作が異なる「環境依存性」の問題を抱えることがあります。 -
go build
コマンド:go build
は、Go言語に標準で備わっているビルドコマンドです。Goのソースコードをコンパイルし、実行可能なバイナリを生成します。make
のような外部ツールに依存せず、Go言語のツールチェイン自体がビルドプロセスを管理するため、クロスプラットフォームでの一貫したビルドが容易です。Goモジュールシステムと連携し、依存関係の解決も自動で行います。 -
シェルスクリプト (
.sh
vs.bash
): シェルスクリプトは、Unix系OSのシェル(コマンドラインインターフェース)で実行されるコマンドのシーケンスを記述したスクリプトです。.sh
拡張子は、一般的にPOSIX準拠のシェル(sh
)で実行可能なスクリプトを示します。sh
は最も基本的なシェルであり、多くのUnix系システムで利用できますが、機能は限定的です。.bash
拡張子は、bash
(Bourne-Again SHell)に特化した機能(例: 配列、高度な条件分岐、プロセス置換など)を使用しているスクリプトを示すことが多いです。bash
はsh
の上位互換であり、より多くの機能を提供しますが、すべてのシステムでsh
がbash
であるとは限りません。スクリプトの先頭にある#!/usr/bin/env bash
というシバン行は、そのスクリプトをbash
で実行するようにOSに指示します。
-
Go言語のビルドシステム: Go言語は、その設計思想として「シンプルさ」と「高速なコンパイル」を重視しています。
go build
コマンドは、Goのソースファイルを自動的に検出し、必要な依存関係を解決して、単一の実行可能バイナリを生成します。これにより、外部のビルドツールや複雑な設定ファイルなしに、簡単にプロジェクトをビルドできるのが特徴です。
技術的詳細
このコミットにおける技術的な変更点は以下の通りです。
-
doc/articles/wiki/test.sh
からdoc/articles/wiki/test.bash
へのリネーム: これは単なるファイル名の変更ではなく、スクリプトの意図を明確にするためのものです。元のtest.sh
はシバン行で#!/usr/bin/env bash
と指定されており、実際にはbash
で実行されることを想定していました。しかし、ファイル名が.sh
であると、他の開発者がsh
互換のスクリプトだと誤解する可能性があります。特にFreeBSDのような環境では、デフォルトのsh
がbash
とは異なる挙動を示す場合があるため、ファイル名を.bash
にすることで、このスクリプトがbash
の機能に依存していることを明示し、互換性の問題を未然に防ぐ狙いがあります。 -
make
コマンドからgo build
コマンドへの置き換え:doc/articles/wiki/test.bash
スクリプト内で、get.bin
とfinal-test.bin
というGoプログラムのバイナリを生成する部分が、make get.bin
とmake final-test.bin
から、それぞれgo build -o get.bin get.go
とgo build -o final-test.bin final-test.go
に変更されています。make
の問題点: 2012年当時のGo言語プロジェクトにおいて、make
を使用することは、Goのビルドシステムがまだ成熟していなかった時期の名残である可能性があります。しかし、make
はMakefile
の記述に依存し、そのMakefile
が特定のOS(FreeBSD)のmake
実装と互換性がなかったり、期待通りの動作をしなかったりする問題を引き起こす可能性がありました。go build
の利点:go build
はGo言語の公式ツールチェインの一部であり、Goプログラムのビルドに最適化されています。go build -o <output_name> <source_file>
という形式は、指定されたGoソースファイルから指定された名前の実行可能バイナリを生成する標準的な方法です。これにより、OSや環境に依存しない、より堅牢でポータブルなビルドプロセスが実現されます。FreeBSDでのビルド問題を解決する直接的な手段として、この変更が採用されました。
-
src/run.bash
におけるスクリプト名の更新:src/run.bash
ファイルでは、doc/articles/wiki/test.sh
を実行していた箇所が、リネーム後の./test.bash
に更新されています。これは、ファイル名変更に伴う参照先の修正であり、機能的な変更ではありませんが、スクリプト間の依存関係を正しく保つために不可欠な変更です。
これらの変更は、Go言語プロジェクトが初期段階からクロスプラットフォーム対応とビルドの安定性を重視していたことを示しており、特定の環境での問題を解決しつつ、よりGoらしい(idiomaticな)ビルド方法へと移行する過程の一部と見ることができます。
コアとなるコードの変更箇所
diff --git a/doc/articles/wiki/test.sh b/doc/articles/wiki/test.bash
similarity index 70%
rename from doc/articles/wiki/test.sh
rename to doc/articles/wiki/test.bash
index 58b218a78a..5c2cb60dc0 100755
--- a/doc/articles/wiki/test.sh
+++ b/doc/articles/wiki/test.bash
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright 2010 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
set -e
wiki_pid=\
@@ -8,10 +11,10 @@ cleanup() {\n }\n trap cleanup 0 INT\n \n-make get.bin\n+go build -o get.bin get.go\n addr=$(./get.bin -addr)\n sed s/:8080/$addr/ < final.go > final-test.go\n-make final-test.bin\n+go build -o final-test.bin final-test.go\n (./final-test.bin) &\n wiki_pid=$!\n \ndiff --git a/src/run.bash b/src/run.bash
index 1c73e131d3..e97f55a0ba 100755
--- a/src/run.bash
+++ b/src/run.bash
@@ -71,7 +71,7 @@ time ./run
[ \"$GOARCH\" == arm ] || # uses network, fails under QEMU
(xcd ../doc/articles/wiki
make clean
-./test.sh
+./test.bash
) || exit $?\n \n echo\n
コアとなるコードの解説
上記の差分(diff)は、以下の主要な変更点を示しています。
-
ファイルのリネーム:
doc/articles/wiki/test.sh
がdoc/articles/wiki/test.bash
にリネームされています。similarity index 70%
は、ファイルの内容が70%類似していることを示しており、これはファイル名のみが変更され、内容も一部修正されたことを意味します。 -
doc/articles/wiki/test.bash
の変更:-
著作権表示の追加:
@@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright 2010 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. set -e
スクリプトの冒頭にGoプロジェクト標準の著作権表示が追加されています。これはコードのライセンスと所有権を明確にするための一般的なプラクティスです。
-
ビルドコマンドの変更:
-make get.bin +go build -o get.bin get.go addr=$(./get.bin -addr) sed s/:8080/$addr/ < final.go > final-test.go -make final-test.bin +go build -o final-test.bin final-test.go
get.bin
とfinal-test.bin
というGoプログラムのバイナリを生成する部分で、make
コマンドがgo build -o <出力ファイル名> <ソースファイル名>
という形式のgo build
コマンドに置き換えられています。make get.bin
は、Makefile
に定義されたget.bin
ターゲットを実行してバイナリを生成します。go build -o get.bin get.go
は、get.go
というGoソースファイルからget.bin
という名前の実行可能バイナリを直接生成します。 この変更により、ビルドプロセスがGo言語のネイティブツールに依存するようになり、make
の環境依存性やMakefile
の有無による問題を回避しています。
-
-
src/run.bash
の変更:diff --git a/src/run.bash b/src/run.bash index 1c73e131d3..e97f55a0ba 100755 --- a/src/run.bash +++ b/src/run.bash @@ -71,7 +71,7 @@ time ./run [ "$GOARCH" == arm ] || # uses network, fails under QEMU (xcd ../doc/articles/wiki make clean -./test.sh +./test.bash ) || exit $?\n \n echo\n
src/run.bash
スクリプト内で、doc/articles/wiki
ディレクトリに移動した後、./test.sh
を実行していた箇所が、リネーム後の./test.bash
に修正されています。これは、ファイル名変更に伴う参照先の更新であり、test.bash
スクリプトが正しく呼び出されるようにするための必須の変更です。
これらの変更は、Go言語プロジェクトがビルドの堅牢性とクロスプラットフォーム互換性を向上させるために、外部のビルドツールへの依存を減らし、Go自身のツールチェインを積極的に活用する方向へと進化していたことを示しています。
関連リンク
- Go言語公式ドキュメント: https://go.dev/doc/
go build
コマンドのドキュメント: https://go.dev/cmd/go/#hdr-Compile_packages_and_dependencies- Go言語のツールチェインに関する情報: https://go.dev/doc/go1.4#toolchain (Go 1.4のリリースノートですが、ツールチェインの進化について触れられています)
参考にした情報源リンク
- Go言語の公式ドキュメント
make
コマンドとシェルスクリプトに関する一般的な知識- Gitの差分表示(diff)の解釈に関する知識
- Go言語の初期のビルドシステムに関する一般的な情報(Goの歴史的文脈)
- FreeBSDにおけるシェル環境の特性に関する一般的な情報I have provided the detailed explanation as requested. I will now output the content to standard output.
# [インデックス 12503] ファイルの概要
このコミットは、Go言語プロジェクトのドキュメント関連スクリプトにおけるビルドプロセスの修正とファイル名の変更を目的としています。具体的には、FreeBSD環境でのビルド問題を解決するため、`make`コマンドによるビルドをGo言語のネイティブビルドコマンドである`go build`に置き換え、さらにスクリプトのファイル名を`.sh`から`.bash`に変更することで、命名規則の一貫性を保ち、スクリプトの実行環境を明確にしています。
## コミット
commit d56e0e7e9403236296da426854165b82600699e0 Author: Shenghou Ma minux.ma@gmail.com Date: Thu Mar 8 12:04:49 2012 +0900
doc: fix freebsd build
Also rename it to test.bash, for naming consistency.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5784045
## GitHub上でのコミットページへのリンク
[https://github.com/golang/go/commit/d56e0e7e9403236296da426854165b82600699e0](https://github.com/golang/go/commit/d56e0e7e9403236296da426854165b82600699e0)
## 元コミット内容
このコミットの元の内容は以下の通りです。
* **コミットメッセージ**: `doc: fix freebsd build`
* これは、ドキュメント関連のビルドプロセスにおいて、FreeBSD環境で発生していた問題を修正することを示しています。
* **追加の変更点**: `Also rename it to test.bash, for naming consistency.`
* これは、関連するスクリプトのファイル名を`test.sh`から`test.bash`に変更し、プロジェクト内の命名規則に一貫性を持たせることを示しています。
## 変更の背景
この変更の背景には、主に以下の2つの要因が考えられます。
1. **FreeBSD環境でのビルド問題の解決**:
Go言語はクロスプラットフォーム対応を重視していますが、特定のOS(この場合はFreeBSD)環境において、ビルドスクリプトが期待通りに動作しない問題が発生していた可能性があります。特に、`make`コマンドはUnix系システムで広く使われるビルドツールですが、その動作や`Makefile`の記述方法はOSや`make`の実装(GNU Make, BSD Makeなど)によって微妙に異なることがあります。これにより、FreeBSD環境で`make`が正しく動作しない、あるいは予期せぬ挙動を示すことがあったと考えられます。Go言語のネイティブビルドツールである`go build`を使用することで、このような環境依存の問題を回避し、より安定したビルドプロセスを確保することが目的です。
2. **命名規則の一貫性の確保**:
スクリプトのファイル名を`test.sh`から`test.bash`に変更することは、そのスクリプトが`bash`シェルに特化した機能を使用していることを明示し、プロジェクト全体の命名規則に一貫性を持たせるためです。多くのUnix系システムでは、`/bin/sh`は`bash`以外のシェル(例: `dash` on Debian/Ubuntu, `zsh` on macOS)へのシンボリックリンクである場合があります。`#!/usr/bin/env bash`というシバン(shebang)行は`bash`で実行することを指定していますが、ファイル名も`.bash`とすることで、その意図をより明確にし、誤解を防ぐことができます。これにより、開発者がスクリプトの実行に必要なシェル環境を容易に判断できるようになります。
## 前提知識の解説
このコミットを理解するためには、以下の技術的な前提知識が役立ちます。
* **`make`コマンドと`Makefile`**:
`make`は、プログラムのコンパイルやファイルの生成など、プロジェクトのビルドプロセスを自動化するためのユーティリティです。`Makefile`という設定ファイルに、ターゲット(生成したいファイル)と、それを生成するための依存関係およびコマンドを記述します。`make`は依存関係を解決し、必要なコマンドのみを実行することで、効率的なビルドを実現します。しかし、`Makefile`の記述は複雑になりがちで、OSや`make`の実装によって動作が異なる「環境依存性」の問題を抱えることがあります。
* **`go build`コマンド**:
`go build`は、Go言語に標準で備わっているビルドコマンドです。Goのソースコードをコンパイルし、実行可能なバイナリを生成します。`make`のような外部ツールに依存せず、Go言語のツールチェイン自体がビルドプロセスを管理するため、クロスプラットフォームでの一貫したビルドが容易です。Goモジュールシステムと連携し、依存関係の解決も自動で行います。
* **シェルスクリプト (`.sh` vs `.bash`)**:
シェルスクリプトは、Unix系OSのシェル(コマンドラインインターフェース)で実行されるコマンドのシーケンスを記述したスクリプトです。
* `.sh`拡張子は、一般的にPOSIX準拠のシェル(`sh`)で実行可能なスクリプトを示します。`sh`は最も基本的なシェルであり、多くのUnix系システムで利用できますが、機能は限定的です。
* `.bash`拡張子は、`bash`(Bourne-Again SHell)に特化した機能(例: 配列、高度な条件分岐、プロセス置換など)を使用しているスクリプトを示すことが多いです。`bash`は`sh`の上位互換であり、より多くの機能を提供しますが、すべてのシステムで`sh`が`bash`であるとは限りません。スクリプトの先頭にある`#!/usr/bin/env bash`というシバン行は、そのスクリプトを`bash`で実行するようにOSに指示します。
* **Go言語のビルドシステム**:
Go言語は、その設計思想として「シンプルさ」と「高速なコンパイル」を重視しています。`go build`コマンドは、Goのソースファイルを自動的に検出し、必要な依存関係を解決して、単一の実行可能バイナリを生成します。これにより、外部のビルドツールや複雑な設定ファイルなしに、簡単にプロジェクトをビルドできるのが特徴です。
## 技術的詳細
このコミットにおける技術的な変更点は以下の通りです。
1. **`doc/articles/wiki/test.sh` から `doc/articles/wiki/test.bash` へのリネーム**:
これは単なるファイル名の変更ではなく、スクリプトの意図を明確にするためのものです。元の`test.sh`はシバン行で`#!/usr/bin/env bash`と指定されており、実際には`bash`で実行されることを想定していました。しかし、ファイル名が`.sh`であると、他の開発者が`sh`互換のスクリプトだと誤解する可能性があります。特にFreeBSDのような環境では、デフォルトの`sh`が`bash`とは異なる挙動を示す場合があるため、ファイル名を`.bash`にすることで、このスクリプトが`bash`の機能に依存していることを明示し、互換性の問題を未然に防ぐ狙いがあります。
2. **`make`コマンドから`go build`コマンドへの置き換え**:
`doc/articles/wiki/test.bash`スクリプト内で、`get.bin`と`final-test.bin`というGoプログラムのバイナリを生成する部分が、`make get.bin`と`make final-test.bin`から、それぞれ`go build -o get.bin get.go`と`go build -o final-test.bin final-test.go`に変更されています。
* **`make`の問題点**: 2012年当時のGo言語プロジェクトにおいて、`make`を使用することは、Goのビルドシステムがまだ成熟していなかった時期の名残である可能性があります。しかし、`make`は`Makefile`の記述に依存し、その`Makefile`が特定のOS(FreeBSD)の`make`実装と互換性がなかったり、期待通りの動作をしなかったりする問題を引き起こす可能性がありました。
* **`go build`の利点**: `go build`はGo言語の公式ツールチェインの一部であり、Goプログラムのビルドに最適化されています。`go build -o <output_name> <source_file>`という形式は、指定されたGoソースファイルから指定された名前の実行可能バイナリを生成する標準的な方法です。これにより、OSや環境に依存しない、より堅牢でポータブルなビルドプロセスが実現されます。FreeBSDでのビルド問題を解決する直接的な手段として、この変更が採用されました。
3. **`src/run.bash`におけるスクリプト名の更新**:
`src/run.bash`ファイルでは、`doc/articles/wiki/test.sh`を実行していた箇所が、リネーム後の`./test.bash`に更新されています。これは、ファイル名変更に伴う参照先の修正であり、機能的な変更ではありませんが、スクリプト間の依存関係を正しく保つために不可欠な変更です。
これらの変更は、Go言語プロジェクトが初期段階からクロスプラットフォーム対応とビルドの安定性を重視していたことを示しており、特定の環境での問題を解決しつつ、よりGoらしい(idiomaticな)ビルド方法へと移行する過程の一部と見ることができます。
## コアとなるコードの変更箇所
```diff
diff --git a/doc/articles/wiki/test.sh b/doc/articles/wiki/test.bash
similarity index 70%
rename from doc/articles/wiki/test.sh
rename to doc/articles/wiki/test.bash
index 58b218a78a..5c2cb60dc0 100755
--- a/doc/articles/wiki/test.sh
+++ b/doc/articles/wiki/test.bash
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright 2010 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
set -e
wiki_pid=\
@@ -8,10 +11,10 @@ cleanup() {\n }\n trap cleanup 0 INT\n \n-make get.bin\n+go build -o get.bin get.go\n addr=$(./get.bin -addr)\n sed s/:8080/$addr/ < final.go > final-test.go\n-make final-test.bin\n+go build -o final-test.bin final-test.go\n (./final-test.bin) &\n wiki_pid=$!\n \ndiff --git a/src/run.bash b/src/run.bash
index 1c73e131d3..e97f55a0ba 100755
--- a/src/run.bash
+++ b/src/run.bash
@@ -71,7 +71,7 @@ time ./run
[ "$GOARCH" == arm ] || # uses network, fails under QEMU
(xcd ../doc/articles/wiki
make clean
-./test.sh
+./test.bash
) || exit $?\n \n echo\n
コアとなるコードの解説
上記の差分(diff)は、以下の主要な変更点を示しています。
-
ファイルのリネーム:
doc/articles/wiki/test.sh
がdoc/articles/wiki/test.bash
にリネームされています。similarity index 70%
は、ファイルの内容が70%類似していることを示しており、これはファイル名のみが変更され、内容も一部修正されたことを意味します。 -
doc/articles/wiki/test.bash
の変更:-
著作権表示の追加:
@@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright 2010 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. set -e
スクリプトの冒頭にGoプロジェクト標準の著作権表示が追加されています。これはコードのライセンスと所有権を明確にするための一般的なプラクティスです。
-
ビルドコマンドの変更:
-make get.bin +go build -o get.bin get.go addr=$(./get.bin -addr) sed s/:8080/$addr/ < final.go > final-test.go -make final-test.bin +go build -o final-test.bin final-test.go
get.bin
とfinal-test.bin
というGoプログラムのバイナリを生成する部分で、make
コマンドがgo build -o <出力ファイル名> <ソースファイル名>
という形式のgo build
コマンドに置き換えられています。make get.bin
は、Makefile
に定義されたget.bin
ターゲットを実行してバイナリを生成します。go build -o get.bin get.go
は、get.go
というGoソースファイルからget.bin
という名前の実行可能バイナリを直接生成します。 この変更により、ビルドプロセスがGo言語のネイティブツールに依存するようになり、make
の環境依存性やMakefile
の有無による問題を回避しています。
-
-
src/run.bash
の変更:diff --git a/src/run.bash b/src/run.bash index 1c73e131d3..e97f55a0ba 100755 --- a/src/run.bash +++ b/src/run.bash @@ -71,7 +71,7 @@ time ./run [ "$GOARCH" == arm ] || # uses network, fails under QEMU (xcd ../doc/articles/wiki make clean -./test.sh +./test.bash ) || exit $?\n \n echo\n
src/run.bash
スクリプト内で、doc/articles/wiki
ディレクトリに移動した後、./test.sh
を実行していた箇所が、リネーム後の./test.bash
に修正されています。これは、ファイル名変更に伴う参照先の更新であり、test.bash
スクリプトが正しく呼び出されるようにするための必須の変更です。
これらの変更は、Go言語プロジェクトがビルドの堅牢性とクロスプラットフォーム互換性を向上させるために、外部のビルドツールへの依存を減らし、Go自身のツールチェインを積極的に活用する方向へと進化していたことを示しています。
関連リンク
- Go言語公式ドキュメント: https://go.dev/doc/
go build
コマンドのドキュメント: https://go.dev/cmd/go/#hdr-Compile_packages_and_dependencies- Go言語のツールチェインに関する情報: https://go.dev/doc/go1.4#toolchain (Go 1.4のリリースノートですが、ツールチェインの進化について触れられています)
参考にした情報源リンク
- Go言語の公式ドキュメント
make
コマンドとシェルスクリプトに関する一般的な知識- Gitの差分表示(diff)の解釈に関する知識
- Go言語の初期のビルドシステムに関する一般的な情報(Goの歴史的文脈)
- FreeBSDにおけるシェル環境の特性に関する一般的な情報