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

[インデックス 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情報を抽出する機能を実装しています。

主な技術的な特徴:

  1. データ構造の拡張: CLクラスにlgtmリストを追加
  2. メッセージ解析: レビューサーバーからのメッセージを解析し、承認フラグを確認
  3. 表示機能: LGTM情報を適切にフォーマットして表示
  4. 正規表現の使用: メール形式の送信者情報やテキスト内容の整形

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

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))

このコードは以下の処理を実行します:

  1. レビューサーバーからの全メッセージを反復処理
  2. 承認フラグが設定されたメッセージのみを選別
  3. 送信者のメールアドレスからドメイン部分を除去(@.*を削除)
  4. メッセージテキストから最初の行のみを抽出(改行以降を削除)
  5. 抽出した情報をLGTMリストに追加

表示フォーマット

for (who, line) in cl.lgtm:
    s += "\t\t" + who + ": " + line + "\n"

LGTM情報は、レビュアー名とそのコメントの最初の行をタブインデント付きで表示します。これにより、コマンドライン出力で視覚的にLGTM情報を区別できます。

関連リンク

参考にした情報源リンク

  1. Go Wiki: CodeReview - The Go Programming Language
  2. What's the story behind the revision history of Go? - Stack Overflow
  3. Russ Cox Steps Down as Tech Lead of Go Programming Language
  4. Google Engineering Practices Documentation
  5. Go: A Documentary