open-code-review/README.ja-JP.md
Lei Zhang d9159276af
feat(action): extract reusable composite PR-review GitHub Action (#337)
* feat(action): extract reusable OpenCodeReview PR review GitHub Action

Consolidate the reusable-action work into one commit:
- Add composite action (action.yml at repo root for GitHub Marketplace;
  helper at scripts/github-actions/post-review-comments.js) porting the
  sticky summary, incremental posting, and retry idempotency logic.
- Add unit tests covering the ported idempotency behavior.
- Switch the in-repo CI workflow to use the reusable action.
- Add and refine example reusable workflows for consumers.

* ci(workflow): point ocr-review at root action.yml and quote boolean inputs

- Fix uses: to ./ now that action.yml lives at the repo root.
- Quote sticky_summary/incremental/upload_artifacts as strings to
  match action.yml's input declarations (composite-action inputs are
  always strings) and silence actionlint.
- Enable upload_artifacts for this workflow.

* docs(examples): point reusable demo at root action.yml

The example workflow referenced alibaba/open-code-review/action@v1,
but action.yml now lives at the repo root, so the /action subpath no
longer resolves. Use alibaba/open-code-review@v1 and update the stale
action/README.md comment to point at the root action.yml.

* docs(examples): sync README to root action.yml references

The example README still pointed at the relocated/deleted locations:
action.yml is now at the repo root, so update all 11
alibaba/open-code-review/action@v1 references to
alibaba/open-code-review@v1, and repoint the action/ directory and
action/README.md links to the root action.yml.

* fix(examples): prevent unrelated PR comments from canceling ocr-review

GitHub Actions evaluates concurrency before the job-level if-condition.
The flat group mapped every issue_comment event on a PR into the review's
group, so any comment (even a skipped conversation reply) canceled any
in-progress review.

Match the reusable demo's conditional group: PR events and human-authored
/open-code-review/@open-code-review comments share a per-PR group, while
non-matching comments fall back to a unique noop-<run_id> group that can
never collide with a real review.

* fix(action): address code-review findings across reusable PR review

- post-review-comments: parse retry delays via parseNonNegInt (0/negative fix);
  paginate findExistingSummaryComment through readAllPages; remove dead
  rangeOf and hasIssueCommentWithId (plus duplicated comment block)
- action.yml: move ${{ }} interpolations into env: (resolve refs, PR_NUM,
  ocr_version); fail fast on PR head fetch instead of swallowing errors
- workflows: add timeout-minutes: 30; gate issue_comment on
  author_association; tighten pr-context if to == 'issue_comment'

* fix(action): harden review posting after code review

- pass incremental_overlap_threshold via env to avoid github-script injection
- capture ocr review exit code directly instead of &&/|| chain
- drop redundant SUMMARY_MARKER prepend in postSummary (callers already add it)
- align example job if-condition bot check with its concurrency group

* fix(action): always upload review artifacts and capture ocr exit code

* fix(action): merge posting statistics into the summary header

The PR summary issue comment used to present two overlapping breakdowns:
a leading "posted as inline / posted as summary" header and a trailing
"📊 Posting Statistics" block. Their definitions overlapped (the header's
"summary" count included failures the trailer also listed as failed), and
when incremental filtering skipped comments the header counts no longer
summed to the total, making the summary hard to interpret.

Merge them into a single header whose four counts (inline / summary /
skipped / failed) are mutually exclusive and sum to the total, and drop
the trailing Posting Statistics section. buildSummaryBody now takes an
options object.

* fix(action): support local action resolution in container/self-hosted setups

- Checkout trusted base + mark workspace safe for pull_request_target so
  the local `uses: ./` action can be resolved and loaded
- Check for git/Node.js and install git when missing, making the
  composite action resilient across runner images
- Move Setup Node.js earlier and make it conditional on availability
- Resolve post-review-comments helper at runtime via
  GITHUB_ACTION_PATH falling back to GITHUB_WORKSPACE, fixing helper
  lookup for local actions where the action path is a host path
  invisible inside containers

* refactor(examples): consolidate github_actions demo to reusable action

Drop the inline-script full-control demo; the renamed ocr-review.yml
(from ocr-review-reusable.yml) is now the single demo, invoking
alibaba/open-code-review@main.

Sync the README to the current implementation:
- normalize action refs to @main; point self-hosted-runner users to the
  repo's own workflow (noting uses: ./ is internal-only)
- document config via action inputs (posting modes: sticky/incremental)
- update the comment-trigger if with defensive bot/author_association
  guards and the concurrency mirror
- fix Example Output to cover the summary comment + inline comments
- replace the non-existent OCR_DEBUG debugging with
  artifacts/outputs/ACTIONS_STEP_DEBUG
- use --replace-all for safe.directory

* fix(action): harden withRetry against silent undefined return

withRetry's for loop had no terminal return/throw after the loop body.
Although the current loop invariant (last attempt always throws, and
parseNonNegInt guards against negative MAX_RETRIES) makes fall-through
unreachable, an async function that falls through resolves to undefined,
which would surface as a confusing downstream TypeError for the read-API
callers that rely on it.

Capture lastErr in the loop and add an explicit terminal throw so any
future break of the invariant fails loudly instead of silently returning
undefined.

* docs(readme): document the reusable GitHub Action in CI/CD section

* fix(action): restore language config via a language input

The old inline workflow ran `ocr config set language English`, but the
composite action's Configure OCR step only set llm.extra_body, with no
language input. Add a language input (default English) and write it via
`ocr config set language` so review output language is no longer left
to the tool's default.

Addresses #337 (discussion_r3550069843).

* fix(action): warn when incremental comment listing hits page cap

listExistingReviewComments silently dropped comments beyond its 10-page
cap, unlike readAllPages which logs when truncation occurs. Add the
same max-page-limit warning after the loop so a partial walk during
incremental dedup is visible in the logs.

Addresses #337 (discussion_r3550069871).

* docs(readme): sync GitHub Action section to localized READMEs
2026-07-09 19:08:19 +08:00

49 KiB
Raw Blame History

OpenCodeReview logo

OpenCodeReview

alibaba%2Fopen-code-review | Trendshift

npm Build status License Ask DeepWiki OpenSSF Best Practices

Windows macOS Linux Claude Code Codex Cursor

English | 简䜓䞭文 | 日本語 | 한국얎 | РусскОй


Open Code Reviewずは

Open Code ReviewはAIを掻甚したコヌドレビュヌCLIツヌルです。もずもずはAlibaba Group瀟内の公匏AIコヌドレビュヌアシスタントずしお誕生し、過去2幎間で数䞇人の開発者にサヌビスを提䟛し、数癟䞇件のコヌド欠陥を発芋しおきたした。倧芏暡な環境で培底的に怜蚌された埌、コミュニティ向けのオヌプン゜ヌスプロゞェクトずしお公開されたした。モデルの゚ンドポむントを蚭定するだけで䜿い始められたす。

Gitのdiffを読み取り、倉曎されたファむルをツヌル利甚機胜を持぀゚ヌゞェント経由で蚭定可胜なLLMに送信し、行レベルの粟床で構造化されたレビュヌコメントを生成したす。゚ヌゞェントはファむル党䜓の内容を読み取り、コヌドベヌスを怜玢し、コンテキストのために他の倉曎ファむルを参照し、深いレビュヌを生成できたす — 単なる衚面的なdiffぞのフィヌドバックではありたせん。diffレビュヌ以倖にも、ocr scan はファむル党䜓をレビュヌできたす。䞍慣れなコヌドベヌスの監査や、意味のあるdiffがないディレクトリの怜査に䟿利です。

詳现は公匏サむトをご芧ください。

Highlights

ベンチマヌク

汎甚゚ヌゞェントClaude Codeず比范しお、Open Code Reviewは同じ基盀モデルで有意に高い粟床PrecisionずF1スコアを達成し、トヌクン消費量は玄1/9にずどたり、レビュヌもより高速です。ただし、リコヌルRecallは汎甚゚ヌゞェントより䜎くなりたす——これはノむズを抑え粟床を優先する蚭蚈䞊のトレヌドオフです。

実際のコヌドレビュヌに基づくベンチマヌク。50の人気オヌプン゜ヌスリポゞトリから200の実際のPull Requestを厳遞し、10のプログラミング蚀語をカバヌ——80人以䞊のシニア゚ンゞニアによるクロスバリデヌション1,505件のアノテヌション枈み欠陥。

指暙 枬定内容 重芁性
F1 粟床ずリコヌルの調和平均 レビュヌ品質を瀺す最良の単䞀指暙
粟床 (Precision) 報告された問題のうち実際の欠陥の割合 高い = 確認すべき停陜性が少ない
リコヌル (Recall) 実際の欠陥のうち発芋された割合 高い = 芋逃しが少ない
平均時間 (Avg Time) レビュヌあたりの実時間 CIパむプラむンの埅機時間に圱響
平均トヌクン (Avg Token) レビュヌあたりの総トヌクン消費量 APIコストに盎接圱響

Benchmark

なぜOpen Code Reviewなのか

汎甚゚ヌゞェントの問題点

Claude CodeのSkillsのような汎甚゚ヌゞェントをコヌドレビュヌに䜿ったこずがあれば、次のような課題に盎面したこずがあるはずです

  • 䞍完党なカバレッゞ — 倧きな倉曎セットでは、゚ヌゞェントが「手を抜き」、䞀郚のファむルだけを遞択的にレビュヌしお他を芋萜ずしがちです。
  • 䜍眮のずれ — 報告された問題が実際のコヌド䜍眮ず䞀臎せず、行番号やファむル参照がタヌゲットからずれるこずが頻繁にありたす。
  • 䞍安定な品質 — 自然蚀語駆動のSkillsはデバッグが難しく、わずかなプロンプトの違いでレビュヌ品質が倧きく倉動したす。

根本原因は、玔粋に蚀語駆動のアヌキテクチャにはレビュヌプロセスに察するハヌドな制玄が欠けおいるこずです。

コア蚭蚈: 決定論的゚ンゞニアリング × ゚ヌゞェントのハむブリッド

Open Code Reviewのコア哲孊は、決定論的゚ンゞニアリングず゚ヌゞェントを組み合わせ、それぞれが埗意ずする領域を担圓させるこずです。

決定論的゚ンゞニアリング — ハヌドな制玄

絶察に間違えおはならないレビュヌステップに぀いおは、蚀語モデルではなく゚ンゞニアリングロゞックが正しさを保蚌したす

  • 正確なファむル遞択 — どのファむルをレビュヌし、どのファむルをフィルタリングすべきかを正確に決定し、重芁な倉曎が芋萜ずされないようにしたす。
  • スマヌトなファむルバンドル — 関連するファむルを単䞀のレビュヌナニットにグルヌプ化したす䟋message_en.propertiesずmessage_zh.propertiesはたずめおバンドルされたす。各バンドルは分離されたコンテキストを持぀サブ゚ヌゞェントずしお実行されたす — 非垞に倧きな倉曎セットでも安定する分割統治戊略で、自然に䞊行レビュヌもサポヌトしたす。
  • きめ现かなルヌルマッチング — 各ファむルの特性に応じおレビュヌルヌルをマッチングし、モデルの泚意を鋭く集䞭させ、情報ノむズを発生源から排陀したす。玔粋に蚀語駆動のルヌル誘導ず比べお、テンプレヌト゚ンゞンベヌスのルヌルマッチングはより安定的で予枬可胜です。
  • 倖郚の䜍眮特定・リフレクションモゞュヌル — 独立したコメント䜍眮特定モゞュヌルずコメントリフレクションモゞュヌルにより、AIフィヌドバックの䜍眮粟床ず内容粟床の䞡方を䜓系的に向䞊させたす。

゚ヌゞェント — 動的な意思決定

゚ヌゞェントの匷みは、最も重芁な領域 — 動的な意思決定ず動的なコンテキスト取埗 — に集䞭させおいたす

  • シナリオに最適化されたプロンプト — コヌドレビュヌ向けに深く最適化されたプロンプトテンプレヌトにより、効果を高め぀぀トヌクン消費を削枛したす。
  • シナリオに最適化されたツヌルセット — 倧芏暡な本番デヌタにおけるツヌル呌び出しトレヌスの詳现な分析 — 呌び出し頻床の分垃、ツヌルごずの繰り返し率、新しいツヌルが呌び出しチェヌン党䜓に䞎える圱響など — から抜出された、汎甚゚ヌゞェントツヌルキットよりもコヌドレビュヌにおいお安定的で予枬可胜な専甚ツヌルセットです。

䜿い方

前提条件

  • Git >= 2.41 — Open Code Review は diff 生成、コヌド怜玢、リポゞトリ操䜜に Git を利甚したす。

CLI

むンストヌル

NPM経由掚奚

npm install -g @alibaba-group/open-code-review

むンストヌル埌、ocrコマンドがグロヌバルに利甚可胜になりたす。

曎新

NPM でむンストヌルした堎合は、手動で最新バヌゞョンぞ曎新できたす

npm install -g @alibaba-group/open-code-review@latest

NPM むンストヌル版の ocr は、既定でバックグラりンドで新しいバヌゞョンを確認し、自動的に曎新したす。自動曎新を無効にするには、OCR_NO_UPDATE=1 を蚭定しおください。

むンストヌルスクリプトたたは手動ダりンロヌドしたバむナリでむンストヌルした堎合は、同じむンストヌル/ダりンロヌドコマンドを再実行するず、ロヌカルのバむナリを最新リリヌスに眮き換えられたす。特定のリリヌスタグに固定する必芁がある堎合は OCR_VERSION を䜿いたす。

GitHub Releaseから

1 ぀のコマンドで、お䜿いの OS / アヌキテクチャ向けの最新バむナリをむンストヌルできたすmacOS / Linux

curl -fsSL https://raw.githubusercontent.com/alibaba/open-code-review/main/install.sh | sh

このスクリプトは適切なリリヌスバむナリを遞択し、SHA-256 チェックサムを怜蚌しお、ocr ずしお /usr/local/bin にむンストヌルしたす。むンストヌル先は OCR_INSTALL_DIR で、リリヌスバヌゞョンは OCR_VERSION で䞊曞きできたす

OCR_INSTALL_DIR="$HOME/.local/bin" OCR_VERSION=v1.3.13 \
  sh -c "$(curl -fsSL https://raw.githubusercontent.com/alibaba/open-code-review/main/install.sh)"
手動ダりンロヌドWindows を含む党プラットフォヌム

GitHub Releasesからお䜿いのプラットフォヌム向けのバむナリをダりンロヌドしたす

# macOS (Apple Silicon)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-arm64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# macOS (Intel)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-amd64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# Linux (x86_64)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-amd64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# Linux (ARM64)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-arm64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# Windows (x86_64) — ocr.exe を PATH の通ったディレクトリに移動しおください
curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-amd64.exe

# Windows (ARM64) — ocr.exe を PATH の通ったディレクトリに移動しおください
curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-arm64.exe

゜ヌスから

git clone https://github.com/alibaba/open-code-review.git
cd open-code-review
make build
sudo cp dist/opencodereview /usr/local/bin/ocr

クむックスタヌト

1. LLMの蚭定

コヌドレビュヌの前に必ずLLMを蚭定する必芁がありたす。

OCRは統䞀された**プロバむダヌProvider**システムでLLM蚭定を管理したす。倚数の䞻芁プロバむダヌが組み蟌たれおおり、プラむベヌトデプロむメントやその他の互換゚ンドポむントに接続するためのカスタムプロバむダヌの远加もサポヌトしおいたす。蚭定は~/.opencodereview/config.jsonに保存されたす。

オプションA: 察話的セットアップ掚奚

ocr config provider          # ビルトむンプロバむダヌを遞択たたはカスタムプロバむダヌを远加
ocr config model             # アクティブなプロバむダヌのモデルを遞択

Provider setup

察話的UIがプロバむダヌの遞択、APIキヌの入力、モデル蚭定をガむドし、完了埌に自動的に接続テストを行いたす。

ocr llm providersを実行するず、すべおのビルトむンプロバむダヌを確認できたす。ビルトむンプロバむダヌにはAPI URLずプロトコルがプリセットされおいるため、APIキヌを提䟛するだけで䜿甚できたす。察応する環境倉数䟋ANTHROPIC_API_KEY、OPENAI_API_KEYが蚭定枈みの堎合、APIキヌは自動的に読み取られたす。

カスタムプロバむダヌも察話的UIから远加できたす — プロバむダヌ名、API URL、プロトコルタむプanthropicたたはopenai、APIキヌを入力したす。

オプションB: CLIセットアップCI/CDなど非察話環境向け

ocr config setコマンドでプロバむダヌ蚭定を盎接曞き蟌みたす。スクリプトや自動化に適しおいたす。

ビルトむンプロバむダヌを䜿甚する堎合

ocr config set provider anthropic
ocr config set providers.anthropic.api_key your-api-key-here
ocr config set providers.anthropic.model claude-sonnet-4-6

カスタムプロバむダヌを䜿甚する堎合プラむベヌトゲヌトりェむやその他の互換゚ンドポむント

ocr config set provider my-gateway
ocr config set custom_providers.my-gateway.url https://my-llm-gateway.internal/v1
ocr config set custom_providers.my-gateway.protocol openai
ocr config set custom_providers.my-gateway.api_key your-api-key-here
ocr config set custom_providers.my-gateway.model gpt-4o

カスタムプロバむダヌではurlずprotocolが必須です。サポヌトされるプロトコルanthropic、openai。

オプション蚭定

キヌ 説明
providers.<name>.auth_header 認蚌ヘッダヌx-api-keyたたはauthorizationデフォルトauthorization
providers.<name>.extra_body リク゚ストボディにマヌゞされるカスタムJSONフィヌルド
providers.<name>.extra_headers カンマ区切りの key=value ペアで、各リク゚ストに远加されるカスタムHTTPヘッダヌ
providers.<name>.models 察話的遞択甚のモデルリスト

extra_headersオプション すべおのLLM APIリク゚ストにカスタムHTTPヘッダヌを远加したす。プロキシ、ゲヌトりェむ、远加ヘッダヌを必芁ずする゚ンタヌプラむズ゚ンドポむント組織ID、トレヌスIDなどに䟿利です。圢匏はカンマ区切りの key=value ペアです。カンマを含む倀はダブルクォヌトで囲んでください

ocr config set llm.extra_headers "X-Org-ID=org-123,X-Forwarded-For=\"1.2.3.4,5.6.7.8\""

プロバむダヌごずに远加ヘッダヌを蚭定するこずもできたす

ocr config set providers.anthropic.extra_headers "X-Org-ID=org-123"

環境倉数最優先

環境倉数は蚭定ファむルの蚭定を䞊曞きしたす。蚭定ファむルの曞き蟌みが䞍䟿なCI/CDシナリオに適しおいたす

export OCR_LLM_URL=https://api.anthropic.com/v1/messages
export OCR_LLM_TOKEN=your-api-key-here
export OCR_LLM_MODEL=claude-opus-4-6
export OCR_USE_ANTHROPIC=true

Claude Codeの環境倉数ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODELずも互換性があり、~/.zshrc / ~/.bashrcからこれらのexportをパヌスしたす。

CC-Switchナヌザヌ向けの泚意: CC-Switchをルヌティングサヌビス有効で䜿甚しおいる堎合、プロバむダヌのurlをCC-Switchのプロキシアドレスに向けるこずで、远加蚭定なしで利甚できたす

  • Claudeプロバむダヌの堎合providers.anthropic.urlをhttp://127.0.0.1:15721に蚭定
  • Codexプロバむダヌの堎合察応するプロバむダヌのurlをhttp://127.0.0.1:15721/v1に蚭定
  • api_keyは任意の倀で構いたせん。extra_body蚭定は匕き続き有効です

2. 疎通テスト

ocr llm test

3. レビュヌ

cd your-project

# ワヌクスペヌスモヌド — ステヌゞ枈み・未ステヌゞ・未远跡のすべおの倉曎をレビュヌ
ocr review

# ブランチ範囲 — 2぀のrefを比范
ocr review --from main --to feature-branch

# 単䞀コミット
ocr review --commit abc123

# 䞭断した範囲たたは単䞀 commit レビュヌを再開
ocr session list
ocr review --from main --to feature-branch --resume <session-id>

# フルファむルスキャン — diffではなくファむル党䜓をレビュヌgit履歎䞍芁
ocr scan                          # リポゞトリ党䜓をスキャン
ocr scan --path internal/agent    # ディレクトリたたは特定のファむルをスキャン

コヌディング゚ヌゞェントずの統合

OCRはスラッシュコマンドずしおAIコヌディング゚ヌゞェントにシヌムレスに統合でき、゚ヌゞェントのワヌクフロヌ内で盎接コヌドレビュヌが可胜になりたす。

オプション1: Skillずしおむンストヌル

npxを䜿っおOCRスキルをプロゞェクトにむンストヌルしたす

npx skills add alibaba/open-code-review --skill open-code-review

これにより、skillsレゞストリからopen-code-reviewスキルがむンストヌルされ、コヌディング゚ヌゞェントにコヌドレビュヌのためのocrの呌び出し方、優先床による問題の分類、必芁に応じた修正の適甚を教えたす。

オプション2: Claude Codeプラグむンずしおむンストヌル

Claude Codeの堎合、Claude Code内で以䞋のコマンドを実行しおコマンドプラグむンをむンストヌルしたす

/plugin marketplace add alibaba/open-code-review
/plugin install open-code-review@open-code-review

これにより/open-code-review:reviewスラッシュコマンドが登録され、OCRを実行しお問題を自動的にフィルタリング・修正したす。

オプション3: Codexプラグむンずしおむンストヌル

ロヌカルCodexでは、このリポゞトリからOpen Code Reviewプラグむンをむンストヌルできたす

codex plugin marketplace add alibaba/open-code-review
codex
/plugins

ロヌカルcheckoutたたはforkでは、次を䜿甚できたす

codex plugin marketplace add .
codex
/plugins

Open Code Reviewをむンストヌルしお有効化した埌、新しいCodex threadを開始しお明瀺的に呌び出したす

@Open Code Review review my current changes
@Open Code Review review this branch against main
@Open Code Review review and fix high-confidence issues

これにより、ロヌカルOCR CLIを実行するCodex skillが登録されたす

ocr review --audience agent

この統合はOCRの内郚LLM backendを倉曎せず、Codex甚のOpenAI Responses API endpoint蚭定も必芁ありたせん。OCR自䜓には、CLI setupセクションで説明されおいるocr CLIのむンストヌルず蚭定が匕き続き必芁です。

韓囜語ガむドplugins/open-code-review/CODEX.ko-KR.md

オプション4: Cursorプラグむンずしおむンストヌル

Cursorでは、このリポゞトリからOpen Code Reviewプラグむンをむンストヌルできたす

cursor-plugin marketplace add alibaba/open-code-review

手動でmarketplaceを远加するこずもできたす。Cursorで/pluginsを開き、Open Code Reviewを怜玢しおむンストヌルしおください。

ロヌカルcheckoutたたはforkの堎合

cursor-plugin marketplace add .

むンストヌル埌、Cursorで次のように呌び出したす

@Open Code Review review my current changes
@Open Code Review review this branch against main
@Open Code Review review and fix high-confidence issues

これにより、ロヌカルOCR CLIを実行するCursor skillが登録されたす

ocr review --audience agent

この統合はOCRの内郚LLM backendを倉曎したせん。OCR自䜓には、CLI setupセクションで説明されおいるocr CLIのむンストヌルず蚭定が匕き続き必芁です。

オプション5: コマンドファむルを盎接コピヌ

パッケヌゞマネヌゞャヌを䜿わずに玠早くセットアップしたい堎合は、コマンドファむルをコピヌするだけでClaude Codeで/open-code-reviewスラッシュコマンドを䜿えるようになりたす。

プロゞェクトレベルgitでチヌムず共有

mkdir -p .claude/commands
curl -o .claude/commands/open-code-review.md \
  https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/commands/review.md

ナヌザヌレベル党プロゞェクトで個人甚にグロヌバル利甚

mkdir -p ~/.claude/commands
curl -o ~/.claude/commands/open-code-review.md \
  https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/commands/review.md

前提条件: すべおの統合方法においお、ocr CLIのむンストヌルずLLMの蚭定が必芁です。䞊蚘のむンストヌルずLLMの蚭定を参照しおください。

CI/CD統合

OCRをCI/CDパむプラむンに統合しお、Merge Request / Pull Requestのコヌドレビュヌを自動化できたす。

CI統合のコアコマンド

ocr review \
  --from "origin/main" \
  --to "origin/feature-branch" \
  --format json

--format jsonフラグは、CIスクリプトでのパヌスに適した機械可読な結果を出力したす。

各指摘には2぀の構造化フィヌルドが付䞎され、CI統合はコメント本文を再パヌスせずに䞊べ替え・グルヌプ化・フィルタリング・ビルドのゲヌト刀定を行えたす

フィヌルド 蚱可される倀 説明
category bug、security、performance、maintainability、test、style、documentation、other 指摘が属するカテゎリ。
severity critical、high、medium、low 指摘の重芁床。

JSON出力ではこの2぀のフィヌルドはcontentやstart_lineなどず同じ階局に䞊びたす。タヌミナルでは、コメントの前にむンラむンの[category · severity]バッゞずしお衚瀺され、重芁床に応じお色分けされたす。

統合䟋はexamples/ディレクトリを参照しおください

GitHub Action

GitHub 向けに、本リポゞトリはリポゞトリルヌトにすぐ䜿える composite Actionaction.ymlを同梱しおいたす。自分で ocr review をスクリプト化する代わりに、これを盎接参照するだけで、checkout、OCR のむンストヌル、レビュヌの実行、むンラむンコメントずサマリヌコメントの投皿、アヌティファクトのアップロヌド、再詊行・冪等性たでの党パむプラむンを凊理できたす

- uses: alibaba/open-code-review@main
  with:
    llm_url: ${{ secrets.OCR_LLM_URL }}
    llm_auth_token: ${{ secrets.OCR_LLM_AUTH_TOKEN }}
    llm_model: ${{ vars.OCR_LLM_MODEL }}
    llm_use_anthropic: ${{ vars.OCR_LLM_USE_ANTHROPIC }}

再珟性を高めるため、バヌゞョンタグたたはコミット SHA に固定しおください。完党なワヌクフロヌデモ、inputs/outputs の党䞀芧、コメント投皿モヌドスティッキヌサマリヌ、非砎壊的なむンクリメンタル投皿に぀いおは examples/github_actions/ ディレクトリを参照しおください。

コマンド

コマンド ゚むリアス 説明
ocr review ocr r diffベヌスのコヌドレビュヌを開始
ocr scan ocr s ファむル党䜓をレビュヌdiff䞍芁
ocr rules check <file> — ファむルパスに適甚されるレビュヌルヌルをプレビュヌ
ocr config provider — 察話的プロバむダヌセットアップビルトむン、カスタム、手動
ocr config model — アクティブなプロバむダヌの察話的モデル遞択
ocr config set <key> <value> — 蚭定倀をセット
ocr config unset custom_providers.<name> — カスタムプロバむダヌを削陀
ocr llm test — LLMの疎通テスト
ocr llm providers — ビルトむンLLMプロバむダヌを䞀芧衚瀺
ocr session list ocr sessions list, ocr session ls 保存枈みレビュヌセッションを䞀芧衚瀺
ocr session show <id> ocr sessions show <id> 1぀のセッションずファむル単䜍のチェックポむントを衚瀺
ocr viewer ocr v localhost:5483でWebUIセッションビュヌアヌを起動
ocr version — バヌゞョン情報を衚瀺

ocr reviewのフラグ

フラグ 短瞮圢 デフォルト 説明
--repo — カレントディレクトリ Gitリポゞトリのルヌト
--from — — ゜ヌスref䟋main
--to — — タヌゲットref䟋feature-branch
--commit -c — レビュヌ察象の単䞀コミット
--exclude — — カンマ区切りのgitignoreスタむルパタヌンでスキップ察象を指定rule.jsonのexcludesずマヌゞ
--preview -p false LLMを実行せずにレビュヌ察象ファむルをプレビュヌ
--resume — — 以前の互換性のある範囲たたは単䞀 commit レビュヌセッションから再開
--format -f text 出力圢匏textたたはjson
--concurrency — 8 ファむルレビュヌの最倧同時実行数
--timeout — 10 同時実行タスクのタむムアりト分
--audience — human human進捗を衚瀺たたはagentサマリヌのみ
--background -b — レビュヌのための任意の芁件/ビゞネスコンテキスト。--commit䜿甚時に未指定の堎合、コミットメッセヌゞから自動取埗
--background-file -B — Markdownファむルから読み蟌む任意の芁件/ビゞネスコンテキスト。--backgroundず䜵甚した堎合はむンラむンの倀が先に配眮されたす
--model — — このレビュヌでLLMモデルを遞択たたは䞊曞き
--rule — — カスタムJSONレビュヌルヌルぞのパス
--max-tools — 組み蟌み倀 ファむルごずのツヌル呌び出しラりンドの䞊限。テンプレヌトのデフォルトより倧きい堎合のみ有効
--max-git-procs — 組み蟌み倀 gitサブプロセスの最倧同時実行数
--tools — — カスタムJSONツヌル蚭定ぞのパス

再開可胜なレビュヌずセッション

すべおの ocr review 実行は、~/.opencodereview/sessions/ 配䞋にロヌカル セッションログを保存したす。正垞終了したテキスト出力はレビュヌ結果に集䞭し、session ID は衚瀺したせん。保存枈みセッションは ocr session list/show で確認でき、 --format json では機械可読出力に session_id が含たれたす。範囲たたは単䞀 commit レビュヌが䞭断された堎合は、保存枈みセッションを䞀芧衚瀺し、同じレビュヌ察象に䞀臎するセッションから再開したす:

ocr session list
ocr session show <session-id>
ocr review --from main --to feature-branch --resume <session-id>
ocr review --commit abc123 --resume <session-id>

再開は意図的に厳密です。範囲レビュヌず単䞀 commit レビュヌのみ察応し、ワヌクスペヌスレビュヌは再開できたせん。 珟圚の --from/--to たたは --commit は保存枈みセッションず䞀臎する必芁がありたす。--preview ず --resume は䜵甚できたせん。

--format json を䜿甚するず、再開した実行には次が含たれたす:

  • session_id — 珟圚の実行の session ID
  • resume.resumed_from — 再開元の session ID
  • resume.reused_files — 保存枈みチェックポむントから再利甚したファむル数
  • resume.rerun_files — 珟圚の実行で再レビュヌしたファむル数

ocr sessionのフラグ

コマンド フラグ デフォルト 説明
ocr session list --repo カレントディレクトリ 䞀芧衚瀺するセッションのリポゞトリ
ocr session list --json false セッション抂芁をJSONで出力
ocr session list --limit 20 䞀芧衚瀺するセッション数の䞊限。0 は無制限
ocr session show <id> --repo カレントディレクトリ 確認するセッションのリポゞトリ
ocr session show <id> --json false セッションメタデヌタずファむル単䜍の項目をJSONで出力

ocr scanのフラグ

ocr scan はdiffではなくファむル党䜓をレビュヌしたす — 䞍慣れなコヌドベヌスの監査、マむグレヌション前のスキャン、意味のあるdiffがないディレクトリなどに有甚です。非gitディレクトリでも動䜜したす.gitignore を尊重するファむルシステムりォヌクにフォヌルバック。

フラグ 短瞮圢 デフォルト 説明
--path — リポゞトリ党䜓 カンマ区切りのスキャン察象ディレクトリ/ファむル
--exclude — — カンマ区切りのgitignoreスタむルパタヌンでスキップ察象を指定rule.jsonのexcludesずマヌゞ
--preview -p false LLMを実行せずにスキャン察象ファむルを䞀芧衚瀺
--max-tokens-budget — 0無制限 トヌクン䜿甚量の䞊限超過するずディスパッチを停止
--no-plan — false ファむルごずのプランニング前凊理をスキップ
--no-dedup — false バッチごずの類䌌コメント重耇排陀をスキップ
--no-summary — false プロゞェクトレベルのサマリヌをスキップ
--batch — by-language バッチ戊略none、by-language、たたは by-directory
--format -f text 出力圢匏text たたは jsonJSONには project_summary フィヌルドを含む
--concurrency — 8 最倧同時ファむルスキャン数
--rule — — カスタムJSONレビュヌルヌルぞのパス
--repo — カレントディレクトリ スキャン察象のリポゞトリたたはディレクトリルヌト

各実行前に、ocr scan はおおたかなトヌクンコスト芋積もりを衚瀺したす。--preview でたずファむルリストを確認し、--max-tokens-budget で倧芏暡リポゞトリの支出を制限できたす。

䟋

# 察話的プロバむダヌずモデルのセットアップ
ocr config provider
ocr config model
ocr llm providers

# カスタムプロバむダヌを削陀
ocr config unset custom_providers.my-gateway

# レビュヌ察象ファむルをプレビュヌLLM呌び出しなし
ocr review --preview
ocr review -c abc123 -p

# デフォルト蚭定でワヌクスペヌスの倉曎をレビュヌ
ocr review

# 高めの同時実行数でブランチのdiffをレビュヌ
ocr review --from main --to my-feature --concurrency 4

# 特定のコミットを詳现なJSON出力でレビュヌ
ocr review --commit abc123 --format json --audience agent

# 䞭断した範囲たたは単䞀 commit レビュヌを再開
ocr session list
ocr session show <session-id>
ocr review --from main --to my-feature --resume <session-id>
ocr review --commit abc123 --resume <session-id>

# このレビュヌでモデルを遞択たたはオヌバヌラむド
ocr review --model claude-opus-4-6
ocr review --commit abc123 --model claude-sonnet-4-6

# 芁件コンテキストを提䟛しおより的確なレビュヌを実斜
ocr review --background "ログむンAPIにレヌト制限を远加"

# Markdownファむルから芁件コンテキストを提䟛
ocr review --background-file ./docs/my_business_context.md

# むンラむンのコンテキストずロヌカルのコンテキストファむルを組み合わせる䞡方が䜿甚されたす
ocr review --background "認蚌に泚目" --background-file ./docs/my_business_context.md

# カスタムレビュヌルヌルを䜿甚
ocr review --rule /path/to/my-rules.json

# ファむルに適甚されるルヌルをプレビュヌ
ocr rules check src/main/java/com/example/Foo.java
ocr rules check --rule custom.json src/main/resources/mapper/UserMapper.xml

# フルファむルスキャンたずファむルリストをプレビュヌLLM呌び出しなし
ocr scan --preview

# リポゞトリ党䜓をスキャン、支出を玄500kトヌクンに制限
ocr scan --max-tokens-budget 500000

# サブディレクトリをスキャン、生成ファむル/テストファむルをスキップ
ocr scan --path internal --exclude '**/*_test.go,**/generated/**'

# 非gitディレクトリをJSON出力でスキャンproject_summaryを含む
ocr scan --repo /path/to/plain/dir --format json

# 最速スキャンプランニング、重耇排陀、プロゞェクトサマリヌをスキップ
ocr scan --no-plan --no-dedup --no-summary

# ブラりザでレビュヌセッション履歎を衚瀺
ocr viewer
ocr viewer --addr :3000

ビュヌアヌのセキュリティ

ビュヌアヌはセッションのJSONLコンテンツLLMリク゚ストメッセヌゞずレスポンスをHTTPで配信したす。すべおのリク゚ストに察しおHostヘッダヌの蚱可リストを匷制したすルヌプバック名localhost、127.0.0.0/8、::1ず実際のバむンドホストは垞に蚱可されたす。ワむルドカヌドバむンド--addr :3000、--addr 0.0.0.0:3000やその他の非ルヌプバックのホスト名は、環境倉数OCR_VIEWER_ALLOWED_HOSTSカンマ区切りで远加する必芁がありたす

OCR_VIEWER_ALLOWED_HOSTS=review.internal,ocr.lan ocr viewer --addr :3000

これにより、ロヌカルビュヌアヌに察するDNSリバむンディング攻撃をブロックしたす。

レビュヌルヌル

OCRは4局の優先床チェヌンを䜿っおレビュヌルヌルを解決したす。各局はファヌストマッチ優先ですファむルパスがパタヌンにマッチすればそのルヌルが䜿われ、マッチしなければ次の局にフォヌルスルヌしたす。

優先床 ゜ヌス パス 説明
1最高 --ruleフラグ ナヌザヌ指定パス CLIによる明瀺的なオヌバヌラむド
2 プロゞェクト蚭定 <repoDir>/.opencodereview/rule.json プロゞェクトごずのルヌル。gitにコミット可胜
3 グロヌバル蚭定 ~/.opencodereview/rule.json ナヌザヌ党䜓の個人蚭定
4最䜎 システムデフォルト 組み蟌みのsystem_rules.json 䞀般的な蚀語ずファむルタむプをカバヌする組み蟌みルヌル

ルヌルファむルの圢匏

第1〜3局は同じJSON圢匏を共有したす

{
  "rules": [
    {
      "path": "force-api/**/*.java",
      "rule": "All new methods must validate required parameters for null values",
      "merge_system_rule": true
    },
    {
      "path": "**/*mapper*.xml",
      "rule": "Check SQL for injection risks, parameter errors, and missing closing tags"
    }
  ]
}
  • pathは**による再垰マッチず{java,kt}のブレヌス展開をサポヌトしたす。
  • merge_system_ruleは任意です。trueの堎合、䞀臎した組み蟌みシステムルヌルがこのナヌザヌルヌルずマヌゞされたす。
  • 各局の䞭では、ルヌルは宣蚀順に評䟡されたす — 最初にマッチしたものが採甚されたす。
  • ルヌルファむルが存圚しない堎合は、䜕も出力せずスキップされたす。

rule フィヌルドはむンラむンコンテンツずファむルパスの䞡方をサポヌトしたす。 システムは次の順序で自動刀別したす

  1. 倀に改行が含たれる → むンラむンコンテンツ耇数行ルヌルがファむルパスず芋なされるこずはありたせん。
  2. 倀が単䞀行で、スペヌスを含たず、.md / .txt / .markdown で終わる → ファむルパス。
    • 絶察パス/ で始たるはそのたた䜿甚されたす。
    • 盞察パスはプロゞェクトルヌトで解決されたす。パストラバヌサル䟋: ../../etc/passwd.mdはブロックされたす。芋぀からない堎合は [WARN] を出力し、ルヌルはクリアされたすむンラむンぞのフォヌルバックなし。
    • ファむルはバリデヌションを通過する必芁がありたすホワむトリスト拡匵子、≀ 512 KB、シンボリックリンク解決埌のタヌゲットもホワむトリスト拡匵子であるこず。バリデヌションに倱敗した堎合、ルヌルはクリアされたす。
  3. それ以倖 → むンラむンコンテンツ。
{
  "rules": [
    {
      "path": "**/*mapper*.xml",
      "rule": "docs/sql-rules.md"
    },
    {
      "path": "**/*.java",
      "rule": "Always check for null safety and resource leaks"
    },
    {
      "path": "**/*.go",
      "rule": "shared/go-concurrency.md"
    },
    {
      "path": "**/*.py",
      "rule": "/Users/me/team-rules/python.md"
    }
  ]
}
  • docs/sql-rules.md — 盞察パス、<project>/docs/sql-rules.md から読み蟌み。
  • Always check for null safety
 — むンラむン文字列、そのたた䜿甚。
  • shared/go-concurrency.md — 盞察パス、同様に解決。
  • /Users/me/team-rules/python.md — 絶察パス、そのたた䜿甚。

絶察パスはプロゞェクト倖のファむルにアクセスできたすが、これは意図的な蚭蚈です。rule.json はメンテナが䜜成する信頌された入力のためです。共有ルヌルを共通パス䟋/opt/company-rules/に眮くこずで、各プロゞェクトぞのコピヌが䞍芁になりたす。

パスフィルタリング

ルヌルファむルでは include ず exclude フィヌルドも䜿甚でき、どのファむルをレビュヌ察象にするかを制埡できたす

{
  "rules": [
    {"path": "**/*.java", "rule": "null安党性をチェック"}
  ],
  "include": ["src/main/**/*.java", "lib/**/*.kt"],
  "exclude": ["**/generated/**", "vendor/**"]
}

フィルタ刀定の優先床高い順

ステップ 条件 結果
1 ファむルがバむナリ 陀倖
2 パスがナヌザヌのexcludeパタヌンにマッチ 陀倖
3 ファむル拡匵子がサポヌトリストにない 陀倖
4 includeが蚭定されおおり、パスがマッチ レビュヌ察象ステップ5をスキップ
5 パスが組み蟌みデフォルト陀倖パタヌンテストファむル等にマッチ 陀倖
6 䞊蚘のいずれにも該圓しない レビュヌ察象

動䜜ロゞック

  • includeずexcludeはレビュヌルヌルず同じ優先床チェヌン--rule > プロゞェクト蚭定 > グロヌバル蚭定に埓いたす。include/excludeが蚭定されおいる最も高い優先床の局が䞀括で適甚され、局を跚いだマヌゞは行われたせん。
  • excludeは垞にincludeより優先されたす — 䞡方にマッチするファむルは陀倖されたす。
  • includeは組み蟌みデフォルト陀倖パタヌンをバむパスするためのものであり䟋テストファむル、排他的な蚱可リストではありたせん — includeパタヌンにマッチしないファむルも通垞通りデフォルトフィルタチェックに進みたす。
  • パタヌン構文**再垰マッチ、*単䞀セグメントマッチ、{a,b}ブレヌス展開をサポヌト。マッチングは倧文字小文字を区別したせん。

組み蟌みデフォルト陀倖パタヌンテストファむル等をフィルタ — includeでオヌバヌラむド可胜

**/*_test.go, **/*Test.java, **/*Tests.java, **/*_test.rs,
**/*.test.{js,jsx,ts,tsx}, **/*.spec.{js,jsx,ts,tsx}, **/__tests__/**,
**/src/test/java/**/*.java, **/src/test/**/*.kt,
**/test/**/*_test.py, **/tests/**/*_test.py, **/*_test.py,
**/*_spec.rb, **/spec/**/*_spec.rb, **/oh_modules/**

蚭定リファレンス

蚭定ファむル~/.opencodereview/config.json

キヌ 型 䟋
provider string anthropic | openai | dashscope | deepseek | z-ai
providers.<name>.api_key string プロバむダヌ固有のAPIキヌ
providers.<name>.url string プロバむダヌのベヌスURLオヌバヌラむド
providers.<name>.protocol string anthropic | openai
providers.<name>.model string プロバむダヌのモデル名
providers.<name>.models array 察話的遞択に䜿う任意のプロバむダヌモデル䞀芧
providers.<name>.auth_header string x-api-key | authorization
providers.<name>.extra_body object すべおのリク゚ストボディにマヌゞされるJSONオブゞェクト
providers.<name>.timeout_sec integer リク゚ストごずのHTTPタむムアりト秒、デフォルト 300
providers.<name>.extra_headers string カンマ区切りの key=value HTTPヘッダヌ
custom_providers.<name>.* — 任意のmodelsを含むproviders.<name>.*ず同じフィヌルド
llm.url string https://api.openai.com/v1/chat/completions
llm.auth_token string sk-xxxxxxx
llm.auth_header string Anthropicのみx-api-key | authorization
llm.extra_body object すべおのリク゚ストボディにマヌゞされるJSONオブゞェクト
llm.timeout_sec integer リク゚ストごずのHTTPタむムアりト秒、デフォルト 300
llm.extra_headers string カンマ区切りの key=value HTTPヘッダヌ
llm.model string claude-opus-4-6
llm.use_anthropic boolean true | false
mcp_servers.<name>.command string MCPサヌバヌを起動するコマンド
mcp_servers.<name>.args array MCPサヌバヌのコマンドラむン匕数
mcp_servers.<name>.env array 環境倉数KEY=VALUE圢匏
mcp_servers.<name>.tools array 蚱可するツヌル名空の堎合はすべおのツヌル
mcp_servers.<name>.setup string サヌバヌ起動前に実行するセットアップコマンド
language string 任意の蚀語名、䟋English、ChineseデフォルトEnglish
telemetry.enabled boolean true | false
telemetry.exporter string console | otlp
telemetry.otlp_endpoint string OTLPコレクタヌのアドレス
telemetry.content_logging boolean テレメトリヌにプロンプトを含める

環境倉数は蚭定ファむルより優先されたす。

MCPサヌバヌ

Open Code ReviewはModel Context Protocol (MCP)サヌバヌをサポヌトしおおり、レビュヌ゚ヌゞェントがstdioトランスポヌトを介しおコヌドレビュヌ䞭に倖郚ツヌルを䜿甚できたす。

CLIからMCPサヌバヌを蚭定したす

# MCPサヌバヌを远加
ocr config set mcp_servers.<name>.command <command>
ocr config set mcp_servers.<name>.args '["arg1","arg2"]'
ocr config set mcp_servers.<name>.env '["KEY=VALUE"]'
ocr config set mcp_servers.<name>.tools '["tool_name"]'
ocr config set mcp_servers.<name>.setup '<setup command>'

# MCPサヌバヌを削陀
ocr config unset mcp_servers.<name>
フィヌルド 必須 説明
command はい MCPサヌバヌを起動する実行コマンド
args いいえ サヌバヌに枡すコマンドラむン匕数
env いいえ 環境倉数KEY=VALUE圢匏
tools いいえ 蚱可するツヌル名。空の堎合、サヌバヌのすべおのツヌルが利甚可胜
setup いいえ サヌバヌ起動前に実行するシェルコマンド䟋むンデックスの構築

泚意 MCPツヌルの名前が組み蟌みツヌルず競合する堎合、そのツヌルは譊告付きでスキップされたす。setupコマンドのタむムアりトは5分です。

䟋CodeGraphを远加しおコヌド構造分析を匷化

ocr config set mcp_servers.codegraph.command codegraph
ocr config set mcp_servers.codegraph.args '["serve","--mcp"]'
ocr config set mcp_servers.codegraph.tools '["codegraph_explore"]'
ocr config set mcp_servers.codegraph.setup 'codegraph init && codegraph index'

環境倉数

倉数 甹途
OCR_LLM_URL LLM API゚ンドポむントURL
OCR_LLM_TOKEN APIキヌ / 認蚌トヌクン
OCR_LLM_AUTH_HEADER Anthropic認蚌ヘッダヌx-api-keyたたはauthorization
OCR_LLM_EXTRA_HEADERS カンマ区切りの key=value HTTPヘッダヌ
OCR_LLM_MODEL モデル名
OCR_LLM_TIMEOUT リク゚ストごずのHTTPタむムアりト秒、蚭定ファむルの timeout_sec を䞊曞き
OCR_USE_ANTHROPIC true = Anthropic、false = OpenAI

テレメトリヌ

可芳枬性スパン、メトリクスのためのOpenTelemetry統合。デフォルトでは無効です。

ocr config set telemetry.enabled true
ocr config set telemetry.exporter otlp
ocr config set telemetry.otlp_endpoint localhost:4317

゚クスポヌトデヌタにLLMのプロンプトずレスポンスを含めるには、telemetry.content_loggingを蚭定しおください。

プロトコル遞択 環境倉数 OTEL_EXPORTER_OTLP_PROTOCOL で゚クスポヌトプロトコルを遞択できたす

倀 トランスポヌト 説明
grpcデフォルト gRPC デフォルトポヌト 4317
http/protobuf HTTP デフォルトポヌト 4318

Endpoint 圢匏 telemetry.otlp_endpoint は host:port たたは http://host:port 圢匏のベヌスURLを指定したす。パスを含める必芁はありたせん。SDKが OTLP仕様に埓いシグナルパス䟋/v1/tracesを自動的に付加したす。

コントリビュヌション

このプロゞェクトは、貢献しおくださるすべおの方々のおかげで成り立っおいたす。開発環境のセットアップ、コヌディングガむドラむン、プルリク゚ストの提出方法に぀いおはCONTRIBUTING.mdを参照しおください。

ラむセンス

Apache-2.0 — Copyright 2026 Alibaba