Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ローカルLLMで自動レビューの仕組み

Avatar for Naka Sho Naka Sho
June 17, 2026
17

 ローカルLLMで自動レビューの仕組み

ローカルLLMで自動レビュー

Avatar for Naka Sho

Naka Sho

June 17, 2026

Transcript

  1. 自己紹介 ブログ : shogo-nakao.hatenablog.com 技術スタック : Spring Boot / Google

    Cloud 今日話すこと 1. ローカル LLM をうまく使っていこう 2. Google Chat + Pub/Sub を使ってローカル LLM を安全に使う 3. 例: PR レビューを自動化する実装 2
  2. ローカル LLM の精度が少し上がってきた ローカルで動かせる LLM が充実してきた しかも 無料 or 低コスト

    で運用できるものが多い うまく活用できたらコストを大幅に削減できるかも? 活用場所は限定される なぜなら PC 環境に依存するので、ハイスペックな PC を求められる。 普通の人にはハードルが高い。 ただ、限定的な小規模タスクのレビュー程度なら、ローカル LLM で十分な精度が出ること も多い。 問題点 レビューまでのコストが高い。 ローカルに対象リポジトリを入れないと行けない。 5
  3. コスト Pub/Sub: 月 10GB まで無料 LLM 推論 : ローカル実行 =

    電気代のみ 個人の Gmail アカウントでほぼ無料で運用可能 6
  4. セットアップ手順 1. Pub/Sub トピック&サブスクリプション作成 # トピック作成 gcloud pubsub topics create

    gchat-events # サブスクリプション作成 gcloud pubsub subscriptions create gchat-sub \ --topic=gchat-events \ --ack-deadline=60 2. Google Chat API の設定 Google Cloud Console → Google Chat API を有効化 Bot の接続設定を Pub/Sub に変更 トピック名を指定 7
  5. IAM 設定(ここが落とし穴) よくある間違い # NG: トピックの「権限」タブから設定しようとする # → サービスアカウントが見つからず設定できない 正しい設定方法

    # Chat サービスアカウントにトピックへの publish 権限を付与 gcloud pubsub topics add-iam-policy-binding gchat-events \ --member="bot のメールアドレス" \ --role="roles/pubsub.publisher" Google Chat の内部サービスアカウント bot のメールアドレス に権限を付与する 8
  6. 全体フロー Google Chat ( メンション / コマンド) ↓ Pub/Sub publish

    Pub/Sub サブスクリプション ↑ subscribe (ローカル PC ) Batch Application ↓ LM Studio (ローカル推論) ↓ GitHub / Backlog API (レビュー投稿) 10
  7. 直列処理で LM Studio を安定稼働 private static final long MAX_OUTSTANDING_MESSAGES =

    1L; private static final int CALLBACK_EXECUTOR_THREADS = 1; private static final int PARALLEL_PULL_COUNT = 1; パラメータ 値 意味 maxOutstandingMessages 1 同時取得は 1 件まで executorThreads 1 処理スレッドは 1 本 parallelPullCount 1 並列 Pull なし ローカル GPU は並列処理が苦手 → 1 件ずつ順番に処理 12
  8. 手動実行もできる # PR URL を直接指定してレビュー task review-pr PR_URL=https://github.com/owner/repo/pull/123 # Pub/Sub

    ペイロードをローカル再現(デバッグ用) task review-payload PAYLOAD='{"prUrl": "...", ...}' review-pr : PR URL を直接指定してローカル実行 review-payload : 受信ペイロードを再現してデバッグ subscribe-reviews : 本番運用。 Pub/Sub を継続監視 13
  9. Spring Boot Web + Thymeleaf task run-web # http://localhost:8080 ブラウザ

    → POST /reviews ↓ ReviewPageController ↓ ReviewWorkflowService (batch と共通) ↓ LM Studio ↓ GitHub / Backlog API 結果を画面に表示 15
  10. ReviewPageController @Controller public class ReviewPageController { @PostMapping("/reviews") public String review(@ModelAttribute

    ReviewForm form, Model model) { ReviewExecutionResult result = reviewWorkflowService.processRequest( reviewRequestFactory.createRequest( form.getPrUrl(), parsePublishMode(form.getPublishMode()), form.getInstructions(), form.isDiscardExistingPending())); model.addAttribute("result", result); return "index"; } } 16
  11. フォーム項目 項目 説明 PR URL GitHub / Backlog の PR

    URL Publish mode GITHUB_PENDING / BACKLOG_COMMENT / DRAFT_ONLY Instructions LM Studio への追加指示(任意) Discard existing pending 既存 Pending を削除してから投稿 batch の review-pr コマンドと同じ ReviewWorkflowService を共有 17
  12. MCP (Model Context Protocol) とは LLM が 外部ツールを呼び出す ための標準プロトコル LM

    Studio (lmstudio が子プロセスとして MCP Server を自動起動) ↓ STDIO (MCP) Spring Boot MCP Server ↓ GitHub API / Backlog API lmstudio の設定に起動コマンドを登録するだけ — 手動起動不要 19
  13. 提供ツール一覧 ツール名 説明 fetchPrComments GitHub PR の本文・コメント・インラインコメント取得 getPrDiff GitHub PR

    の unified diff 取得 reviewExamToPrPending GitHub に Pending レビューを投稿 fetchBacklogPrComments Backlog PR の情報取得 addBacklogPrComment Backlog PR にコメント投稿 @Tool( name = "fetchPrComments", description = "GitHub PR の本文・コメント・インラインコメントを取得") public FetchPrCommentsService.Result fetchPrComments( @ToolParam(description = "PR URL") String prUrl) { PrRef ref = PrUrlParser.parse(prUrl); return fetchPrCommentsService.fetchPrComments(ref, prUrl); } 20
  14. lmstudio との連携フロー 1. lmstudio の MCP 設定に java -jar mcp.jar

    を登録 2. ユーザーが「この PR をレビューして」と指示 3. lmstudio が MCP Server を 自動起動( STDIO ) 4. LLM が 自律的にツールを選択・呼び出す fetchPrComments / getPrDiff → レビュー生成 → reviewExamToPrPending LLM 自身がエージェントとして動作 コードを書かずに LLM が直接 GitHub を操作 21
  15. OpenClaw とは 自己ホスト型の AI エージェントフレームワーク( MIT ライセンス) LM Studio などローカル

    LLM にネイティブ対応 GitHub PR レビュースキルが標準搭載 Pub/Sub 風の Heartbeat / Webhook 通知が組み込み済み MCP サーバー/クライアントの両モードで動作 npm install + 設定ファイル 1 枚で即起動 今回やりたいことがすべて揃っている 23
  16. OpenClaw vs 自作 観点 OpenClaw 自作 導入速度 数時間で動作 遅い LM

    Studio 連携 設定 1 コマンドで完了 自前 PR レビューフロー スキル・ MCP 追加だけで即利用 自前 セキュリティ 怪しい 把握 24
  17. OpenClaw を選ばなかった理由 セキュリティリスク ClawHub (スキルマーケット)の 約 12% が悪意あるコードを含む と報告 プロンプトインジェクション・ツールハイジャッキングへの脆弱性

    CVE-2026-25253 (クリティカルな脆弱性)が発覚 コントロールの問題 タスクが失敗しても「完了」と報告する事例が多数 過剰な推論ループで 予期しない副作用が発生しうる 高い権限によって攻撃リスクが増大 25
  18. カスタマイズ GitHub PR レビュー以外のタスクも自動化 Backlog など他のツールも同じフローで対応可能 google docs, jira, Redmine

    などツールも同様に連携可能 ビジネスロジックを完全制御 レビュー以外のロジックはすべてシステム側で実装 ( 再現性の高いシステム ) 独自フィルターやルールを自由に実装可能。例えば「 PR 以外の URL はレビュー しない」 「特定の PR は別モデルでレビューする」など 26
  19. 3 つのレビュー起動方法 方法 用途 batch 自動 Google Chat から無人実行 Web

    UI ブラウザで手軽に手動実行 **MCP ** LLM が自律的にツール選択 28
  20. pub/sub を使うメリット ポート開放・ VPN・ngrok 不要 インバウンド通信ゼロ でローカル LLM をクラウドと接続 Pub/Sub

    の 7 日間保持 → オフラインでも安心 ローカル推論 = コスト実質 0 (電気代のみ) まとめると 外部から直接触れないローカルリソースを クラウドのイベントドリブンで活用 できる 29