[インデックス 10059] ファイルの概要
このコミットは、Go言語のコードレビューシステムにおいて、LGTM(Looks Good To Me)情報を表示する機能を追加する改良です。2011年当時、GoプロジェクトはMercurialを使用してGoogleCodeでホストされており、独自のコードレビューシステムであるcodereview.py
を使用していました。
コミット
- コミットハッシュ:
c0523e1db9bffc6a799775aea891606b1235564d
- 作成者: Russ Cox rsc@golang.org
- 日付: 2011年10月19日 15:08:33 -0400
- タイトル: "codereview: show LGTMs in hg p"
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/c0523e1db9bffc6a799775aea891606b1235564d
元コミット内容
codereview: show LGTMs in hg p
Shows first line of any response that the codereview server
has identified as an LGTM. Example output below.
5305046:
big: update for fmt interface changes
Nothing terribly interesting here.
Reviewer: gri@golang.org
gri: LGTM
CC: golang-dev@googlegroups.com
Files:
src/pkg/big/int.go
src/pkg/big/nat.go
src/pkg/big/nat_test.go
src/pkg/big/rat.go
5307044:
exp/template/html: use rune
Nothing terribly interesting here.
Reviewer: mikesamuel@gmail.com, nigeltao@golang.org
mikesamuel: I don't see a type def for rune. Assuming that's a new intrinsic, LGTM.
CC: golang-dev@googlegroups.com
Files:
src/pkg/exp/template/html/css.go
src/pkg/exp/template/html/css_test.go
src/pkg/exp/template/html/html.go
src/pkg/exp/template/html/js.go
変更の背景
2011年当時、Go言語プロジェクトはまだGoogle Codeでホストされ、Mercurialを使用したバージョン管理システムを採用していました。開発チームは、コードレビューの承認状況を開発者が効率的に確認できるようにするため、レビューサーバーが識別したLGTM(Looks Good To Me)情報をhg p
コマンドの出力に含めることを決定しました。
この変更により、開発者は各変更リスト(changelist)に対するレビュー承認状況を一目で確認できるようになり、開発プロセスの透明性と効率性が向上しました。
前提知識の解説
LGTM(Looks Good To Me)とは
LGTM(Looks Good To Me)は、ソフトウェア開発のコードレビューにおいて、レビュアーがコードを確認し、問題がないと判断した際に使用する承認の意思表示です。この承認により、コードの変更が本番環境に統合される準備が整ったことを示します。
Mercurialとは
Mercurialは、Gitと並んで使用される分散型バージョン管理システムです。2011年当時、多くのプロジェクトがMercurialを使用しており、Goプロジェクトも初期の段階ではMercurialを採用していました。
Google Codeとは
Google Codeは、Googleが提供していたオープンソースプロジェクトのホスティングサービスです。2006年から2016年まで運営され、多くのプロジェクトがこのプラットフォームで開発されていました。
codereview.pyとは
codereview.pyは、GoogleがMercurialベースのプロジェクトで使用していたコードレビューツールです。このツールは、レビュープロセスの自動化、レビュー状況の追跡、レビューサーバーとの統合を行っていました。
技術的詳細
この変更は、CLクラス(Change List クラス)にLGTM情報を追加し、レビューサーバーから取得したメッセージを解析してLGTM情報を抽出する機能を実装しています。
主な技術的な特徴:
- データ構造の拡張: CLクラスに
lgtm
リストを追加 - メッセージ解析: レビューサーバーからのメッセージを解析し、承認フラグを確認
- 表示機能: LGTM情報を適切にフォーマットして表示
- 正規表現の使用: メール形式の送信者情報やテキスト内容の整形
コアとなるコードの変更箇所
1. CLクラスの初期化部分(行53)
+ self.lgtm = []
新しいCLオブジェクトが作成される際に、LGTM情報を格納するための空のリストを初期化します。
2. DiskText メソッドの出力部分(行61-62)
+ for (who, line) in cl.lgtm:
+ s += "\t\t" + who + ": " + line + "\n"
LGTM情報を含むテキスト出力を生成する際に、各LGTMエントリーをフォーマットして出力文字列に追加します。
3. LoadCL関数のLGTM解析部分(行70-75)
+ cl.lgtm = []
+ for m in d.get('messages', []):
+ if m.get('approval', False) == True:
+ who = re.sub('@.*', '', m.get('sender', ''))
+ text = re.sub("\n(.|\n)*", '', m.get('text', ''))
+ cl.lgtm.append((who, text))
レビューサーバーからのデータを解析し、承認フラグが設定されたメッセージからLGTM情報を抽出します。
コアとなるコードの解説
LGTM情報の格納構造
self.lgtm = []
LGTMリストは、タプル形式(who, line)
でレビュアーの情報とLGTMコメントの最初の行を格納します。これにより、誰がいつ承認したかを簡潔に追跡できます。
メッセージ解析のロジック
for m in d.get('messages', []):
if m.get('approval', False) == True:
who = re.sub('@.*', '', m.get('sender', ''))
text = re.sub("\n(.|\n)*", '', m.get('text', ''))
cl.lgtm.append((who, text))
このコードは以下の処理を実行します:
- レビューサーバーからの全メッセージを反復処理
- 承認フラグが設定されたメッセージのみを選別
- 送信者のメールアドレスからドメイン部分を除去(
@.*
を削除) - メッセージテキストから最初の行のみを抽出(改行以降を削除)
- 抽出した情報をLGTMリストに追加
表示フォーマット
for (who, line) in cl.lgtm:
s += "\t\t" + who + ": " + line + "\n"
LGTM情報は、レビュアー名とそのコメントの最初の行をタブインデント付きで表示します。これにより、コマンドライン出力で視覚的にLGTM情報を区別できます。