AI開発の「司法制度」を切り出して、ポータブルなGitHub Actionとして公開しました。
前回は、ブラウザのGeminiを3、4窓同時進行で人力オーケストレーションして開発し、脳負荷がかかってジャンキーだと喜んでいたのを、AIによるオーケストレーションな仕組みにしてOSS基盤に埋め込みました。
エラーの内容も確認しないでやたらコードを書きたがったり、嘘をついたり、手っ取り早くエラーを解消するために無闇にSAにowner権限つけたがったりするAIのやんちゃさを、Datadog、別のAIによる相互検閲、.clinerulesによるルール定義でガードレールからはみ出さないようにすることで、人間が意思決定(大岡裁き。いわゆる三方一両損。三方=SSG=スピード・セキュリティ・ガバナンス)に専念できるようになりました。
最初ローカルで動かしてたのですが、なんだかダサい気がすると思ったのでCloudBuild+Dockerで動かしてみたらすごいいいなと思ったので、他のプロジェクトでも気軽に使いたくなり、AIによるコードレビューのところだけGitHub Actionとして切り出しました。
2026.05.12 追加:マルチプロバイダー対応: Gemini / Claude / GPT-4o など、LiteLLM が対応する100以上のモデルを model パラメータ1つで切り替え可能にしました。
特徴
今回公開した AI PR Reviewer Action は「AIによるAIの相互検閲」というプロセスを、どんなリポジトリにも数行のYAMLで移植可能にしたものです。どんな条件でレビューするのかは自由にカスタマイズできて、トリガーはPRです。
-
ルール(.clinerules)のポータビリティ
プロジェクト固有のルールを外部ファイル(.clinerules等)として注入できます。これにより個別のプロジェクトごとに異なるガバナンスをAIに即座に理解させることが可能です。 -
証跡の標準化(Artifactsとしての判例集)
OSSのオプションにつけたDatadogのAIの指摘ログ。いいんですけど、重い(いろいろな意味で)。なのでログをGitHubのArtifactsとして出力・保存できるようにしました。これでプロジェクト内に気軽に「判例」を蓄積していけます。 -
セキュリティ・フィルタリングの標準実装
AIという外部知性にコードを晒す、ということなので機密情報の自動マスキングを組み込みました。 -
開発者へのSuggest
AIの指摘を、そのままマージ可能な具体的な修正案として提示します。また毎回新しいコメントを投稿してタイムラインを荒らすのではなく、AIのコメントを上書き(Update)するようにしました。
その他簡易的なリトライロジックを内蔵していたり、.lock や dist/ などの不要なファイルを除外してコストの節約・ノイズ削減、英語対応など。
導入方法:
以下のYAMLを配置するだけでOKです。
name: AI PR Reviewer (by Misaki)
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run AI PR Reviewer
uses: shinkawamisaki/ai-pr-reviewer-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
gemini_api_key: ${{ secrets.GEMINI_API_KEY }}
# オプション: 読み込ませたいルールファイルのパスを指定します(デフォルトは '.clinerules')
rules_file: '.clinerules'
# オプション: レビュー結果をファイルとして保存したい場合にパスを指定します
output_path: 'ai-review-report.md'
# オプション: レビュー対象から除外したいファイルのパターンを指定します
exclude_patterns: '*-lock.json,*-lock.yaml,*.lock,dist/*,node_modules/*,vendor/*'
# オプション: 出力言語の指定。'ja-JP' (日本語) または 'en-US' (英語) を指定できます。
language: 'ja-JP'
# 保存したレビュー結果を活用する例(GitHub Artifactとして保存)
- name: Upload review report
if: always()
uses: actions/upload-artifact@v4
with:
name: ai-review-report
path: ai-review-report.md
モデルには gemini-2.5-flash を採用してます。
おわりに
OSS基盤がなんかとんでもないことになってきて、機能を足すたびに「これ切り出したい」ってずっと思ってて、一個切り出せてすっきりしました。でも切り出すとまた「この切り出したやつに、あの機能をつけたい」「これも」となるのを「いやOSSでしょ?やめなよそれ」とAIに止めてもらいました😅
