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

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

このコミットは、Goプロジェクトのコードレビューダッシュボードに関連するpeople.goファイルに、より多くの貢献者(特に他者の代理でChange List (CL) をコミットした人々)を追加するものです。これにより、ダッシュボードが認識するGoコミュニティのメンバーリストが拡張され、コードレビュープロセスにおける人々の識別と管理が改善されます。

コミット

commit b7f29e259d2b0255ce22060ca7b8f8aaf2679487
Author: David Symonds <dsymonds@golang.org>
Date:   Fri Mar 15 14:33:00 2013 +1100

    misc/dashboard/codereview: add more people.
    
    I picked everyone who has committed a CL on behalf of someone else in recent times.
    
    R=r, rsc
    CC=golang-dev
    https://golang.org/cl/7836044
---
 misc/dashboard/codereview/dashboard/people.go | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/misc/dashboard/codereview/dashboard/people.go b/misc/dashboard/codereview/dashboard/people.go
index facda7baf0..45de03b1e3 100644
--- a/misc/dashboard/codereview/dashboard/people.go
+++ b/misc/dashboard/codereview/dashboard/people.go
@@ -21,6 +21,7 @@ func init() {
  	// and prefer to use their golang.org address for code review.
  	gophers := [...]string{
  		"adg",
+		"agl",
  		"bradfitz",
  		"campoy",
  		"dsymonds",
@@ -37,6 +38,24 @@ func init() {
  		emailToPerson[p+"@google.com"] = p
  		preferredEmail[p] = p + "@golang.org"
  	}\n+\t// Other people.\n+\tothers := map[string]string{\n+\t\t\"adonovan\": \"adonovan@google.com\",\n+\t\t\"brainman\": \"alex.brainman@gmail.com\",\n+\t\t\"ality\":    \"ality@pbrane.org\",\n+\t\t\"dfc\":      \"dave@cheney.net\",\n+\t\t\"dvyukov\":  \"dvyukov@google.com\",\n+\t\t\"gustavo\":  \"gustavo@niemeyer.net\",\n+\t\t\"jsing\":    \"jsing@google.com\",\n+\t\t\"mikioh\":   \"mikioh.mikioh@gmail.com\",\n+\t\t\"minux\":    \"minux.ma@gmail.com\",\n+\t\t\"rminnich\": \"rminnich@gmail.com\",\n+\t}\n+\tfor p, e := range others {\n+\t\tpersonList = append(personList, p)\n+\t\temailToPerson[e] = p\n+\t\tpreferredEmail[p] = e\n+\t}\n \n  	sort.Strings(personList)\n }\n```

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

[https://github.com/golang/go/commit/b7f29e259d2b0255ce22060ca7b8f8aaf2679487](https://github.com/golang/go/commit/b7f29e259d2b0255ce22060ca7b8f8aaf2679487)

## 元コミット内容

このコミットの目的は、Goプロジェクトのコードレビューダッシュボードが使用する人物リストに、より多くの人々を追加することです。具体的には、最近、他の開発者の代理としてChange List (CL) をコミットしたすべての人物が追加対象として選ばれました。これは、Goプロジェクトの貢献者ベースをより正確に反映し、コードレビュープロセスを円滑にするためのメンテナンス作業の一環です。

## 変更の背景

Goプロジェクトのような大規模なオープンソースプロジェクトでは、多くの開発者が貢献し、コードレビューが行われます。時には、特定の開発者が別の開発者のためにコードをコミットする「代理コミット」が行われることがあります。これは、例えば、パッチを提出した人が直接コミット権を持たない場合や、特定のメンテナが複数の貢献者の変更をまとめてコミットする場合などに発生します。

このコミットの背景には、Goのコードレビューダッシュボードが、これらの代理コミットを行った人々を適切に認識し、表示する必要があったという事情があります。ダッシュボードは、プロジェクトの活動状況を可視化し、誰がどのような貢献をしているかを追跡するために重要です。代理コミットを行う人々は、プロジェクトの重要な一部であり、彼らの活動をダッシュボードに反映させることで、プロジェクト全体の透明性と管理性が向上します。

## 前提知識の解説

### Goプロジェクトの貢献モデルとコードレビュー

Goプロジェクトは、Gerritというコードレビューシステムを主要なツールとして使用しています。開発者は、変更を提案する際に「Change List (CL)」と呼ばれる単位でコードを提出します。このCLは、レビューアによってレビューされ、承認された後にコミットされます。

*   **Change List (CL)**: Goプロジェクトにおけるコード変更の提案単位。Gerrit上で管理され、レビューと承認を経てコミットされます。
*   **Gerrit**: Goプロジェクトが採用しているオープンソースのコードレビューシステム。変更の提案、レビュー、承認、コミットのワークフローを管理します。
*   **代理コミット**: コミットメッセージの`Author`フィールドには実際のコード作成者が、`Committer`フィールドにはそのコードをリポジトリにコミットした人が記録されます。Goプロジェクトでは、コミット権を持つメンテナが、コミット権を持たない貢献者のCLを代理でコミットすることがよくあります。この場合、`Author`は貢献者、`Committer`はメンテナとなります。

### コードレビューダッシュボード

Goプロジェクトには、コードレビューの状況や貢献者の活動を一覧できるダッシュボードが存在します。これは、プロジェクトの健全性を監視し、ボトルネックを特定し、貢献を可視化するために利用されます。`misc/dashboard/codereview`は、このダッシュボードに関連するコードの一部であり、特に`people.go`ファイルは、ダッシュボードが認識すべき人物(貢献者、レビューアなど)のリストを管理しています。

### Go言語の`init()`関数とマップ

*   **`init()`関数**: Go言語の特別な関数で、パッケージがインポートされた際に自動的に実行されます。通常、プログラムの起動時に必要な初期化処理(例:グローバル変数の設定、マップの初期化など)に使用されます。このコミットでは、`init()`関数内で人物リストの初期化が行われています。
*   **マップ (`map[keyType]valueType`)**: キーと値のペアを格納するGoのデータ構造です。このコミットでは、`emailToPerson`(メールアドレスから人物名へのマッピング)と`preferredEmail`(人物名から優先メールアドレスへのマッピング)という2つのマップが使用されており、これらはコードレビューダッシュボードが人物を識別し、関連する情報を表示するために利用されます。

## 技術的詳細

このコミットは、`misc/dashboard/codereview/dashboard/people.go`ファイルに対して行われています。このファイルは、Goプロジェクトのコードレビューダッシュボードが使用する人物のリストを定義しています。

ファイル内の`init()`関数は、プログラムの起動時に実行され、以下の2つの主要なマップを初期化します。

1.  `emailToPerson`: メールアドレスをキーとし、対応する人物名を値とするマップ。
2.  `preferredEmail`: 人物名をキーとし、その人物の優先メールアドレスを値とするマップ。

これらのマップは、ダッシュボードがコードレビューのデータ(例:コミットの作者、レビューア)を処理する際に、メールアドレスから人物名を特定したり、人物名から表示すべきメールアドレスを取得したりするために使用されます。

変更前は、主にGoチームのコアメンバー(`gophers`配列にリストされている人々)がこれらのマップに登録されていました。このコミットでは、新たに`others`というマップが導入され、より広範な貢献者(特に代理コミットを行った人々)が追加されています。

`others`マップは、人物名(例: "adonovan")をキーとし、その人物のメールアドレス(例: "adonovan@google.com")を値とする形式で定義されています。このマップの各エントリは、ループ処理によって`personList`(人物名のスライス)、`emailToPerson`、および`preferredEmail`マップに追加されます。

これにより、ダッシュボードは、これらの新しく追加された人物の活動も正確に追跡し、表示できるようになります。

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

```diff
--- a/misc/dashboard/codereview/dashboard/people.go
+++ b/misc/dashboard/codereview/dashboard/people.go
@@ -21,6 +21,7 @@ func init() {
  	// and prefer to use their golang.org address for code review.
  	gophers := [...]string{
  		"adg",
+		"agl",
  		"bradfitz",
  		"campoy",
  		"dsymonds",
@@ -37,6 +38,24 @@ func init() {
  		emailToPerson[p+"@google.com"] = p
  		preferredEmail[p] = p + "@golang.org"
  	}\n+\t// Other people.\n+\tothers := map[string]string{\n+\t\t\"adonovan\": \"adonovan@google.com\",\n+\t\t\"brainman\": \"alex.brainman@gmail.com\",\n+\t\t\"ality\":    \"ality@pbrane.org\",\n+\t\t\"dfc\":      \"dave@cheney.net\",\n+\t\t\"dvyukov\":  \"dvyukov@google.com\",\n+\t\t\"gustavo\":  \"gustavo@niemeyer.net\",\n+\t\t\"jsing\":    \"jsing@google.com\",\t\t\"mikioh\":   \"mikioh.mikioh@gmail.com\",\n+\t\t\"minux\":    \"minux.ma@gmail.com\",\n+\t\t\"rminnich\": \"rminnich@gmail.com\",\n+\t}\n+\tfor p, e := range others {\n+\t\tpersonList = append(personList, p)\n+\t\temailToPerson[e] = p\n+\t\tpreferredEmail[p] = e\n+\t}\n \n  	sort.Strings(personList)\

コアとなるコードの解説

このコミットの主要な変更は、misc/dashboard/codereview/dashboard/people.goファイル内のinit()関数にあります。

  1. gophers配列への追加:

    gophers := [...]string{
    	"adg",
    	"agl", // <-- 追加された行
    	"bradfitz",
    	// ...
    }
    

    gophers配列は、Goプロジェクトの主要な貢献者(Goチームのメンバーなど)をリストアップしています。このコミットでは、"agl"という人物がこのリストに追加されました。これは、彼がGoプロジェクトのコアな活動に深く関わっていることを示唆しています。

  2. othersマップの導入と処理:

    	// Other people.
    	others := map[string]string{
    		"adonovan": "adonovan@google.com",
    		"brainman": "alex.brainman@gmail.com",
    		"ality":    "ality@pbrane.org",
    		"dfc":      "dave@cheney.net",
    		"dvyukov":  "dvyukov@google.com",
    		"gustavo":  "gustavo@niemeyer.net",
    		"jsing":    "jsing@google.com",
    		"mikioh":   "mikioh.mikioh@gmail.com",
    		"minux":    "minux.ma@gmail.com",
    		"rminnich": "rminnich@gmail.com",
    	}
    	for p, e := range others {
    		personList = append(personList, p)
    		emailToPerson[e] = p
    		preferredEmail[p] = e
    	}
    

    この部分がこのコミットの最も重要な変更点です。

    • othersという新しいmap[string]stringが定義されました。このマップは、人物の短い識別子(例: "adonovan")をキーとし、その人物の完全なメールアドレスを値として保持します。これらの人物は、コミットメッセージにあるように「最近、他の開発者の代理としてCLをコミットした人々」です。
    • for p, e := range othersループを使って、othersマップの各エントリが処理されます。
      • personList = append(personList, p): 人物識別子(例: "adonovan")が、ダッシュボードが認識する全人物名のスライスpersonListに追加されます。
      • emailToPerson[e] = p: メールアドレス(例: "adonovan@google.com")をキーとして、対応する人物識別子(例: "adonovan")を値とするエントリがemailToPersonマップに追加されます。これにより、ダッシュボードはメールアドレスから人物を特定できます。
      • preferredEmail[p] = e: 人物識別子(例: "adonovan")をキーとして、その人物の優先メールアドレス(例: "adonovan@google.com")を値とするエントリがpreferredEmailマップに追加されます。これにより、ダッシュボードは人物名から表示すべきメールアドレスを取得できます。

これらの変更により、Goのコードレビューダッシュボードは、より多くの貢献者、特に代理コミットを行う人々を正確に識別し、彼らの活動をダッシュボード上で適切に表示できるようになります。これは、プロジェクトの貢献者ベースの拡大に対応し、ダッシュボードの機能性を向上させるための重要な更新です。

関連リンク

参考にした情報源リンク