概要
- GitHubのコードレビュー体験に不満を持つ開発者の視点
- git-reviewツールによるローカル重視のレビュー実験の経緯
- コメントをコミットとして管理するアプローチの利点と課題
- 実装面での摩擦や運用上の問題点
- 今後の展望と関連プロジェクトの紹介
GitHubのコードレビュー体験への課題意識
-
多くの人が GitHubのコードレビュー プロセスに不満を持つ現状
-
Stacked Pull Requests や interdiffレビュー が十分にサポートされていない問題
-
レビュー状態が リポジトリ自体に保存されない ことへの不満
-
Webインターフェース中心 のリモートレビュー体験が主流
- Jane Streetのような ローカル中心のワークフロー の例外
ローカルでのレビュー体験の理想
- コード執筆同様、 レビューもローカルで完結 させたいニーズ
- ローカルで ブランチをチェックアウト し、差分や本体コードを自在に閲覧
- magit などのツールで効率的なレビュー操作
- gitのステージングエリア を使い、既読ファイルの管理
- テスト実行やリファクタ提案 など、自由度の高いレビュー作業
GitHubのWebレビューの不便さ
- フィードバック投稿時に Webブラウザを開く必要 がある手間
- HTTPラウンドトリップ による遅延や、大きな差分での テキストエリアのラグ
- レビューコメントの インライン性 や 即時性 が損なわれる問題
git-reviewツールの発想と実装
- レビュー内容を1コミット としてPRブランチの先頭に追加する設計
- 特定マーカー付きコメント でレビュー内容を管理
- レビューは 著者とレビュワーがコミットを直接編集 して進行
- 全スレッドが//? resolvedで解決されたら リバートコミット を追加し終了
git-review運用上の課題
- レビューコメントとコード修正の競合 発生リスク
- deep commitや新規コミット追加時の コメント位置の衝突問題
- --force-with-lease 運用の煩雑さ
- コードでは厳密な履歴管理が求められる一方、レビューでは 緩やかなマージ規則 が理想
- コメントのpush/popを自動化するには 複雑なツール化 が必要
今後の展望と他のアプローチ
-
GerritスタイルのChange-Id がgit本体に導入される可能性
- これにより コミット単位のinterdiffレビュー が実現する期待
- git-reviewのアプローチとは 部分的に非互換
- Change-Id単位で 全バージョンの履歴管理 や コメント追加 ができる可能性
-
現時点では Webインターフェース型レビュー に戻った現状
-
より良いレビュー体験 の実現に向けた他プロジェクトの紹介
- Fossil: 全てをリポジトリ内に保存 するSCM
- GerritのNoteDb: レビュー状態をgit内で管理
- git-bug: イシュー情報をgitで管理
- git-appraise: レビュー情報をgitで管理
- prr: エディタ内レビューインターフェース をGitHub API上に実装
- How Jane Street Does Code Review: 理想的なレビュー体験の実例
結論
- git-reviewアプローチは 部分的には有効 だが、運用や実装の摩擦が大きい
- コードレビュー体験の革新 には、今後も新たなツールや仕組みが求められる状況
- ローカル主体のレビュー体験 や リポジトリ内状態管理 への挑戦は今後も重要な課題