PR Lens は、プルリクエストの差分を、動く構成図とデータの流れの図にして PR のコメントに載せる OSS だ。2026-10-16 時点の GitHub Star は約2,000、Fork 73、ライセンスは MIT。CLI の最新版は 0.13.0(2026-10-04 公開)で、2026-08-23 の初版から npm に20版が出ている。本記事では CLI を Linux に入れ、モデルのキーが無い状態でどこまで動くかを確かめた。手元に偽のモデル API を立てて、モデルに実際に送られる中身も記録した。
WHAT IT REPLACES何を代替するか
差分を行で読む前に変更の地図を見る
これまで
diff を上から順に読む
- 呼び出しの前後関係は頭の中で組み立てる
- 消えた経路は赤い行を追って探す
PR Lens
差分を構成図とデータの流れに描く
- 追加は緑・変更は黄・削除は赤のカード
- PR コメントに明暗2種の SVG が載る
30秒でわかる PR Lens(2026-10-16時点)
- ・正体:PR の差分を構成図(architecture)とデータの流れ(data-flow)の2種類の図にする道具。図はアニメーションする SVG
- ・配り方:GitHub App(キー不要)/GitHub Action と CLI(自分のモデルキー)/エージェント用スキル。GitLab・Bitbucket にも対応
- ・実測:481バイトの差分に対し、モデルへのプロンプトは 57,875バイト。大半は出力の JSON Schema だった
- ・注意:図から外す設定(exclude)は、モデルへ送る差分を減らさない
- ・レビューの代わりではない:バグの指摘や修正の提案はしない。図で全体を見せるだけ
AI にコードを書かせる開発の全体像は Vibe Codingとは?AIコーディングの始め方・ツール比較・実践ワークフロー2026 にまとめている。
PR Lensとは:PRの差分を構成図とデータの流れで見せるOSS
作ったのは Coldtea AI。README は狙いを、AI が書いた大きな PR をレビューするときの負担を減らすことだと説明している。変更したファイルを上から読む前に、変更がシステムのどの部品に触れ、どの呼び出しが増えて、どれが消えたかを1枚で見せる。
図は2種類ある。構成図は部品をカードにしてレーン(API・ジョブ・外部サービスなど)に並べ、カードの間を呼び出しの矢印でつなぐ。データの流れの図は、処理を順番に並べ、点が1手ずつ動く。どちらも追加を緑、変更を黄、削除を赤で塗る。README によると、PR コメントには折りたためる節があり、変更の全体、新しい経路、消えた経路を別々の図で見られる。
配り方は4つで、モデルのキーを誰が持つかが違う。
| 形 | キー | 図の置き場所 | 向いている場面 |
|---|---|---|---|
| GitHub App | 不要(README) | ホスト側(prlens.dev) | 設定なしで PR に図を出したい。OSS は無料 |
| GitHub Action | 自分のキー | 自リポジトリの pr-lens ブランチ |
自分の CI とモデルで回したい |
| CLI | 自分のキー | 手元の .pr-lens/ |
PR を出す前に自分の変更を見たい |
| エージェント用スキル | 不要(エージェントが図を書く) | 手元、または prlens.dev のキャンバス | Claude Code などに変更を図にさせたい |
更新は活発だ。タグは16本あり、既定ブランチ main の最終コミットは 2026-10-04(CLI 0.13.0 と Action 0.6.3 の公開)。リポジトリは pnpm のモノレポで、図の形式(schema)、描画(renderer)、CLI、Action、GitLab 用、Bitbucket 用、スキルの7パッケージに分かれている。
PR Lensの仕組み:差分がモデルに渡り、手元でSVGになるまで
WHERE THE DIFF GOES差分の行き先
モデルに渡るのは差分とファイル一覧だけ
-
git diff
merge base と head の差。前後3行・既定40万バイトまで
-
モデル
既定は Gemini。OpenAI と互換 API も選べる
-
graph.json
スキーマで検証。不合格なら直させて最大2回
-
render
手元で自己完結の SVG を明暗2枚ずつ描く
-
PR コメント
Action は SVG を pr-lens ブランチに置いて表示
CLI の analyze だけがモデルと通信する。ソース(git.ts・prompt.ts・analyze.ts)を読むと、送る中身は次のとおりだった。
・リポジトリ名(owner/name)と、比べる2つのコミットの SHA
・変更ファイルの一覧と、ファイルごとの増減行数
・出力させる JSON の形を定めた JSON Schema
・git diff --unified=3 の差分(変更行の前後3行つき)。既定で40万バイトを超えると切って、切ったことをモデルに伝える
リポジトリ全体のファイルは送らない。既定のモデルは Gemini の gemini-3.7-flash。--provider openai か、/chat/completions を話す互換 API(--provider openai-compatible --base-url)にも切り替えられる。キーは環境変数からだけ読み、コマンドの引数では受けない。モデルの答えはスキーマで検証し、合わなければ「どこが違うか」を返して直させる。試すのは最大2回で、2回とも合わなければ止まる。
描画の render は手元で完結する。できた SVG にはスクリプトも外部の URL も入っておらず、ブラウザで開けば動く。GitHub Action は、この SVG をコードを含まない pr-lens ブランチに push し、raw.githubusercontent.com の URL でコメントに貼る。そのため、ワークフローには contents: write と pull-requests: write の権限が要る。Fork からの PR にはシークレットが渡らないので、Action は動かない(Action の README)。
キャンバスは別の経路だ。pr-lens canvas push を打つと、図の定義が prlens.dev に送られ、拡大や再生ができるページになる。docs/canvas-api.md によると、キャンバスの ID がそのまま読み取りの権限で、閲覧リンクはログインなしで開ける。編集用のトークンは別に発行される。送り先は環境変数 PR_LENS_API_URL で自前のサーバーに変えられる。
実測:PR Lens CLIをモデルのキーなしで動かす
検証には2コミットだけの小さなリポジトリを作った。サインアップの処理がウェルカムメールを直接送っていたのを、キューに積んでワーカーが送る形に変える差分だ(2ファイル、+4 −1)。まず CLI を入れて、送る前の確認(--dry-run)とキー無しの実行を試した。
npx --yes @coldtea/[email protected] --version
# 0.13.0
npx --yes @coldtea/[email protected] analyze --base main --dry-run
# 2 files, +4 -1, 481 bytes of diff
# prompt: 57875 bytes
# ✓ dry run — nothing was sent, and nothing was written
npx --yes @coldtea/[email protected] analyze --base main
# ✗ GEMINI_API_KEY is not set [MISSING_API_KEY]
依存は yaml と zod と自前の2パッケージだけで、入れたあとの node_modules は14MB だった。わざと無効なキーを入れると、Gemini の API が 400 API_KEY_INVALID を返して終了コード1で止まった。差分は481バイトなのに、プロンプトは57,875バイトある。大半は出力の JSON Schema で、差分が小さくても毎回この分を払う。トークン数はトークナイザで測っていない。
次に、手元に OpenAI 互換の偽 API を立て、こちらで書いた図の定義を返させた。受け取ったリクエストを記録し、送られる中身をソースの読みと突き合わせた。
export OPENAI_API_KEY=sk-local-test
npx --yes @coldtea/[email protected] analyze --base main \
--provider openai-compatible --base-url http://127.0.0.1:18765/v1 --model fake-model
# ✓ .pr-lens/graph.json — 5 nodes, 5 edges, 1 flows
npx --yes @coldtea/[email protected] validate .pr-lens/graph.json
npx --yes @coldtea/[email protected] render .pr-lens/graph.json
# ✓ .pr-lens/move-the-welcome-mail-onto-a-queue/manifest.json — 4 SVGs across 2 diagrams
記録したリクエストは /v1/chat/completions 宛てで、temperature は0、max_tokens は32,768、JSON で答えさせる指定つき。中身はソースのとおり、リポジトリ名、SHA、2ファイルの一覧、JSON Schema、差分だけだった。最初に返させた定義の部品の種類を、スキーマに無い値にしておくと、CLI は2回目のリクエストで直しを求め、2回とも同じだったので INVALID_DOCUMENT で止まった。
上が render で描いた構成図の明るい版を、Playwright で開いて撮ったもの。図の定義はモデルではなく当サイトが手で書いたので、図の中身の良し悪しは PR Lens の実力を表さない。描画と色分けの確認だけに使ってほしい。SVG は1枚10KB前後で、明暗あわせて4枚できた。comment は1,418バイトの Markdown を出し、中身は見出し、要約、変更の行数、2枚の図だった。
設定ファイル .github/pr-lens.yml の exclude に src/worker.js を書いても、--dry-run の差分は481バイトのままだった。陽性対照として --max-diff-bytes 200 を付けると200バイトに減ったので、計測そのものは効いている。exclude は図から外すだけで、モデルに送る差分は減らない。秘密を含むファイルを送りたくないなら、PR に入れないか、自前のモデルを使う。
検証環境:Linux(x86_64)/Node.js 22.22.0/2026-10-16
- ・CLI 0.13.0 の
--version・analyze --dry-run・キー無しと無効キーでのエラー・validate・render・commentを実行 - ・偽の OpenAI 互換 API で、モデルへ送るリクエストの中身と、検証に落ちたときの再試行を確認
- ・
canvas pushは、この環境から prlens.dev に届かずCANVAS_UNAVAILABLEで止まった
未検証の範囲
- ・本物のモデル(Gemini・OpenAI など)が描く図の質と所要時間、API の料金
- ・GitHub App が求める権限と、ホスト側での差分の扱い。prlens.dev のプライバシーポリシーはこの環境から開けなかった
- ・GitHub Action を実際の PR で回すこと、GitLab と Bitbucket での動作
- ・キャンバスでの再生(walkthrough)と、エージェントがキャンバスに答える機能
- ・GitHub の紹介文にある「100倍速くレビューできる」という主張
エージェントのスキルとして使う:キーなしで図を描かせる
PR Lens はコーディングエージェント用のスキルも配っている。README の手順どおり、空のプロジェクトに Claude Code 向けとして入れた。
npx --yes [email protected] add coldteadotai/pr-lens -s '*' -a claude-code -y --copy
# ✓ eli5 (copied) → ./.claude/skills/eli5
# ✓ pr-lens (copied) → ./.claude/skills/pr-lens
入ったのは2つ。pr-lens は変更やシステムを図にするスキル、eli5 はコードを初心者向けに一歩ずつ説明するキャンバスを作るスキルだ。pr-lens の SKILL.md は1,591バイトの入口だけで、本体は pr-lens skill が出す約30KB の手順書になっている。CLI の版に手順を合わせるための作りだ。
スキルでは、エージェントが差分を読んで図の定義を自分で書き、validate で通るまで直してから描く。PR Lens のためのモデルキーは要らないが、コードを読むのはエージェントのモデルだ。手順書は、利用者が図だけを求めたときは canvas push で prlens.dev に上げて閲覧リンクを渡すよう指示している。非公開のコードを扱うなら、手元の SVG で止めるようエージェントに伝えるか、送り先を自前のサーバーにしておく。
AI が書いたコードを人が確かめる道具としては、行単位で指摘を返す Critとは|AIエージェントの出力へ行単位で指摘を返すレビューCLIを実測、同名OSSとの違いも整理 もある。
PR Lensと類似ツールの比較:CodeRabbit・Copilot code review・Mermaid
PR に何を出すかで比べた。PR Lens 以外は、各社の公式の文書・設定例で確かめられた範囲だけを書く。
| 観点 | PR Lens | CodeRabbit | Copilot code review | Mermaid(手書き) |
|---|---|---|---|---|
| PR に出すもの | 構成図とデータの流れの SVG | レビューコメント。設定に high_level_summary・sequence_diagrams の項目がある |
問題の指摘と修正の提案、承認できるかの判定 | 人が書いた図 |
| 問題を指摘するか | しない | する | する | しない |
| 図を誰が描くか | モデルが定義を書き、描画は決まった処理 | 未検証 | 図を出す記述は見つからなかった | 人 |
| モデルのキー | App は不要、Action と CLI は自分のキー | 不要(SaaS) | 不要(GitHub が用意) | 要らない |
| 料金 | OSS は無料(README) | 公開リポジトリは無料(Marketplace) | 有料プラン。Copilot Free には含まれない | 無料 |
| 出典 | リポジトリと実測 | 公式の awesome-coderabbit の設定例 | github/docs | GitHub Docs(Mermaid は issue・PR・wiki・Markdown で描画される) |
BEFORE YOU ADOPT入れる前に
導入前に確かめる3つの境界
-
1.差分は選んだモデルへそのまま届く
設定の exclude は図から外すだけで、送る差分は減らなかった(実測)
-
2.Action は contents: write を要る
描いた SVG をコードの無い pr-lens ブランチへ push するため
-
3.キャンバスは ID が読み取り権限
canvas push した図は、閲覧リンクを知る人がログインなしで開ける
PR Lens はレビューの道具を置き換えない。指摘は CodeRabbit や Copilot に任せ、PR Lens で「どこを読むべきか」を先に掴む、という併用になる。コードベース全体の構成図を静的解析で作るなら CodeBoardingとは|静的解析とLLMでコードベースの構成図を自動生成する8言語対応OSSを実測 が近い。CodeBoarding はリポジトリ全体、PR Lens は1つの変更が対象だ。
採用判断:PR Lensが向いているチームと待つべきケース
ライセンスは MIT で、リポジトリ内のパッケージ(CLI・Action・描画・スキル)は自由に使える。PRIVACY.md によると、これらは利用者の手元か CI で動き、運営に何も報告しない。一方、GitHub App、prlens.dev、キャンバスは別のプライバシーポリシーと利用規約の対象になる。手元の CLI とホストのサービスで、データの扱いが分かれている点を押さえておく。
向いているのは、AI が書いた大きな PR を多く受ける OSS のメンテナーと、変更を PR にする前に自分で図にして確かめたい人だ。非公開のコードなら、App よりも Action か CLI を選び、モデルは社内で許可されたものにする。互換 API の指定で、Ollama や自前のサーバーにも向けられる。
待った方がよいのは、Fork からの PR が中心のリポジトリで Action を使いたい場合だ。シークレットが渡らず動かないので、同じリポジトリ内の PR か、メンテナーが起動するワークフローに限られる(Action の README)。Bitbucket は Fork からの PR でパイプが動かないと README に書かれている。また、図の定義はモデルが書くので、名前の付け方は回ごとに揺れうる。README は、直すなら生成物ではなく .github/pr-lens.yml の rename などに書くよう勧めている。
この記事の結論
- ・PR Lens は「レビューする AI」ではなく「変更の地図を描く道具」。指摘のツールと並べて使う
- ・モデルに渡るのは差分とファイル一覧。exclude では送る量は減らない
- ・まず CLI の
--dry-runで、自分のリポジトリで送るバイト数を確かめてから入れる
参照ソース
・coldteadotai/pr-lens(公式リポジトリ) — README・PRIVACY.md・packages/action/action.yml・docs/canvas-api.md・LICENSE(2026-10-16時点)
・@coldtea/pr-lens-cli(npm) — 0.13.0(2026-10-04公開)
・About Copilot code review(github/docs)
・Creating diagrams(github/docs)
・coderabbitai/awesome-coderabbit(設定例)
・CodeRabbit(GitHub Marketplace)





