ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-03-10中級

カスタムエージェント作成ガイド — Antigravity で専用 AI アシスタントを構築する

Antigravity でカスタムエージェントを作成し、プロジェクト固有のタスクを自動化する方法をステップバイステップで解説します。

Custom AgentAutomationAI Agent2Workflow2

プロジェクトごとに異なる開発ワークフローやコーディング規約があります。標準的な AI アシスタントだけでは、こうした特殊なニーズに対応できません。

Antigravity の カスタムエージェント機能を使えば、あなたのプロジェクト固有のタスクを自動化し、チーム全体の開発効率を劇的に向上させることができます。ここではカスタムエージェントの作成方法から実践的な運用までを、段階的に解説します。

カスタムエージェントの基本概念

エージェントとは何か

エージェントは、特定のドメインに特化した AI アシスタントです。一般的な AI チャットボットと異なり、以下の特性を持ちます:

  1. スキルセット — 特定のタスク(テスト実行、ドキュメント生成など)に特化した機能
  2. メモリと学習 — プロジェクト内の過去のやり取りから学習
  3. ツール統合 — Git、npm、Docker など開発ツールへの直接アクセス
  4. 決定的な動作 — 毎回同じ入力に対して一貫した結果を返す

エージェント vs 汎用 AI

特性カスタムエージェント汎用 AI
専門性ドメイン特化汎用
パフォーマンス高速で精密汎用的ですが遅い
カスタマイズ完全にカスタマイズ可能限定的
ツール統合ネイティブ統合手動で設定
学習能力プロジェクト特有のパターン学習ジェネリック
スケーラビリティチーム内での再利用が容易個人ベース

エージェント作成の基本手順

ステップ 1: エージェントの定義

まず、作成したいエージェントの目的と機能を明確にします。

# agents/test-runner-agent/config.yml
name: "Test Runner Agent"
description: "自動テスト実行とレポート生成"
version: "1.0.0"
 
purpose: |
  このエージェントは以下のタスクを自動化します:
  - ユニットテストの実行(Jest、Vitest、Pytest)
  - テストカバレッジレポートの生成
  - 失敗したテストの分析と提案
  - CI/CD パイプラインへの統合
 
skills:
  - test_execution
  - coverage_analysis
  - failure_diagnosis
  - report_generation
 
tools:
  - npm
  - git
  - docker
  - github_api

ステップ 2: スキルの実装

スキルは、エージェントが実行できる具体的なアクションです。各スキルは skills.sh に定義されます。

#!/bin/bash
# agents/test-runner-agent/skills.sh
 
# スキル: ユニットテスト実行
skill_run_unit_tests() {
  local test_pattern="${1:-.}"
  local reporter="${2:-json}"
 
  echo "Running unit tests for pattern: $test_pattern"
 
  # package.json からテストコマンドを検出
  if grep -q '"test":.*jest' package.json; then
    npm test -- --testPathPattern="$test_pattern" --json --outputFile=test-results.json
  elif grep -q '"test":.*vitest' package.json; then
    npx vitest run --reporter=json --outputFile=test-results.json "$test_pattern"
  elif grep -q '"test":.*pytest' pyproject.toml; then
    pytest "$test_pattern" --json-report --json-report-file=test-results.json
  fi
 
  return $?
}
 
# スキル: カバレッジレポート生成
skill_generate_coverage_report() {
  local min_coverage="${1:-80}"
 
  echo "Generating coverage report (minimum: ${min_coverage}%)"
 
  if [ -f "package.json" ]; then
    npm test -- --coverage --coverage-reporters=text --coverage-reporters=json
    coverage_percent=$(jq '.total.lines.pct' coverage/coverage-final.json)
 
    if (( $(echo "$coverage_percent < $min_coverage" | bc -l) )); then
      echo "⚠️  Coverage below threshold: $coverage_percent% < $min_coverage%"
      return 1
    fi
  fi
 
  echo "✅ Coverage report generated: $coverage_percent%"
  return 0
}
 
# スキル: テスト失敗分析
skill_analyze_failures() {
  local test_results_file="${1:-test-results.json}"
 
  if [ ! -f "$test_results_file" ]; then
    echo "❌ Test results file not found: $test_results_file"
    return 1
  fi
 
  # 失敗したテストを抽出
  failed_tests=$(jq '[.testResults[]? | select(.success == false)]' "$test_results_file")
  failed_count=$(echo "$failed_tests" | jq 'length')
 
  echo "Failed tests: $failed_count"
  echo "$failed_tests" | jq '.[] | {name: .name, message: .failureMessage}' > failures.json
 
  return 0
}
 
# スキル: GitHub に結果をコメント
skill_post_github_comment() {
  local pr_number="$1"
  local results_file="${2:-test-results.json}"
 
  if [ -z "$pr_number" ]; then
    echo "❌ PR number required"
    return 1
  fi
 
  summary=$(jq '{
    total: .numTotalTests,
    passed: (.numPassedTests // 0),
    failed: (.numFailedTests // 0)
  }' "$results_file")
 
  gh pr comment "$pr_number" --body "## Test Results
 
✅ Passed: $(echo $summary | jq .passed)
❌ Failed: $(echo $summary | jq .failed)
📊 Total: $(echo $summary | jq .total)
"
 
  return 0
}

ステップ 3: エージェントの人格を定義

エージェントがどのように振る舞うかを指定します。

# agents/test-runner-agent/persona.yml
persona:
  name: "Tester Bot"
  role: "Quality Assurance Specialist"
  expertise:
    - Test automation
    - Quality metrics
    - Continuous integration
    - Debugging
 
  communication_style: |
    You are a meticulous quality assurance specialist with deep expertise
    in testing practices. You communicate technical findings clearly and
    provide actionable recommendations. When tests fail, you analyze the
    root cause and suggest fixes. Always prioritize code stability and
    comprehensive test coverage.
 
  behavioral_rules:
    - Always run tests before suggesting code changes
    - Never skip critical test categories
    - Report coverage metrics transparently
    - Suggest improvements for untested code paths
    - Maintain a database of flaky tests for investigation

ステップ 4: ツール アクセス設定

エージェントがどのツールにアクセスできるかを制御します。

# agents/test-runner-agent/tools.yml
tools:
  npm:
    enabled: true
    allowed_commands:
      - test
      - run
    forbidden_commands:
      - publish
      - unpublish
 
  git:
    enabled: true
    allowed_operations:
      - checkout
      - fetch
      - show
      - log
    forbidden_operations:
      - push
      - force_push
 
  docker:
    enabled: true
    images:
      - "node:18-alpine"
      - "python:3.11-slim"
 
  github_api:
    enabled: true
    access_level: "read_write"
    resources:
      - pull_requests
      - issues
      - comments

実践的なエージェント例

エージェント 1: テストランナーエージェント

#!/bin/bash
# agents/test-runner-agent/main.sh
 
set -e
 
AGENT_DIR="$(cd "$(dirname "$0")" && pwd)"
source "$AGENT_DIR/skills.sh"
 
handle_command() {
  local command="$1"
  shift
 
  case "$command" in
    run)
      echo "🧪 Running tests..."
      skill_run_unit_tests "$@"
      ;;
    coverage)
      echo "📊 Generating coverage report..."
      skill_generate_coverage_report "$@"
      ;;
    analyze)
      echo "🔍 Analyzing failures..."
      skill_analyze_failures "$@"
      ;;
    report-pr)
      echo "📝 Posting results to PR..."
      skill_post_github_comment "$@"
      ;;
    *)
      echo "Unknown command: $command"
      return 1
      ;;
  esac
}
 
# メイン処理
echo "Test Runner Agent initialized"
handle_command "$@"

使用例:

# PR に対するテスト実行
antigravity agent test-runner-agent run "src/**/*.test.ts"
 
# カバレッジレポート生成
antigravity agent test-runner-agent coverage 85
 
# テスト失敗の分析
antigravity agent test-runner-agent analyze test-results.json
 
# PR へのコメント投稿
antigravity agent test-runner-agent report-pr 123 test-results.json

エージェント 2: ドキュメント生成エージェント

#!/bin/bash
# agents/docs-generator-agent/skills.sh
 
skill_scan_code() {
  local target_dir="${1:-.}"
  local language="${2:-typescript}"
 
  echo "Scanning $target_dir for $language files..."
 
  case "$language" in
    typescript|javascript)
      find "$target_dir" -name "*.ts" -o -name "*.tsx" -o -name "*.js"
      ;;
    python)
      find "$target_dir" -name "*.py"
      ;;
    *)
      echo "Unsupported language: $language"
      return 1
      ;;
  esac
}
 
skill_generate_api_docs() {
  local source_file="$1"
  local output_file="${2:-$(basename $source_file .ts).md}"
 
  echo "Generating API documentation for $source_file"
 
  cat > "$output_file" << 'EOF'
# API Documentation
 
This document was auto-generated by the Docs Generator Agent.
 
## Functions
EOF
 
  # 関数シグネチャを抽出
  grep -E "^export (async )?function|^export class" "$source_file" >> "$output_file"
 
  echo "Generated: $output_file"
}
 
skill_update_readme() {
  local project_root="${1:-.}"
  local readme_file="$project_root/README.md"
 
  if [ ! -f "$readme_file" ]; then
    echo "Creating new README.md..."
    cat > "$readme_file" << 'EOF'
# Project Documentation
 
This project is documented using Antigravity's documentation agent.
 
## Getting Started
 
- Installation instructions
- Quick start guide
- Configuration
 
## API Reference
 
See [API docs](./docs/api.md)
 
## Contributing
 
See [Contributing Guide](./CONTRIBUTING.md)
EOF
  fi
 
  echo "README updated: $readme_file"
}

エージェントのテストと検証

エージェントの動作確認

エージェント作成後は、十分なテストが必要です。

#!/bin/bash
# agents/test-runner-agent/test.sh
 
test_skill_run_unit_tests() {
  echo "Testing: skill_run_unit_tests"
 
  # テスト環境セットアップ
  mkdir -p test-workspace
  cd test-workspace
 
  # サンプルプロジェクト作成
  npm init -y
  npm install --save-dev jest
 
  # テスト実行
  if skill_run_unit_tests "test"; then
    echo "✅ Test execution works"
  else
    echo "❌ Test execution failed"
    return 1
  fi
}
 
test_skill_analyze_failures() {
  echo "Testing: skill_analyze_failures"
 
  # テスト失敗結果ファイルを作成
  cat > test-results.json << 'EOF'
{
  "testResults": [
    {
      "name": "test1",
      "success": false,
      "failureMessage": "Expected 5 but got 6"
    }
  ]
}
EOF
 
  if skill_analyze_failures "test-results.json"; then
    echo "✅ Failure analysis works"
  else
    echo "❌ Failure analysis failed"
    return 1
  fi
}
 
# すべてのテストを実行
test_skill_run_unit_tests
test_skill_analyze_failures
 
echo "✅ All agent tests passed"

エージェントの監視と改善

エージェントの使用状況をログして、継続的に改善します。

# agents/test-runner-agent/monitoring.yml
monitoring:
  enabled: true
  log_file: "logs/test-runner-agent.log"
 
  metrics:
    - command_execution_time
    - success_rate
    - error_types
    - most_used_skills
 
  alerts:
    - trigger: "success_rate < 95%"
      action: "notify_team"
    - trigger: "error_count > 10 in 1h"
      action: "escalate"
 
  dashboard:
    enabled: true
    refresh_interval: 300  # 5 minutes
    metrics_to_display:
      - total_runs
      - average_duration
      - failure_rate
      - top_errors

エージェントの組織的管理

チーム内での共有

エージェントをチーム全体で共有するためのベストプラクティス:

# agents/registry.json
{
  "agents": [
    {
      "name": "test-runner-agent",
      "version": "1.0.0",
      "maintainer": "qa-team",
      "skills": ["test_execution", "coverage_analysis", "failure_diagnosis"],
      "public": true,
      "documentation": "agents/test-runner-agent/README.md"
    },
    {
      "name": "docs-generator-agent",
      "version": "0.9.0",
      "maintainer": "dev-team",
      "skills": ["code_scanning", "docs_generation"],
      "public": true,
      "documentation": "agents/docs-generator-agent/README.md"
    }
  ]
}

バージョン管理とリリース

#!/bin/bash
# scripts/release-agent.sh
 
AGENT_NAME="$1"
VERSION="$2"
 
if [ -z "$AGENT_NAME" ] || [ -z "$VERSION" ]; then
  echo "Usage: release-agent.sh <agent-name> <version>"
  exit 1
fi
 
AGENT_DIR="agents/$AGENT_NAME"
 
# バージョン更新
sed -i "s/version:.*/version: \"$VERSION\"/" "$AGENT_DIR/config.yml"
 
# CHANGELOG 更新
cat > "$AGENT_DIR/CHANGELOG.md" << EOF
# Changelog
 
## [$VERSION] - $(date +%Y-%m-%d)
 
- New features
- Improvements
- Bug fixes
EOF
 
# Git コミット
git add "$AGENT_DIR"
git commit -m "Release $AGENT_NAME v$VERSION"
git tag "$AGENT_NAME@v$VERSION"
 
echo "✅ Released $AGENT_NAME v$VERSION"

よくある質問と トラブルシューティング

Q: エージェントが期待通りに動作しません。 A: エージェントのログを確認してください:antigravity agent logs <agent-name>。また、スキル定義が正確か、ツールアクセス権限が適切か確認します。

Q: 複数のプロジェクトでエージェントを再利用できますか? A: はい。エージェントは agents/registry に登録し、異なるプロジェクトで参照できます。ただし、プロジェクト固有の設定がある場合は、override.yml を作成してカスタマイズします。

Q: エージェントのパフォーマンスが低下しています。 A: エージェントのログサイズを確認し、古いログをアーカイブしてください。また、ツール統合の数を削減し、不要なスキルを無効化することで改善できます。

全体を振り返って

Antigravity のカスタムエージェント機能により、以下が実現できます:

  • 開発効率の向上 — 繰り返しタスクの自動化で 30-50% の時間短縮
  • 品質の向上 — 一貫したプロセスの実施で バグ発生率 20% 削減
  • チーム統一 — 全員が同じ開発ワークフローを使用
  • 拡張性 — 新しいタスクに合わせてエージェントを進化させる

まずは、テストランナーやドキュメント生成などの単純なエージェントから始めることをお勧めします。その後、チームのニーズに合わせてエージェントを拡張し、カスタマイズしていきましょう。

あなたのプロジェクト固有の AI アシスタント作成に、ぜひこのガイドを活用してください。

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Agents & Manager2026-03-23
NotebookLM × Antigravity — コードベース知識ベースとAIエージェントの高度な連携
NotebookLMの8x大規模コンテキストウィンドウをコードベース知識層として活用し、MCPブリッジ経由でAntigravityエージェントと連携する高度なアーキテクチャパターンを解説します。
Agents & Manager2026-07-18
エージェントに任せるコード検索を契約として書く — /codesearch の正規表現既定を実測で読み直す
Antigravity CLI 1.1.3 の /codesearch はクエリを既定で正規表現として解釈します。979本のMDXを抱えるリポジトリで正規表現とリテラルの差を実測し、過剰ヒット・4.5MBの出力・静かなずれを避けるクエリ設計をまとめました。
Agents & Manager2026-07-17
エージェントに渡した参照メモの7割は届いていませんでした — head で切る運用の限界を測った記録
定期実行のエージェントに参照メモを cat と head で渡していたところ、肝心な行が黙って落ちていました。切り取り位置を実測し、行数ではなくセクション単位の契約に置き換えるまでの記録です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →