Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Vetal PR : I Gave Git a Ghost. It Won't Let Me Push Until I Explain My Own Diff.

2026年10月31日に「Dev.to」が公開したITニュース「Vetal PR : I Gave Git a Ghost. It Won't Let Me Push Until I Explain My Own Diff.」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

「Vetal PR」は、Gitプッシュやプルリクエスト時にAIがコード変更(diff)を分析するツール。AIが変更に関する謎かけを出し、正解しないとプッシュやマージができない。自分のコード変更を深く理解し、説明できるかを確認するのが目的だ。AIはローカルで動き、コードは外部に送られない。

ITニュース解説

ソフトウェア開発において、コードの変更履歴を管理する「Git」というシステムは不可欠なツールだ。このGitを使った開発プロセスに新たなアプローチを導入するツール「Vetal PR」が登場した。Vetal PRは、開発者が自身の行ったコード変更、つまり「diff(差分)」を明確に説明できるまで、変更内容をリモートのリポジトリに送る(プッシュする)ことを許可しないという、ユニークなシステムとして機能する。

このツールの開発は、現代のソフトウェア開発現場で生じているある課題意識から生まれた。AIエージェントがコードの大部分を生成するようになり、テストはパスし、見た目上は問題なく動作するものの、その変更が具体的に何をするのか、あるいは特定の条件下でどのように振る舞うのかを、開発者自身が完全に理解していないコードが増えているという問題である。このような「誰も理解していないコード」は、潜在的なバグの温床となり、いざ問題が発生した際に原因究明を困難にする「幽霊」のような存在として認識された。Vetal PRは、この「マシンの中の幽霊」を捕まえ、開発者が自身のコードと真摯に向き合うことを促すために考案された。

Vetal PRの機能は、インドの古い民話「ヴィクラムとヴェータル」から着想を得ている。この物語では、王が幽霊を肩に担いで移動し、幽霊が語る物語の最後に謎かけを出す。王が答えを知っていながら沈黙すると頭が砕けるという教訓があり、Vetal PRも同様に開発者に謎を突きつける。具体的には、git pushコマンドを実行する際、またはGitHubなどのプラットフォームでプルリクエストをオープンする際にVetalが作動する。

Vetalはまず、開発者が行ったdiffの内容を読み取る。この読み取りには、ローカルで動作するオープンウェイトのAIモデル「Gemma」が使われる。GemmaはOllamaというツールを通じて利用され、インターネット上のAPIキーを必要とせず、開発者のローカル環境やCI/CD(継続的インテグレーション・継続的デリバリー)環境内で動作する。diffを解析した後、Vetalはコード変更を比喩的に表現した短い民話を提示し、その後にコードの変更に関する具体的な謎かけを開発者に問いかける。例えば、「validate_user()関数がメールアドレスのチェックをしなくなった。空のメールアドレスが渡されたら何が起こるか?」といった具体的な質問である。

開発者はこの謎かけに対して回答を試みる。回答が正確であるとVetalは判断した場合、プッシュは許可され、コードはリモートリポジトリに送られる。しかし、回答が不十分であると判断された場合や、開発者が沈黙を選んだ場合、プッシュは拒否される。沈黙を選んだ場合には「プッシュが千々に砕け散る」と表現されるように、Vetalは次の機会に新たな民話と謎かけを提示することになる。

プルリクエストの場合も基本的な仕組みは同じだが、そのインターフェースは異なる。Vetalはプルリクエストのコメントとして民話と謎かけを投稿し、関連するステータスチェックを「保留」状態にする。プルリクエストの作成者は/answer <回答内容>という形式で回答をコメントとして投稿し、Vetalがその回答を評価する。評価の結果、回答が適切であればステータスチェックは「成功」となり、そうでなければ「失敗」となる。このVetalによるチェックを必須にすることで、開発チームは、メンバーが自身の変更内容を説明できない限り、そのコードがマージされることを防ぐことができる。

Vetal PRの技術的な実装は、約500行のPythonコードで構成されており、特別な依存関係がほとんどないため、Gitが動作するほとんどの環境に簡単に導入できる。AIモデルのGemmaは、以下の2つの主要なタスクを実行する。一つは、diffを解析して民話、謎かけ、そして正解の判断基準となる「隠された回答キー」をJSON形式で生成するタスクである。もう一つは、提示されたdiff、謎かけ、隠された回答キー、そして開発者の回答を受け取り、その回答が適切かどうかを判断し、Vetalの言葉で結果を返すタスクである。この「隠された回答キー」は、AIが回答を評価する際に、事前に自身が特定した重要なポイントと照らし合わせることで、公平かつ一貫性のある判断を可能にする役割を果たす。謎かけは、変更の詳細な行番号や変数名といった表面的な情報ではなく、その変更がもたらす影響、エッジケース(特殊な条件)、あるいは変更を元に戻した場合に何が壊れるかといった、コードの本質的な側面を問うように設計されている。

また、Vetalは開発者を不必要に拘束しないように配慮されている。たとえば、GUIベースのGitクライアントを使用している場合や、Ollamaが起動していない場合など、Vetalが正常に機能できない状況では、自動的にパスを許可する。また、git push --no-verifyコマンドを使用すれば、Vetalのチェックを完全にスキップすることも可能だが、Vetalはその事実を記憶している。これはVetalが、セキュリティ上の強制的な障壁ではなく、開発者自身の理解を深めるための「意識的なスピードバンプ」として機能することを目指しているためである。

このツールの重要な点は、オープンソースのAIモデルと技術を活用していることにある。Vetalは、ローカルで動作するGemmaモデルに依存しているため、開発者のコードが外部のサーバーに送信されることがない。これは、もしクローズドなAPIサービスとして提供された場合、開発者がプッシュするすべてのdiff、つまり会社の機密情報を含む可能性のあるコードが、第三者のサーバーに送られるというプライバシーとセキュリティ上の大きな懸念が生じることを意味する。オープンウェイトモデルであれば、コードは開発者のローカルマシンから離れることがなく、プライバシーが保護される。さらに、APIキーの管理、ベンダーの承認プロセス、利用ごとのコストといった問題も発生しない。モデルのプロンプト(指示文)がリポジリトリ内で公開されているため、チームのニーズに合わせてVetalの振る舞いを調整することも可能である。

Vetal PRは、単なるコードチェッカー以上の意味を持つ。それは、開発者に自身のコードに対して責任を持ち、深く理解することを促すツールだ。現代のソフトウェア開発において、「LGTM(Looks Good To Me)」という言葉は、コードを十分に確認せずに承認する慣行を象徴することがある。Vetalは、この「知っていながら沈黙する」ことの危険性を開発者に問いかける。自分の変更を声に出して説明する能力は、潜在的な問題を早期に発見し、開発プロセス全体におけるコードの品質と信頼性を向上させるために不可欠なスキルである。Vetal PRは、まさにこの古くからの教訓を、git pushコマンドを打つすべての人々の肩の上で、新たな形で生き続けさせる試みである。

関連コンテンツ

関連IT用語

関連ITニュース