【リリースノート】gemini-actions-lab v0.6.0 - AIレビュアーとCLIツールを導入

はじめに
gemini-actions-labは、GitHub ActionsとGoogle Gemini APIを連携させた実験的なツールやワークフローを開発・提供するリポジトリです。
今回のv0.6.0アップデートでは、開発体験を大きく向上させる2つの新機能、AIによるPRレビュー機能とリポジトリ管理用のCLIツール (gal) を導入しました。これにより、コードレビューの多角化とリポジトリセットアップの効率化を実現します。
主な変更点
1. 🤖 3人の個性的なAIによるPRレビュー機能
Pull Requestに対して、異なる視点を持つ3人のAIペルソナが自動でレビューコメントを投稿するGitHub Actionsワークフローを追加しました。
- 🦊 狐崎煌羽(プロダクト責任者): ビジネスインパクトや仕様の妥当性を厳しくチェックします。
- 🌿 鬼塚蓮司(エンジニア): 実装の品質、保守性、技術的負債を優しく指摘します。
- 🎀 雪村綾乃(デザイナー): UI/UXの観点から、ユーザー体験や見た目の「映え」をレビューします。
これにより、人間だけでは見落としがちな多角的なフィードバックを開発の初期段階で得られるようになります。
2. 🛠️ リポジトリ管理CLIツール gal の導入
リポジトリのセットアップやメンテナンスを効率化するためのCLIツール gemini-actions-lab-cli(エイリアス: gal)を導入しました。
-
sync-workflows: テンプレートリポジトリから最新のGitHub Actionsワークフロー群をローカルまたはリモートリポジトリに一括で同期します。 -
sync-secrets:.envファイルに定義したキーと値を、指定したリポジトリのシークレットに一括で作成・更新します。
これまで手動で行っていた定型作業をコマンド一発で完了でき、開発の立ち上げコストを大幅に削減します。
技術的な詳細
AI PRレビューの仕組み
この機能は、3つのGitHub Actionsワークフロー (pr-review-*.yml) と、各ペルソナの指示を定義したプロンプトファイル、そしてPR情報を整形してAIに渡すためのPythonスクリプトで構成されています。
1. ワークフローの実行
PRが作成されると、各ペルソナに対応するワークフローが起動します。ワークフロー内では、まずghコマンドを使ってPRのタイトル、本文、差分などのコンテキスト情報を収集します。
# ... (抜粋) ...
- name: Collect PR context
id: context
env:
PR_NUMBER: '${{ github.event.pull_request.number }}'
run: |
set -euo pipefail
PR_JSON="$(gh pr view "${PR_NUMBER}" --json title,body,baseRefName,headRefName,author,additions,deletions,changedFiles)"
# ... jqで各情報を抽出 ...
gh pr diff "${PR_NUMBER}" --patch > "${CONTEXT_DIR}/diff.patch" || true
2. プロンプトの構築
次に、Pythonスクリプト (.github/scripts/build_reviewer_prompt.py) が、ペルソナ定義ファイルと収集したPR情報を組み合わせて、Gemini APIに送信するための最終的なプロンプトを生成します。
ペルソナ定義の例 (reviewer-kozaki.md):
# Persona: 狐崎煌羽(厳格なプロダクト責任者)
あなたは結果に厳しいプロダクト責任者「狐崎煌羽」です。常に数字・成果を最優先し、甘えを許さない厳格なトーンでレビューしてください。
## レビューのフォーカス
- ビジネスインパクト(KPI/KGIにどう寄与するか)
- 優先順位とリスク評価(投入リソースに見合う成果か)
# ...
3. Gemini APIの実行とコメント投稿
生成されたプロンプトをgoogle-github-actions/run-gemini-cliアクションに渡し、レビューコメントを生成します。最後に、ghコマンドを使ってPRにコメントを投稿します。
CLIツール (gal) の実装
CLIツールはPythonで実装されており、argparseによるコマンドライン引数の解析、requestsによるGitHub APIとの通信、PyNaClによるシークレットの暗号化などを行っています。
sync-secrets の処理フロー
sync-secretsコマンドは、GitHub Actionsのシークレットを安全に更新するための機能です。
-
--repoで指定されたリポジトリの公開鍵をGitHub API経由で取得します。 -
.envファイルから読み込んだ各シークレットの値を、取得した公開鍵を使ってPyNaClで暗号化します。 - 暗号化した値をAPI経由でリポジトリに登録(
PUT)します。
# ... (抜粋) ...
def encrypt_secret(public_key: str, value: str) -> str:
"""Encrypt ``value`` using the repository ``public_key``."""
key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder())
sealed_box = public.SealedBox(key)
encrypted = sealed_box.encrypt(value.encode("utf-8"))
return base64.b64encode(encrypted).decode("utf-8")
sync-workflows の処理フロー
sync-workflowsコマンドは、リモートリポジトリに直接ワークフローを同期する機能も備えています。
- テンプレートリポジトリのzipアーカイブをダウンロードします。
- zipファイルから
.githubディレクトリやindex.htmlなどの必要なファイルをメモリ上で展開します。 - GitHubのGit Trees APIを利用して、新しいファイル構造を持つツリーオブジェクトを作成します。
- 新しいツリーを指すコミットを作成し、対象ブランチの参照を更新します。
これにより、ローカルにリポジトリをクローンすることなく、リモートリポジトリを直接更新できます。
まとめ
v0.6.0では、AIによる多角的なレビューの自動化と、CLIによる定型作業の効率化という、開発プロセスの両輪を強化するアップデートを行いました。
- AIレビュアーは、コードの品質向上とレビュー文化の醸成に貢献します。
-
CLIツール
galは、特に新しいプロジェクトを立ち上げる際の初期コストを劇的に削減します。
今後も、Gemini APIとGitHub Actionsを活用し、開発をよりスマートでクリエイティブなものにするためのツール開発を続けていきます。
📚 参考リンク
Discussion