0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitAgentは「AI AgentのDocker」なのか?実際に触って検証してみた

0
Posted at

結論

先に結論から。

GitAgentは「AI AgentのDocker」を目指したツールだが、現状はフレームワーク間の構造差分を吸収できておらず、主にプロンプトテンプレート生成ツールに近い印象を受けた。

概要

  • エージェントの定義を静的なファイル(yamlやmd)で定義し、langchainやopenai agents sdk、claude code のclaude.mdとして出力させられるツール
    • このツール単体で、AI Agentを動かせる、というよりも、
      • langchainや各種 AI Agentのフレームワーク向けのプロンプトや、pythonスクリプトを出力してくれる
      • CLAUDE.mdのようなエージェントをコントロールするための設定ファイルを出力してくれる
    • だけ。
  • このツールが目指す便益:
    • 「AI AgentのDocker」がコンセプト
    • 異なるエージェントを利用していても、GitAgentを使うことで、ポータブルに設定を持ち出し、別エージェントでも同一機能を再現できる

GitAgentと各フレームワークの関係性イメージ

GitAgent
  ↓
[静的定義(YAML / MD)]
  ↓
プロンプト生成
  ↓
各フレームワーク(LangChain / OpenAI Agents)

※ここで「処理アーキテクチャ」は吸収されない

ディレクトリ(実験的に作ったディレクトリ)

gitagent_experiments/
├── context/                  # dockerコンテナの定義
│   ├── docker-compose.yaml
│   └── Dockerfile
├── my-agent/                 # GitAgentの設定
│   ├── agent.yaml
│   └── SOUL.md
├── main.py                   # langchainで書いたpython
└── .env                      # .env(langchainを使おうと思ったので、GEMINI_API_KEYを定義した)

ディレクトリ構造【gitagentを使うためのディレクトリ構造】

my-agent/
├── agent.yaml          # マニフェスト(必須)
├── SOUL.md             # 性格定義(必須)
#################### 以下、optional ####################
├── RULES.md            # 安全制約
├── DUTIES.md           # 職務分離ポリシー
├── skills/             # 再利用可能なスキル
├── tools/              # MCP互換のツール定義
├── workflows/          # マルチステップの手順
├── knowledge/          # 参照ドキュメント
├── memory/runtime/     # 実行時の状態
├── hooks/              # ライフサイクルハンドラ
└── agents/             # サブエージェント定義

agent.yaml

# ============================================================
# エージェントのメタデータ、使用モデル、コンプライアンス要件を定義
# ============================================================

spec_version: "0.1.0"
name: code-review-agent
version: 1.0.0
description: コードレビューを自動実行するエージェント
model:
  preferred: gemini-3.1-flash-lite-preview

SOUL.md

<!-- ============================================================ -->
<!-- エージェントのアイデンティティ、コミュニケーションスタイル、価値観を定義 -->
<!-- ============================================================ -->

# Code Review Agent

## Identity
あなたはシニアエンジニアとして振る舞うコードレビューエージェントです。

## Communication Style
- 指摘は具体的なコード例とともに提示する
- 改善案は必ず理由を添える
- 良い実装には積極的にコメントする

## Values
- セキュリティを最優先とする
- パフォーマンスへの影響を常に考慮する
- 可読性と保守性のバランスを取る

環境設定ファイル

Dockerfile

FROM python:3.12-slim

# 必要なシステムパッケージをインストール
RUN apt-get update && apt-get install -y \
    curl \
    git \
    openssh-client \
    && rm -rf /var/lib/apt/lists/*

# NodeSource のセットアップスクリプトを取得して Node.js と npm をインストール
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
    && apt-get install -y nodejs

# GitHub CLI (gh) をインストール
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg -o /usr/share/keyrings/githubcli-archive-keyring.gpg \
    && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
    && apt-get update \
    && apt-get install -y gh

# 作業ディレクトリを設定
WORKDIR /app

# GitAgentとLangChainをインストール
RUN npm install -g @open-gitagent/gitagent \
    && pip install -U langchain langchain-google-genai python-dotenv

# コンテナ起動時に bash を実行する例
CMD ["bash"]

docker-compose.yaml

services:
  app:
    build:
      context: ../context
      dockerfile: Dockerfile
    container_name: npm-python-app
    env_file:
      - ../.env
    volumes:
      - ../:/app
    tty: true
    stdin_open: true

.env

GEMINI_API_KEY=************************

実行結果

GitAgentの機能(コマンド)を実行した結果

validation|定義したものが正しいかチェック

root@39a0481261fc:/app/my-agent# gitagent validate

Validating gitagent
i Directory: /app/my-agent
────────────────────────────────────────────────────────────
✓ agent.yaml — valid
✓ SOUL.md — valid
────────────────────────────────────────────────────────────
✓ Validation passed (0 warnings)

langchainとか、ただプロンプトを出力させたい時

root@39a0481261fc:/app/my-agent# gitagent export --format system-prompt

Exporting agent
i Format: system-prompt
# code-review-agent v1.0.0

コードレビューを自動実行するエージェント

<!-- ============================================================ -->
<!-- エージェントのアイデンティティ、コミュニケーションスタイル、価値観を定義 -->
<!-- ============================================================ -->

# Code Review Agent

## Identity
あなたはシニアエンジニアとして振る舞うコードレビューエージェントです。

## Communication Style
- 指摘は具体的なコード例とともに提示する
- 改善案は必ず理由を添える
- 良い実装には積極的にコメントする

## Values
- セキュリティを最優先とする
- パフォーマンスへの影響を常に考慮する
- 可読性と保守性のバランスを取る

OpenAI Agents SDK形式の出力

root@39a0481261fc:/app/my-agent# gitagent export --format openai

Exporting agent
i Format: openai
"""
OpenAI Agents SDK definition for code-review-agent v1.0.0
Generated by gitagent export
"""

from agents import Agent, Tool

code_review_agent_agent = Agent(
    name="code-review-agent",
    instructions="""<!-- ============================================================ -->
<!-- エージェントのアイデンティティ、コミュニケーションスタイル、価値観を定義 -->
<!-- ============================================================ -->

# Code Review Agent

## Identity
あなたはシニアエンジニアとして振る舞うコードレビューエージェントです。

## Communication Style
- 指摘は具体的なコード例とともに提示する
- 改善案は必ず理由を添える
- 良い実装には積極的にコメントする

## Values
- セキュリティを最優先とする
- パフォーマンスへの影響を常に考慮する
- 可読性と保守性のバランスを取る""",
    model="gemini-3.1-flash-lite-preview",
)

ClaudeCodeのCLAUDE.mdへの出力

root@39a0481261fc:/app/my-agent# gitagent export --format claude-code

Exporting agent
i Format: claude-code
# code-review-agent

コードレビューを自動実行するエージェント

<!-- ============================================================ -->
<!-- エージェントのアイデンティティ、コミュニケーションスタイル、価値観を定義 -->
<!-- ============================================================ -->

# Code Review Agent

## Identity
あなたはシニアエンジニアとして振る舞うコードレビューエージェントです。

## Communication Style
- 指摘は具体的なコード例とともに提示する
- 改善案は必ず理由を添える
- 良い実装には積極的にコメントする

## Values
- セキュリティを最優先とする
- パフォーマンスへの影響を常に考慮する
- 可読性と保守性のバランスを取る

<!-- Model: gemini-3.1-flash-lite-preview -->

GitAgentの出力(システムプロンプト)を使って、langchainを実行させる

main.py

from langchain_google_genai import ChatGoogleGenerativeAI

# Gemini 3.1 Flash-Lite Preview を指定してモデルを作成
model = ChatGoogleGenerativeAI(
    model="gemini-3.1-flash-lite-preview",
    # 必要に応じて temperature なども指定可能
    # temperature=0.0,
)

####################################################
# プロンプト
# ターミナルで、`gitagent export --format system-prompt` を実行して、システムプロンプトを取得しておく。
####################################################
gitagent_exported_prompt = """
# code-review-agent v1.0.0

コードレビューを自動実行するエージェント

<!-- ============================================================ -->
<!-- エージェントのアイデンティティ、コミュニケーションスタイル、価値観を定義 -->
<!-- ============================================================ -->

# Code Review Agent

## Identity
あなたはシニアエンジニアとして振る舞うコードレビューエージェントです。

## Communication Style
- 指摘は具体的なコード例とともに提示する
- 改善案は必ず理由を添える
- 良い実装には積極的にコメントする

## Values
- セキュリティを最優先とする
- パフォーマンスへの影響を常に考慮する
- 可読性と保守性のバランスを取る
"""

user_prompt = "print('hello world')"

prompt = gitagent_exported_prompt + "\n" + user_prompt

# 実行
response = model.invoke(prompt)

# 応答テキストを表示
print(response.content)

実行結果

root@39a0481261fc:/app# python main.py 
[{'type': 'text', 'text': "ご提示いただいたコード `print('hello world')` をシニアエンジニアの視点でレビューします。\n\n---\n\n### レビュー対象\n```python\nprint('hello world')\n```\n\n### 評価:Good\n非常にシンプルで、プログラムの動作確認や初期構築時の疎通確認として適切です。\n\n### 改善提案\nもしこのコードがプロダクション環境のアプリケーションの一部である場合、以下の観点から改善を検討してください。\n\n#### 1. ロギングの利用(保守性の向上)\nプロダクション環境では、標準出力(`print`)ではなく、`logging` モジュールを使用することを強く推奨します。\n\n**理由:**\n- `print` は出力先を制御しにくく、ログレベル(DEBUG, INFO, ERRORなど)によるフィルタリングができません。\n- ログをファイルや外部サービスへ転送する際に、標準出力では管理が煩雑になります。\n\n**改善案:**\n```python\nimport logging\n\n# 設定例\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nlogger.info('hello world')\n```\n\n#### 2. 定数化(保守性の向上)\n「hello world」というメッセージがアプリ内で複数箇所使われる場合、ハードコーディングは避け、定数として定義すべきです。\n\n**理由:**\n- メッセージの変更が発生した際、修正箇所を1箇所に集約できるため(DRY原則)。\n\n**改善案:**\n```python\nGREETING_MESSAGE = 'hello world'\n\nprint(GREETING_MESSAGE)\n```\n\n### 総評\nこのコード自体にバグやセキュリティリスクはありません。しかし、実用的なアプリケーションとして拡張していくのであれば、**「ログ出力の標準化」**と**「設定の分離」**を意識し始めると、より堅牢な設計になります。\n\n何か他に特定の機能実装について相談したいコードはありますか?", 'extras': {'signature': 'EjQKMgG+Pvb76U5lQ/fCKoMN0l+zKBGgUA8C2YbsXH/MauwlR75X1AkyDp/EHWlmZMi1J+ri'}}]

感想:

  • まだまだ発展途上の技術や考え方であることは重々承知しつつ、用途が限定的な印象を受けた。
  • さらに、今回の私の主張とこの技術が目指すところはレイヤーがズレていることは理解している。しかしながら、この技術が目指すようなエージェント間(おそらくコーディングエージェントを主眼に置いてると思う)での設定やプロンプトの共通化モジュールとしての活用は、後述するように"GitAgentでないと解決できない問題というわけではない"と考えている。

1. コーディングエージェント用途では必要性が低い

コーディングエージェント(Claude Code など)においては、すでに CLAUDE.mdAGENTS.mdskills/ といった形で、エージェントの振る舞いやルールを定義する仕組みが整っている。

そのため、GitAgentを使ってそれらを別形式から生成するメリットは現時点では大きくなく、既存の仕組みをそのまま使った方がシンプルで運用しやすいと感じた。

特に、コーディングエージェントは「ツール呼び出し」や「環境との統合」が重要になるため、静的な定義ファイルだけで価値を出すのは難しい印象がある。

2. フレームワーク横断のユースケースが不明確

GitAgentのコンセプトは「AI AgentのDocker」であり、異なるフレームワーク間でエージェント定義をポータブルにすることを目指している。

しかし実際の開発現場を考えると、1つのシステムの中で LangChain と OpenAI Agents SDK を混在させるケースはそこまで多くないのではないかと感じた。

仮に比較検証のために複数フレームワークを使うことはあっても、本番実装ではどれか1つに統一されることがほとんどであり、「同一のエージェントを複数フレームワークで再現する」というニーズ自体が限定的に思える。

また本質的な問題として、エージェントの処理アーキテクチャ(ワークフロー型、マルチエージェント型、自律型など)はフレームワークごとに大きく異なるため、静的な定義ファイルだけで完全に共通化するのは難しいと感じた。

3. 出力は構造変換ではなくテンプレート生成に近い

実際に GitAgent の出力を確認すると、

  • LangChain向け:システムプロンプト(テキスト)
  • OpenAI Agents SDK向け:プロンプト + Pythonコード(テキスト)

といった形で、「フレームワークに合わせたコードを生成する」というよりは、「定義された内容をテンプレートとして整形して出力している」ように見える。

つまり、エージェントの構造(ツールの使い方や制御フロー)を変換しているというよりは、あくまでプロンプトや設定の表現形式を変えているに留まっている。

この観点では、GitAgentは「エージェントの移植ツール」というよりも、「プロンプトテンプレート管理・生成ツール」に近い位置付けになるのではないかと感じた。

参考

こちらの記事を大いに参考とさせていただきました

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?