言語を切り替える
テーマを切り替える

エージェントに「専門家の頭脳」を:Antigravity のカスタム Agent Skills プラグインの開発方法

先週、チームメンバーから何度目か分からない質問をされました。「この API の認証フローって、結局どうなってるんでしょうか?」

私は長い間放置されていた Confluence ページを開き、最後の更新が6ヶ月前であることに気づきました。ドキュメントとコードがまた同期していません。ため息をつきながら、私はすでに何度も説明してきた内容をキーボードで打ち込み始めました。

その夜、Antigravity をいじっていた時に、偶然「Skills システム」を見つけました。簡単に言うと、これは AI エージェントに「専門家の頭脳」を植え付けるためのものです。特定の知識を覚えさせ、特定のプロセスを実行させ、特定のツールを呼び出させることができます。

私は2時間かけて、社内 API 用の Skill を作成しました。翌日、チームの新人が同じ質問をしてきたとき、私は Antigravity にこう打ち込みました。「ユーザーサービスの認証フローを調べて」。

エージェントは私の作成した Skill を呼び出し、30秒後にはコード例付きの正確な説明を提示しました。新人は納得した様子で、自分で作業を続けました。

あの瞬間、私は確信しました。Skill システムは単なる拡張機能ではなく、チームのコラボレーションのあり方を再定義するものだと。

この記事では、Antigravity のカスタム Skills の書き方について、基礎概念から実戦的な事例、外部 API の統合やプライベートナレッジベースとの接続方法まで詳しく解説します。

Antigravity Skills とは

まずは概念を整理しましょう。

Antigravity の Skill システムは、軽量でオープンな拡張フォーマットです。AI エージェントにインストールする「アプリ」のようなものだと考えてください。各 Skill が特定の能力を定義し、エージェントを特定のシーンでよりプロフェッショナルに振る舞わせることができます。

Google Codelabs の説明によると、Skills はディレクトリ構造を持つパッケージであり、標準化されたフォーマットによってエージェントが確実に解析・実行できるようになっています。典型的な Skill は以下で構成されます。

  • skill.yaml:Skill のメタデータ、能力の説明、使用シーンを定義
  • README.md:Skill の機能と使用方法の詳細説明
  • scripts/:実際に実行されるスクリプト(Python、Bash など)
  • templates/:プロンプトテンプレートや出力テンプレート

Skills は2つのスコープで定義できます。

  • グローバルスコープ~/.gemini/antigravity/skills/):プロジェクトをまたいで使用可能。「JSON の整形」や「汎用的なコードレビュー」など。
  • プロジェクトスコープ.agent/skills/):現在のプロジェクトのみで使用可能。「チームの API 規約」や「特定の業務用コードテンプレート」など。

このレイヤー分けされた設計は非常に使い勝手が良く、汎用的なものはグローバルに、ビジネスに関連するものはプロジェクトごとに配置できます。

初めての Skill を作成する

では、実際に作ってみましょう。

シンプルな例として、Git のコミットメッセージを自動整形する Skill を作成します。

ステップ1:ディレクトリ構造の作成

mkdir -p ~/.gemini/antigravity/skills/git-commit-formatter

ステップ2:skill.yaml の記述

name: git-commit-formatter
description: Conventional Commits 仕様に従って Git コミットメッセージを整形します
version: 1.0.0
author: your-name
triggers:
  - commit
  - git message
  - format commit
actions:
  - name: format_commit
    description: 未整形のコミットメッセージを Conventional Commits 形式に変換します
    input:
      raw_message: string
      type: enum[feat, fix, docs, style, refactor, test, chore]
    output:
      formatted_message: string

この YAML で Skill の基本情報、トリガーキーワード、入出力フォーマットを定義します。

ステップ3:実行スクリプトの記述

ディレクトリ内に scripts/format_commit.py を作成します。

#!/usr/bin/env python3
import sys
import re

def format_commit(raw_message, commit_type):
    # 元のメッセージを解析
    scope_match = re.search(r'\(([^)]+)\)', raw_message)
    scope = f"({scope_match.group(1)})" if scope_match else ""

    # 説明文を抽出
    desc = re.sub(r'\([^)]+\):?\s*', '', raw_message).strip()

    # 整形
    formatted = f"{commit_type}{scope}: {desc}"
    return formatted

if __name__ == "__main__":
    raw = sys.argv[1]
    ctype = sys.argv[2]
    print(format_commit(raw, ctype))

ステップ4:テスト

Antigravity を再起動し、以下のように入力してみてください。

「git-commit-formatter を使ってこのコミットを整形して:ログインのバグを修正しました」

正常に動作すれば、エージェントが Skill を呼び出し、fix(auth): ログインのバグを修正しました のような出力を返します。

簡単ですよね?これが Skill の基本骨格です。

外部 API の統合:GitHub + Jira 実戦

単体で動く Skill はあくまで練習用です。本当に役立つのは、外部システムと連携する Skill です。

ここでは、Jira のチケット処理を自動化する Skill を作ってみましょう。

シーン:チームは毎日、Jira での状態更新や工数入力に多くの時間を費やしています。この定型業務をエージェントに任せます。

ステップ1:API 認証の準備

Jira の API トークンとドメインが必要です。機密情報は環境変数に保存することをお勧めします。

export JIRA_API_TOKEN="your-token"
export JIRA_DOMAIN="your-domain.atlassian.net"
export JIRA_EMAIL="[email protected]"

ステップ2:Skill 設定の記述

name: jira-assistant
description: Jira ワークフローの自動化 - チケット検索、ステータス更新、工数入力
triggers:
  - jira
  - ticket
  - issue
  - worklog
actions:
  - name: search_issues
    description: JQL クエリで Jira チケットを検索します
  - name: add_worklog
    description: チケットに作業時間を記録します
  - name: transition_issue
    description: チケットのステータスを変更します

ステップ3:コアスクリプトの記述

#!/usr/bin/env python3
import os
import requests
from base64 import b64encode

class JiraClient:
    def __init__(self):
        self.domain = os.getenv('JIRA_DOMAIN')
        self.email = os.getenv('JIRA_EMAIL')
        self.token = os.getenv('JIRA_API_TOKEN')
        self.auth = self._get_auth()

    def _get_auth(self):
        credentials = f"{self.email}:{self.token}"
        return b64encode(credentials.encode()).decode()

    def search(self, jql):
        url = f"https://{self.domain}/rest/api/2/search"
        headers = {
            "Authorization": f"Basic {self.auth}",
            "Content-Type": "application/json"
        }
        response = requests.get(url, headers=headers, params={"jql": jql})
        return response.json()

    def add_worklog(self, issue_key, time_spent, comment):
        url = f"https://{self.domain}/rest/api/2/issue/{issue_key}/worklog"
        headers = {
            "Authorization": f"Basic {self.auth}",
            "Content-Type": "application/json"
        }
        data = {
            "timeSpent": time_spent,
            "comment": comment
        }
        return requests.post(url, headers=headers, json=data)

# CLI 入口
if __name__ == "__main__":
    import sys
    client = JiraClient()

    if sys.argv[1] == "search":
        result = client.search(sys.argv[2])
        for issue in result.get('issues', []):
            print(f"{issue['key']}: {issue['fields']['summary']}")

    elif sys.argv[1] == "worklog":
        client.add_worklog(sys.argv[2], sys.argv[3], sys.argv[4])
        print(f"Worklog added to {sys.argv[2]}")

ステップ4:使用方法

Antigravity で以下のように指示できるようになります。

「進行中(In Progress)の Jira チケットをすべてリストアップして」

「PROJ-123 に2時間の作業時間を記録して。コメントは『ユーザーモジュールのリファクタリング完了』で」

「PROJ-456 のステータスを Done にして」

エージェントが自動的に Jira API を呼び出すため、もう重い Jira の画面を開く必要はありません。

GitHub の統合も同様です。PyGithub ライブラリや requests を使って GitHub API を叩けば、PR の自動作成、CI 状態の確認、さらにはコードレビューを行う Skill も作成可能です。

プライベートナレッジベースとの接続:NotebookLM + Antigravity

ここが最もエキサイティングな部分です。

XDA Developers で紹介されていた事例が非常に興味深いです。著者はプロジェクトドキュメントを NotebookLM に読み込ませ、それをもとに技術仕様書を生成させ、さらにその仕様書を Antigravity Skill に変換しました。結果として、エージェントはプロジェクトドキュメントに基づき直接コードを書けるようになりました。

実現のアイデア

NotebookLM にはエクスポート機能があり、対話を構造化されたドキュメントとして出力できます。これを利用して:

  1. NotebookLM にプロジェクトナレッジ(設計書、API 仕様、アーキテクチャ決定事項)を蓄積する
  2. NotebookLM の対話機能で「ナレッジの要約」を整理する
  3. それらの要約を Skill の context(文脈)や templates(テンプレート)に変換する

あるいは、MCP(Model Context Protocol)を使って NotebookLM を Antigravity に直接接続することも可能です。

GitHub には notebooklm-antigravity-skill というオープンソースプロジェクトがあり、nlm CLI を通じてこの統合を実現しています。

name: notebooklm-knowledge
description: NotebookLM からプロジェクトナレッジを照会します
triggers:
  - ドキュメント検索
  - 規約確認
  - プロジェクト知識
actions:
  - name: query_knowledge
    description: プロジェクト固有の知識について NotebookLM に問い合わせます

スクリプト経由で NotebookLM の API を呼び出すことで、エージェントはリアルタイムにプライベートナレッジベースを検索できるようになります。

以下のようなやり取りが可能になります。

新人:「このプロジェクトのエラー処理規約ってどうなってますか?」
あなた:(Antigravity で)「NotebookLM にあるエラー処理規約を調べて」
エージェント:「プロジェクトドキュメントによると、規約は以下の通りです:1. カスタム例外クラスを使用すること… 2. ログには必ずトレースバックを含めること… 3. ユーザーに表示するエラーは多言語対応すること…」

ドキュメントが単なる記録ではなく、エージェントの「専門家の頭脳」に変わるのです。

高度なテクニック:Rules(ルール)と Skill の組み合わせ

Skills に加えて、Antigravity には「Rules」システムがあります。これらを組み合わせることで真価を発揮します。

Rules はグローバルまたはプロジェクトレベルでの行動制約です。例えば:

# .agent/rules/code-review.md

コードレビューを行う際は:
1. ユニットテストのカバー率が十分か確認すること
2. ハードコードされた機密情報がないか確認すること
3. エラー処理が適切か検証すること
4. チームの TypeScript 規約に準拠しているかチェックすること

Rule は「いつ、何をすべきか(規範)」を定義し、Skill は「具体的にどう行うか(手段)」を定義します。

Atlassian の開発者がブログで実戦例を共有しています。彼らは Antigravity に app-deployment ルールを定義し、Jira Skills と組み合わせることで、デプロイフローの自動化を実現しました。

エージェントが main ブランチへのマージを検知すると:

  1. Rule が発火:「デプロイ前チェックを実行」
  2. Skill 呼び出し:Jira 上の関連チケットの状態を確認
  3. Skill 呼び出し:テストスイートを実行
  4. Skill 呼び出し:テストを通過した場合、Jira ステータスを更新しデプロイログを記録

このコンビネーションにより、本来人間が十数ステップかけていた作業を、一言の指示でトリガーできるようになります。

結び

Skills を活用することで、Antigravity は「汎用ツール」から「専門の相棒」へと進化します

汎用的な AI はコードを書けますが、あなたのビジネスについては知りません。Skills を通じて、ビジネス知識、チーム規約、社内ツールをエージェントに植え付けることで、エージェントは真にチームの一員となります。

私は Git コミットメッセージ整形の Skill 作成から始めましたが、今ではチームで20以上の内部 Skills を蓄積しています。API ドキュメントの照会、コード規約チェック、Jira チケット処理、さらには新入社員のオンボーディングまで、定型業務を徐々にエージェントに任せています。

これは「怠けている」のではなく、エンジニアがより価値のある仕事に集中できるようにするためです。アーキテクチャの設計、難解なバグの解決、新製品の創造——これらこそが人間のすべき仕事です。繰り返しの知識照会やプロセスの操作は、エージェントに任せましょう。

もしあなたも試してみたいなら、まずは「よく聞かれる質問」や「一日に何度も繰り返す作業」を一つ選び、それを解決する Skill を書いてみてください。

エージェントが単なるツールではなく、チームの拡張(エクステンション)であることに気づくはずです。

そして Skills こそが、エージェントに専門性を与えるための「鍵」なのです。

FAQ

Antigravity Skills とは?普通のプロンプトと何が違うのですか?
Antigravity Skills は軽量で構造化された拡張フォーマットです。普通のプロンプトとの主な違いは以下の通りです:

**永続性**:一度定義すれば繰り返し利用可能。エージェントがトリガー条件を自動認識します。
**プログラマブル**:Python や Shell スクリプトを含めることができ、外部 API を呼び出して複雑なロジックを実装できます。
**共有可能**:パッケージ化してチームメンバーと共有したり、コミュニティに公開したりできます。

プロンプトは一回限りの指示ですが、Skills はエージェントにインストールする「能力アプリ」のようなものです。
Skill を作成するにはどの程度の技術知識が必要ですか?
基礎的な知識があれば十分です:

**必須スキル**:
• 基礎的な YAML 構文(Skill 設定用)
• Python または Shell スクリプトの記述能力
• API 呼び出しの基本概念の理解

**ステップアップ**:
• 外部 API の認証メカニズム(OAuth、API トークンなど)
• エラー処理とロギング
• 正規表現やテキスト処理

最もシンプルな Skill は skill.yaml ファイル一つで作成できます。まずは公式のサンプルを模倣することから始めてみてください。
API キーなどの機密情報はどのように安全に管理すべきですか?
以下のベストプラクティスを推奨します:

**環境変数(推奨)**:
• skill.yaml にキーをハードコードしない
• スクリプト内で os.getenv() 等を使って環境変数を読み込む
• ユーザーは使用前に export コマンド等で環境変数を設定する

**設定ファイル**:
• .gitignore を使って設定ファイルを Git 管理から除外する
• config.example.yaml などのテンプレートを用意する
• Skill はローカルの設定ファイルを読み込む

**絶対にしてはいけないこと**:
• キーをスクリプト内に直書きする
• キーを含んだ Skill を公開リポジトリにコミットする
Skill と Rule の違いは何ですか?どう使い分けますか?
核心的な違いは以下の通りです:

**Rules(ルール)**:
• 「いつ、何をすべきか」という行動規範を定義します
• テキスト形式の制約やチェックリストです
• エージェントの意思決定ロジックに影響を与えます

**Skills(スキル)**:
• 「具体的にどう行うか」という実行能力を定義します
• 実行可能なスクリプトや設定を含みます
• 具体的なツールや手段を提供します

**組み合わせ例**:
• Rule:「コードレビュー時には必ずテストカバー率をチェックすること」
• Skill:テストフレームワークを呼び出してテストを実行し、レポートを生成する

Rule が判断を下し、Skill が実行を担うことで、一貫した自動化ワークフローが実現します。
NotebookLM のナレッジベースを Antigravity に統合する方法は?
主に2つの方法があります:

**1. エクスポート・変換法**:
1. NotebookLM でプロジェクトナレッジを整理
2. 対話や要約を構造化ドキュメントとしてエクスポート
3. それを Skill の templates や context ファイルに変換
4. エージェントが随時参照できるようにする

**2. MCP リアルタイム接続法**(nlm CLI が必要):
• notebooklm-mcp-cli ツールをインストール
• MCP サーバーを設定して NotebookLM に接続
• Skill スクリプト内で nlm コマンドを呼び出してリアルタイム検索
• エージェントが動的に最新ナレッジを取得

GitHub の notebooklm-antigravity-skill プロジェクトなどが参考になります。

4 min read · 公開日: 2026年2月27日 · 更新日: 2026年3月18日

コメント

GitHubアカウントでログインしてコメントできます

関連記事