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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Naka Sho Naka Sho
June 17, 2026
10

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

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

Avatar for Naka Sho

Naka Sho

June 17, 2026

More Decks by Naka Sho

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