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

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

このコミットは、Go言語のリリースノートである doc/go1.3.txt ファイルに、cmd/gofmt ツールに関する重要な変更点を追記するものです。具体的には、gofmt から -tabwidth および -tabs フラグが削除されたことを記録しています。このコミット自体はコードの動作を変更するものではなく、既存の変更(CL 52170043)を公式ドキュメントに反映させるためのものです。

コミット

  • コミットハッシュ: c0eb88029ecc92a25aebf388f86426e27552bd30
  • 作者: Brad Fitzpatrick bradfitz@golang.org
  • コミット日時: 2014年1月14日 火曜日 12:27:51 -0800

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

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

元コミット内容

doc: add cmd/gofmt entry to go1.3.txt

R=golang-codereviews, minux.ma
CC=golang-codereviews
https://golang.org/cl/52240043

変更の背景

このコミットの背景には、Go言語の設計哲学である「一貫性と標準化」があります。Go言語は、コードの可読性と保守性を高めるために、厳格なコーディングスタイルを推奨しています。その中心的なツールが gofmt です。

以前の gofmt には、インデントの幅(-tabwidth)や、タブとスペースのどちらを使用するか(-tabs)を設定するオプションが存在しました。しかし、これらのオプションが存在することで、開発者間で異なるフォーマット設定が使用される可能性があり、結果としてコードベース全体の一貫性が損なわれるリスクがありました。

Go言語の設計者は、このような設定の自由度が、かえってコードの統一性を妨げると判断しました。gofmt の目的は、開発者がフォーマットについて考える時間をなくし、すべてのGoコードが同じように見えるようにすることです。そのため、gofmt のデフォルトのフォーマットルール(タブによるインデントと、それに続くスペースによるアラインメント)を強制し、設定オプションを削除することで、この目標をさらに強化する決定がなされました。

このコミットは、その決定(CL 52170043)がGo 1.3のリリースノートに適切に記載されるようにするためのものです。

前提知識の解説

  • gofmt: gofmt はGo言語の公式なコードフォーマッタです。Goのソースコードを解析し、Goの標準的なスタイルガイドに沿って自動的に整形します。これにより、開発者はコードのフォーマットについて議論する時間を節約でき、すべてのGoコードが統一された見た目になります。gofmt は、タブをインデントに、スペースをアラインメントに使用するという独自のルールを持っています。
  • Goのコーディングスタイル: Go言語は、他の多くの言語とは異なり、非常に厳格なコーディングスタイルを推奨し、それを gofmt によって強制します。これは、コードベース全体の一貫性を保ち、新しい開発者がプロジェクトに参加した際にすぐにコードを理解できるようにするためです。
  • -tabwidth フラグ (削除前): このフラグは、タブ文字が何個のスペースに相当するかを設定するために使用されていました。例えば、-tabwidth=4 と設定すると、1つのタブが4つのスペースとして扱われます。
  • -tabs フラグ (削除前): このフラグは、インデントにタブ文字を使用するか、それともスペース文字を使用するかを切り替えるために使用されていました。true に設定するとタブが使用され、false に設定するとスペースが使用されます。
  • CL (Change List): Goプロジェクトでは、変更は「Change List (CL)」として提出され、レビューされます。https://golang.org/cl/52240043 は、このコミットが参照している、gofmt から -tabwidth-tabs フラグを実際に削除した変更の識別子です。

技術的詳細

このコミット自体は、doc/go1.3.txt というテキストファイルに1行追加するだけの非常にシンプルな変更です。しかし、その背後にある技術的意味合いは重要です。

gofmt から -tabwidth-tabs フラグが削除されたことにより、gofmt の動作は完全に固定され、ユーザーがインデントスタイルをカスタマイズする余地がなくなりました。これは、Go言語のコードベース全体で、以下のインデントルールが厳密に適用されることを意味します。

  1. インデントにはタブ文字 (\t) を使用する。
  2. アラインメント(例えば、変数宣言の右辺を揃えるなど)にはスペース文字 ( ) を使用する。
  3. タブ幅は、表示環境に依存する(通常は8文字幅として表示されることが多いが、エディタの設定に依存する)。

この変更は、Goのツールチェーンが提供する「意見のある(opinionated)」アプローチを強化するものです。開発者はインデントスタイルについて議論したり、プロジェクトごとに異なる設定を管理したりする必要がなくなります。これにより、コードレビューの焦点がスタイルからロジックへと移り、開発効率が向上します。

この変更は、Go 1.3リリースの一部として導入され、Goコミュニティ全体にわたるコードの一貫性をさらに推進しました。

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

このコミットによって変更されたファイルは doc/go1.3.txt のみです。 追加された行は以下の通りです。

--- a/doc/go1.3.txt
+++ b/doc/go1.3.txt
@@ -1,3 +1,4 @@
+cmd/gofmt: remove -tabwidth and -tabs flags (CL 52170043)
 liblink: pull linker i/o into separate liblink C library (CL 35790044)
 misc/dist: renamed misc/makerelease (CL 39920043)
 syscall: add NewCallbackCDecl to use for windows callbacks (CL 36180044)

具体的には、doc/go1.3.txt の冒頭に cmd/gofmt: remove -tabwidth and -tabs flags (CL 52170043) という行が追加されています。

コアとなるコードの解説

このコミットの「コアとなるコード」は、doc/go1.3.txt に追加された1行のテキストです。この行は、Go 1.3のリリースで導入された重要な変更点の一つとして、gofmt から -tabwidth-tabs フラグが削除されたことを公式に記録しています。

このコミット自体は、gofmt の動作を変更するものではありません。gofmt のフラグ削除は、このコミットが参照している別の変更(CL 52170043)によって既に行われています。このコミットの役割は、その変更をユーザーに知らせるためのドキュメントを更新することにあります。

go1.3.txt のようなファイルは、Goの各バージョンの新機能、変更点、非推奨事項などをまとめたリリースノートとして機能します。このコミットは、Goのドキュメンテーションが、ツールの動作変更を正確に反映し、ユーザーが新しいバージョンで何が変更されたかを理解できるようにするための、継続的なプロセスの一部を示しています。

関連リンク

  • 参照されている変更リスト (CL): https://golang.org/cl/52170043
    • このCLが、実際に gofmt から -tabwidth-tabs フラグを削除した変更です。

参考にした情報源リンク