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 が載る
出典: coldteadotai/pr-lens README(2026-10-16時点)

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差分の行き先

モデルに渡るのは差分とファイル一覧だけ

  1. git diff

    merge base と head の差。前後3行・既定40万バイトまで

  2. モデル

    既定は Gemini。OpenAI と互換 API も選べる

  3. graph.json

    スキーマで検証。不合格なら直させて最大2回

  4. render

    手元で自己完結の SVG を明暗2枚ずつ描く

  5. PR コメント

    Action は SVG を pr-lens ブランチに置いて表示

出典: pr-lens-cli 0.13.0 のソース(git.ts / prompt.ts / analyze.ts)と当サイトの実測(2026-10-16)

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 で止まった。

PR Lens 0.13.0が手元で描いた構成図。API・JOBS・EXTERNALの3レーンに、変更のsignup関数を黄、新しいwelcome queueとworkerを緑で示し、消えた直接送信の経路を赤の破線で描いている

上が 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. 1.差分は選んだモデルへそのまま届く

    設定の exclude は図から外すだけで、送る差分は減らなかった(実測)

  2. 2.Action は contents: write を要る

    描いた SVG をコードの無い pr-lens ブランチへ push するため

  3. 3.キャンバスは ID が読み取り権限

    canvas push した図は、閲覧リンクを知る人がログインなしで開ける

出典: README・packages/action/action.yml・docs/canvas-api.md(2026-10-16時点)と当サイトの実測

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)