🤖 Gemini Reviewer Core

🚀 概要 (About) - ビジネスロジックに集中させる、Git & Gemini 抽象化レイヤー
Gemini Reviewer Core は、Google Gemini API を活用し、Git リポジトリのブランチ間の差分を分析して AI コードレビューを自動生成するための コアライブラリ です。
本ライブラリは、CLI ツール や Web アプリケーション の共通基盤として設計されています。Git 操作、AI 通信、プロンプト生成といった「ビジネスロジック」に加え、HTML 変換や結果保存を行う公開層(Publisher)を提供します。これにより、利用側はインフラの実装詳細を意識することなく、レビュー結果の生成から公開までを一貫して行えます。
🎯 本ライブラリの価値 (Value Proposition)
本ライブラリは、AI レビュー機能を単なるスクリプトとしてではなく、大規模なアプリケーションにも組み込める持続可能な基盤 として提供します。
- ⚡ 開発効率の最大化: Git 操作、SSH 認証、AI との対話、結果の整形・公開といった複雑なプロセスをすべて抽象化し、利用者はコアなビジネスロジックの記述に集中できます。
- 📐 アーキテクチャの堅牢性: 厳格なクリーンアーキテクチャと 依存性逆転の原則 (DIP) に基づいて構築されているため、テストが容易で、クラウドストレージの変更や AI モデルの切り替えといった 拡張に対する耐性 を持っています。
- 🌐 マルチクラウド対応: GCS/S3 への公開を抽象化されたインターフェース (
Publisher) で一元管理できるため、利用環境を選びません。
- 🛠️ 環境適応性: サーバー環境での安定実行(
go-git)と、ローカル環境での高速実行(os/exec)を要件に応じて柔軟に切り替え可能です。
🧩 Git 操作戦略:アーキテクチャ設計と適応性
プロジェクトの環境に合わせて、最適なGit操作アダプターを選択可能です。
| 特徴 |
GitAdapter |
GitLocalAdapter |
| 戦略 |
純粋な Go 実装 (go-git) |
外部コマンド (git diff) |
| 更新 |
Fetch 主体 (使い捨て) |
Pull 主体 (永続化) |
| 強み |
OS非依存、インメモリ操作 |
高速、.gitattributes 考慮済 |
| 認証 |
Go内での認証管理 |
OS標準 (SSH/Agent/Config) |
| 制御 |
context.Context に完全準拠 |
exec.CommandContext でタイムアウト制御 |
| 適性 |
サーバーレス・コンテナ環境 |
ローカル開発・CIパイプライン |
✨ 技術スタック (Technology Stack)
📐 ライブラリ構成
このライブラリは、クリーンアーキテクチャに基づき、コアロジックを再利用可能なコンポーネントとして提供します。
gemini-reviewer-core
└── pkg
├── domain # ドメインモデルとポート(インターフェース)定義
│ └── ports.go # 各層を繋ぐ抽象インターフェースの集約定義
│
├── adapters # 外部システム接続の具体実装(アダプター層)
│ ├── gemini_adapter.go # Gemini API による推論ロジック
│ ├── git_adapter.go # go-git (In-memory/Disk) による操作
│ ├── git_local_adapter.go # ローカル git コマンドによる操作
│ ├── git_auth.go # SSH 認証およびホストキー検証
│ └── git_option.go # ジェネリクスを用いた Git オプションの共通化
│
├── prompts # AI プロンプトの管理と構築
│ └── template_builder.go # 動的データ注入とプロンプト生成
│
└── publisher # レビュー結果の変換と外部公開
├── publisher.go # 公開パイプライン(変換〜アップロード)
└── md_adapter.go # Markdown から HTML への変換アダプター
パッケージの役割
pkg/domain: 本プロジェクトにおける「システムの中心」です。レビューデータモデル(ReviewData)や、各パッケージが遵守すべきインターフェース(PromptBuilder, Publisher など)を定義し、循環依存を防ぎながら各層の整合性を保ちます。
pkg/adapters: Git リポジトリからのソースコード取得や、Gemini API との通信といった、外部 I/O を伴う実装をカプセル化しています。domain で定義されたインターフェースを具象化する役割を担います。
- Git 操作の柔軟性:
go-git を使う GitAdapter と、OSの git コマンドを使う GitLocalAdapter を選択可能です。
pkg/prompts: go:embed でバイナリに内包された Markdown テンプレートを使用し、PromptBuilder を通じてレビュー対象の差分データを安全かつ柔軟に注入する責務を持ちます。
pkg/publisher: 生成された Markdown レビューを HTML へ変換し、go-remote-io を通じてオブジェクトストレージ(GCS/S3 等)へアップロードする責務を持ちます。
📜 ライセンス (License)
このプロジェクトは MIT License の下で公開されています。