YEND.DEV

AIエージェントとフロントエンド開発をつなぐAgentationが便利そう

  • Agentation
  • フロントエンド開発
Xで共有する
目次

Agentationを触ってみたのでメモ。

概要

Agentationは、Webページ上の要素にアノテーションを付けて、AIコーディングエージェント向けの構造化フィードバックを生成できる開発ツール。開発環境として記事執筆時点ではReactが対象。

要素クリック・テキスト選択・メモ追加で、任意のエージェントに渡せるMarkdownを出力する。クラス名やセレクタ、位置情報など含められるため、AIエージェントが該当コードを素早く特定できる。

Annotating for agents」の投稿が起点になっているらしい。

導入

インストール

sh
npm install agentation

セットアップ

アプリのルート(もしくはルートに近い場所)で<Agentation />を追加する。NODE_ENVを参照して、開発環境でのみ有効にする。

tsx
import { Agentation } from "agentation";

function App() {
  return (
    <>
      <YourApp />
      {process.env.NODE_ENV === "development" && <Agentation />}
    </>
  );
}

使い方

ざっくり以下の手順で使う。

  1. 右下のメニューアイコンをクリックして有効化
  2. 要素にホバーすると要素名がハイライト表示される
  3. 対象の要素をクリックしてアノテーションを追加
  4. フィードバックを書いてAddをクリック
  5. コピーアイコンでMarkdownをコピー
  6. エージェントに貼り付ける

エージェントとの連携

Agentationはコードベースにアクセスできるエージェント(Claude Code、Cursor、Windsurfなど)と組み合わせて使う。

  1. 実行中のアプリでバグや修正したい箇所を見つける
  2. Agentationで要素にアノテーションを付ける
  3. 出力をコピーしてエージェントに貼る
  4. エージェントがクラス名やセレクタでコードを検索
  5. 該当するコンポーネント/ファイルを見つけて修正

Agentationを使うことで簡単に .sidebar > .nav-actions > button.primary の様なコンテキストを渡せるので、エージェントが直接grepで特定しやすくなる。

動作デモ

公式ドキュメントでデモを試せる。以下はこのブログでClaude Codeと組み合わせて使ってみた様子。

出力形式

Agentationは4つの出力フォーマットを提供している。

※詳しくは「Output | Agentation」を参照。

フォーマット説明用途
Compact最小限のコンテキストで迅速なフィードバック小規模な修正
Standard位置情報やクラス名を含むバランス型一般的なユースケース
Detailedバウンディングボックスや周辺テキストを含む詳細情報複雑な問題
Forensic計算されたスタイル(computed styles)を含む最大詳細度レイアウト・スタイル問題のデバッグ

出力はプレーンなMarkdown形式なので、コピー後に編集してからエージェントに渡すこともできる。コンテキストの追加、優先順位の変更、不要なアノテーションの削除、指示の追加など、自由にカスタマイズ可能。

API

<Agentation /> コンポーネントのAPI(Props)として以下が用意されている。Annotationはコールバックに渡されるオブジェクト。

※詳しくは「API | Agentation」を参照。

プロパティ説明
onAnnotationAdd(annotation: Annotation) => void追加時に呼ばれる
onAnnotationDelete(annotation: Annotation) => void削除時に呼ばれる
onAnnotationUpdate(annotation: Annotation) => voidコメント編集時に呼ばれる
onAnnotationsClear(annotations: Annotation[]) => void全削除時に呼ばれる
onCopy(markdown: string) => voidコピー時にMarkdownを渡す
copyToClipboardbooleanfalseでクリップボード書き込みを抑止(default: true

コード例

基本的な使い方の例:

tsx
import { Agentation, Annotation } from "agentation";

function App() {
  const handleAnnotation = (annotation: Annotation) => {
    console.log(annotation.element, annotation.comment);
  };

  return (
    <>
      <YourApp />
      <Agentation onAnnotationAdd={handleAnnotation} />
    </>
  );
}

Annotationオブジェクト

Annotationオブジェクトの型定義は以下の通り:

ts
type Annotation = {
  id: string; // 一意識別子
  element: string; // 要素名
  elementPath: string; // CSSセレクタパス
  comment: string; // ユーザーのコメント
  timestamp: number; // タイムスタンプ
  x: number; // 位置(ビューポート幅の%)
  y: number; // 位置(上からのpx)
  selectedText?: string; // 選択テキスト
  boundingBox?: {
    // 要素のサイズ
    x: number;
    y: number;
    width: number;
    height: number;
  };
  // Detailed/Forensicモード用
  nearbyText?: string;
  cssClasses?: string;
  nearbyElements?: string;
  computedStyles?: string;
  fullPath?: string;
  accessibility?: string;
  isMultiSelect?: boolean;
  isFixed?: boolean;
};

おわりに

AIエージェントにUIの修正を伝える手段として、Agentationは便利そうだと感じた。ブラウザ上でセレクタや環境を取得できるので、開発者がコードを追わなくても良いのが非常に楽。今後実際に使いながら、精度を検証してみようと思う。

参考