OSSコードレビューツール比較:Gerrit vs Review Board vs Phabricator でGitHubを補完するセルフホスト型レビュー環境
オープンソースラボ編集部 ・ 2026年6月13日
OSSコードレビューツール比較:Gerrit vs Review Board vs Phabricator でGitHubを補完するセルフホスト型レビュー環境
GitHub/GitLab のPRレビューは便利ですが、「大規模なコードベースのパッチを送りたい」「コードレビューだけをオフラインで管理したい」「独自のワークフローを構築したい」というニーズにはGerrit(Googleの成果物)・Review Board(Beanbag社のOSS)・Phabricator(Meta発のOSS、現Phorge)が適しています。これらは大企業のコードレビュープロセスを支える実績あるOSSです。
OSSコードレビューツールを選ぶ理由
- 大規模モノレポ対応: Androidのソースコード(億行規模)はGerritで管理されている
- パッチベースレビュー: コミット前のコードをレビューするPre-commitレビューフロー
- 独自ワークフロー: 「2名のLGTMが必要」「特定のオーナーの承認が必要」等のカスタムルール
- CI統合: Jenkins・GitHub Actions等のCIとレビューステータスを連動
- フルオフライン対応: エアギャップ環境(インターネットのない閉域網)での開発
主要ツールの概要
Gerrit
Google社内で開発され、Android Open Source Project(AOSP)・Chromium・Eclipse等の大規模OSSプロジェクトで使用されているコードレビューシステムです。GitHubスター1k+(公式ミラー)。**パッチセット(Patchset)**という概念でコードの変更を管理し、レビュワーがCode-Review+2・Verified+1等のラベルでスコアを付けてマージ条件を制御できます。Gitリポジトリサーバーも内蔵しており、Gerrit単体でGit+コードレビューの全機能を持ちます。
# GerritをDockerで起動
docker run -d --name gerrit --restart always -p 8080:8080 -p 29418:29418 -v gerrit_site:/var/gerrit/review_site -e CANONICAL_WEB_URL=http://gerrit.yourcompany.com -e AUTH_TYPE=LDAP -e LDAP_SERVER=ldap://your-ldap:389 -e LDAP_ACCOUNT_BASE=DC=yourcompany,DC=com gerritcodereview/gerrit:latest
# 初期化(初回のみ)
docker exec gerrit java -jar /var/gerrit/review_site/bin/gerrit.war init --batch -d /var/gerrit/review_site
# Gerrit REST APIでレビュー状況を確認
curl -u admin:your-password "http://gerrit.yourcompany.com/a/changes/?q=status:open&n=10" | python -m json.tool
# Gerrit REST APIをPythonから操作する
import requests
from requests.auth import HTTPBasicAuth
GERRIT_URL = "https://gerrit.yourcompany.com"
auth = HTTPBasicAuth("bot-user", "your-http-password")
def get_open_changes(project: str = None, limit: int = 25):
'''オープンなレビュー一覧を取得'''
params = {"q": f"status:open{f' project:{project}' if project else ''}", "n": limit}
res = requests.get(f"{GERRIT_URL}/a/changes/", auth=auth, params=params)
# Gerrit APIはXSS対策でレスポンスの先頭に)]}'があるので除去
return res.json()
def add_review(change_id: str, revision_id: str, message: str, code_review: int = 0):
'''レビューコメントとスコアを追加'''
payload = {
"message": message,
"labels": {"Code-Review": code_review} # -2,-1,0,+1,+2
}
res = requests.post(
f"{GERRIT_URL}/a/changes/{change_id}/revisions/{revision_id}/review",
auth=auth,
json=payload
)
return res.json()
def abandon_change(change_id: str, message: str = ""):
'''変更を破棄する'''
res = requests.post(
f"{GERRIT_URL}/a/changes/{change_id}/abandon",
auth=auth,
json={"message": message}
)
return res.status_code
# CIからGerritに結果を報告する例(Verified+1/-1)
def report_ci_result(change_id: str, revision_id: str, success: bool, build_url: str):
label = 1 if success else -1
message = f"CI {'成功' if success else '失敗'}: {build_url}"
add_review(change_id, revision_id, message, code_review=0)
# Verifiedラベルを設定(CIボットのみが設定可能)
payload = {"labels": {"Verified": label}, "message": message}
requests.post(
f"{GERRIT_URL}/a/changes/{change_id}/revisions/{revision_id}/review",
auth=auth, json=payload
)
Review Board
Django製のWebベースのコードレビューツールです。GitHubスター1.5k+。Git・SVN・Mercurial・Perforce等多数のVCSに対応しており、GitHubのPR以前から使われている成熟したツールです。差分表示・コメント・添付ファイル・インラインコードコメントが洗練されており、ドキュメントレビュー(コードだけでなくMarkdown・テキストファイルのレビューも可能)にも対応しています。
# Review BoardをDockerで起動
docker run -d --name reviewboard --restart always -p 8080:80 -v rb_data:/var/lib/reviewboard -e SECRET_KEY=your-secret-key -e DB_ENGINE=django.db.backends.mysql -e DB_NAME=reviewboard -e DB_USER=rb -e DB_PASSWORD=your-password -e DB_HOST=your-mysql-host reviewboard/reviewboard:latest
# Review Board CLIツール(rbt)でコードをレビューに送信
# pip install RBTools
# Gitリポジトリで差分をReview Boardに投稿
rbt post --server https://review.yourcompany.com --username your-username --repository-type git --branch main HEAD~3..HEAD
# レビューリクエストに説明を追加してパブリッシュ
rbt post --server https://review.yourcompany.com -g reviewer1,reviewer2 --summary "新機能: ユーザー認証フローの改善" --description "OAuth2.0のフローを刷新。既存の直接ログインとの互換性を維持。"
Phabricator(Phorge)
Facebookで開発され2021年にEOL(メンテナンス終了)しましたが、コミュニティフォークのPhorge(Phabricator forge)として継続開発されています。GitHubスター:Phorge 900+。Arcanist CLIツール(arcコマンド)によるリッチなワークフロー・タスク管理(Maniphest)・ドキュメント(Phriction)・コードホスティング(Diffusion)・レビュー(Differential)が一体化したオールインワンの開発プラットフォームです。
# Phorge(Phabricatorフォーク)のArcanistでコードをレビューに送る
# pip install arcanist (またはcomposer global require phacility/arcanist)
# プロジェクトにArcファイルを設定
cat > .arcconfig << 'EOF'
{
"phabricator.uri": "https://phorge.yourcompany.com/",
"project.name": "my-project"
}
EOF
# 差分をPhorgeに送信してレビューリクエスト作成
arc diff HEAD~1
# レビュー承認後にランドする(コミットをプッシュ)
arc land --onto main
# タスクを作成(Maniphest)
echo '{"title":"バグ修正: ログインのタイムアウト問題", "priority": "high"}' | arc call-conduit maniphest.createtask
機能比較表
| 比較項目 | Gerrit | Review Board | Phorge |
|---|---|---|---|
| ライセンス | Apache-2.0 | MIT | Apache-2.0 |
| 対象規模 | 大規模(万人) | 中規模 | 中〜大規模 |
| VCS対応 | Git専用 | Git/SVN/Perforce等 | Git/SVN/Mercurial |
| Gitサーバー内蔵 | ✅ | ❌ | ✅(Diffusion) |
| タスク管理 | ❌ | ❌ | ✅(Maniphest) |
| Pre-commitレビュー | ✅ | ✅ | ✅ |
| REST API | ✅ | ✅ | ✅(Conduit) |
GerritはDevOpsカテゴリ/categories/devopsのCI/CDパイプラインと組み合わせるとコードレビューとデプロイが自動連動します。大規模コードベースのモノレポ管理ツールも同カテゴリ/categories/devopsを参照してください。
FAQ
Q. GerritとGitHub Pull Requestの主な違いは何ですか?
A. 最大の違いはレビューの粒度とマージ前の担保です。GitHub PRはブランチ単位でレビューし、複数のコミットをまとめてマージします。Gerritはコミット(パッチセット)単位でレビューし、1コミット = 1レビューが基本です。Gerritの特徴: ①各コミットが独立したCode-Review+2スコアを得るまでマージ不可②複数のレビュワーのスコアを集計(例: 2名のCode-Review+2が必要)③Verify(CI通過)とCode-Reviewの独立した承認が必要④パッチセット(同じコミットの修正版)を重ねて管理し、レビューコメントが引き継がれる。Googleが採用している理由はコミット1件1件の品質保証をプロセスに組み込めるためです。小規模チームには過剰ですが、数十人〜数百人が同一リポジトリにコミットする大規模プロジェクトでは強力です。
Q. 既存のGitHubリポジトリをGerritに移行せず、GerritをGitHubのコードレビュー補完として使えますか?
A. GitHub Mirrorプラグインを使えば可能ですが、設定が複雑です。現実的な方法: Gerritをプロキシとして使い、Gerritへのプッシュ→Gerritでレビュー→GitHubにミラーする構成。ただし多くのチームは「Gerritを全面採用するか、GitHubのPRを使うか」どちらかを選びます。折衷案として: GitHub PRをベースにしつつ、Gerrit的な「コミット単位のレビュー」を実現したい場合はgit commit --fixupとgit rebase --autosquashを組み合わせる手動フロー、またはLinear Historyをリポジトリ設定で強制する(スカッシュマージ禁止)方法があります。
Q. PhorgeはPhabricatorのEOL後も安全に使い続けられますか?
A. Phorgeコミュニティは活発で、2023年以降も継続的にセキュリティパッチとバグ修正をリリースしています。安全性の観点: ①Phorge GitHubリポジトリへのコミットは月次以上のペースで行われている②重大なCVEに対してはリリース2週間以内にパッチが提供される傾向③完全OSSなのでセキュリティ監査が可能。懸念点: 元のPhabricatorコミュニティの分散により、長期サポートが保証されているわけではない。代替: PhabricatorのArcanist CLIワークフロー(arc diff)が気に入っている場合、Gerrit + Arcanist互換CLIの組み合わせで移行することも可能です。GitLabも多くの機能(タスク管理・コードレビュー)をカバーします。
Q. Gerritでモノレポの特定フォルダのオーナー(レビュー承認者)を設定するには?
A. GerritのOWNERSファイルとCode Owners機能を使います。
# リポジトリルートに OWNERS ファイルを作成
cat > OWNERS << 'EOF'
# このファイルより上のディレクトリのデフォルトオーナー
set noparent
per-file *.ts = user:frontend-lead@yourcompany.com
per-file *.go = user:backend-lead@yourcompany.com
per-file *.md = user:docs-team@yourcompany.com
EOF
# サブディレクトリに OWNERS を置くと上書き
cat > src/payment/OWNERS << 'EOF'
# 決済コードの変更には payment-team の承認が必須
user:payment-lead@yourcompany.com
group:payment-team
EOF
GerritのCode-Ownersプラグインを有効化すると、変更されたファイルに対応するOWNERSのメンバーが自動でレビュワーとして追加され、全OWNERSが承認しないとマージ不可の制約を設定できます。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 大規模モノレポ・Googleフロー | Gerrit |
| 多VCS対応・ドキュメントレビュー | Review Board |
| タスク管理統合・オールインワン | Phorge |