Amazon Q Developer CLI カスタムエージェントでReactコードレビューエージェントを作ってみた

記事タイトルとURLをコピーする

目次

  1. はじめに
  2. カスタムエージェント設定方法
  3. カスタムエージェント構成要素
  4. 実行
  5. まとめ

はじめに

こんにちは、佐々木です。

2025年7月31日にAmazon Q Developer CLI announces custom agentsが提供開始されました。 このAmazon Q Developer CLI カスタムエージェント(以下、カスタムエージェント)を使って、試しにReactコードレビューエージェントを作成してみたいと思います。

Amazon Q Developer CLI カスタムエージェントとは

  • 特定のユースケースやワークフローに合わせて設定できるカスタマイズ可能な AI アシスタント
  • JSONファイルでエージェントの動作を詳細に設定可能
  • 2025年7月31日にリリースされた新機能

今回の実行環境

  • Ubuntu 24.04.3 (WSL2)
  • Amazon Q Developer 1.13.1
  • Git 2.43.0
  • Node.js 22.16.0
  • React 19.0.0

カスタムエージェント設定方法

Amazon Q Developer CLI を起動し、新しいエージェントを作成します。

q chat
> /agent create --name react-review-agent

デフォルトエディタが開くので、以下のエージェント情報を入力して保存します。
各項目の詳細は後述のカスタムエージェント構成要素を参照してください。

{
  "name": "react-review-agent",
  "description": "Reactコードレビューエージェント",
  "prompt": "あなたはReactコードレビューの専門家です。Reactのベストプラクティス、パフォーマンス最適化、モダンなReactパターンに深い知識を持っています。以下の点に重点を置いてレビューしてください:\n\n- コンポーネント設計とアーキテクチャパターン\n- パフォーマンス最適化(useMemo、useCallback、React.memo)\n- アクセシビリティ(a11y)対応\n- TypeScript統合と型安全性\n- テスト戦略(Jest、React Testing Library)\n- コードの保守性と可読性\n- セキュリティベストプラクティス\n- モダンなReact機能(hooks、suspense、concurrent features)\n\n具体例と実行可能な推奨事項を含む建設的なフィードバックを提供してください。提案の理由も必ず説明してください。",
  "mcpServers": {
    "git": {
      "command": "git-mcp-server",
      "args": [],
      "timeout": 30000
    }
  },
  "tools": [
    "fs_read",
    "fs_write",
    "@git"
  ],
  "allowedTools": [
    "fs_read",
    "fs_write",
    "@git/git_status",
    "@git/git_log",
    "@git/git_diff"
  ],
  "toolAliases": {
    "@git/git_status": "status",
    "@git/git_log": "log",
    "@git/git_diff": "diff"
  },
  "resources": [
    "file://docs/REVIEW_RULE.md"
  ],
  "hooks": {
    "agentSpawn": [
      {
        "command": "git status --porcelain",
        "timeout_ms": 5000
      }
    ]
  }
}

保存後、成功のメッセージが表示されたらエージェントの作成が完了です。
~/.aws/amazonq/cli-agents/react-review-agent.jsonが作成されました。
作成後の変更やチームへの配布を行いたい場合は、このJSONファイルを操作・配布します。

> /agent create --name react-review-agent
Agent react-review-agent has been created successfully
Changes take effect on next launch

/agent listコマンドでエージェント一覧を表示することができます。
今回はデフォルトと作成したreact-review-agentが表示されました。

> /agent list
* q_cli_default
  react-review-agent

これで設定は完了です。Amazon Q Developer CLIを終了します。

> /quit

カスタムエージェント構成要素

構成要素 説明 今回の設定内容
name エージェントの識別名。
description エージェントの説明文。
prompt エージェントの性格・専門性を定義するプロンプト。 Reactレビューの専門家。
mcpServers Model Context Protocol サーバーの設定。 Gitを利用。
tools エージェントが使用可能なツール一覧。
標準ツールについてはこちらを参照。
ファイル読み込み、書き込み、Gitコマンド実行を利用。
allowedTools 許可されたツールのリスト。 ファイル読み込み、書き込み、Gitコマンド実行を許可。
toolAliases ツールの別名設定。 Gitのコマンドを短縮形で実行可能に設定。
resources エージェント起動時に読み込むリソース。 レビュールール(REVIEW_RULE.md)のドキュメントを読み込み。(内容は下記参照)
hooks 特定のタイミングで実行されるコマンド。 エージェント起動時にgit statusを取得。

※他の構成要素は、/agent schemaで確認可能です。

(補足)resourcesについて

今回はresourcesに下記のレビュールールのドキュメントを指定しています。 生成AIに読み込ませるため、やや明示的な書き方をしています。 複数指定可能なので、処理方式やコーディングルールも読み込ませると精度が上がるかもしれません。

# レビュールール
レビューは以下のテンプレートに利用してください。
レビュー結果は/reviewディレクトリに格納してください。
ファイル名は「(レビュー日時:YYYYMMDDHHMmm)_指摘事項.md」としてください。

# レビューテンプレート
------------------------------
# レビューシート

## 実施時間
YYYY/MM/DD HH:mm

## 指摘内容

| No | ファイル名 | 行数 | 指摘内容 | 備考|
|---|---|---|---|---|
| 1 | example.tsx | 30 | コンポーネント名が不一致。 | |
------------------------------

実行

以下のコマンドで今回作成したカスタムエージェントを利用してAmazon Q Developer CLIを起動します。

q chat --agent react-review-agent

エージェント起動時に、Gitの変更履歴やレビュールールドキュメントが自動で読み込まれているので、「レビューを実行してください」という簡単なメッセージでレビューが開始されます。

[react-review-agent] > レビューを実行してください

> レビューを実行します。まず、現在のファイル構造を確認し、変更されたファイルを詳しく確認してからレビューを行います。
(中略)
> レビューが完了しました。

## レビュー結果サマリー

変更されたファイル(Home.tsx、Header.tsx)について、Reactのベストプラクティスに基づいた詳細なレビューを実施しました。
(以下略)

REVIEW_RULE.mdの内容に従ってレビューシートが作成されました。

## 指摘内容

| No | ファイル名 | 行数 | 指摘内容 | 備考|
|---|---|---|---|---|
| 1 | Home.tsx | 14-26 | クリックイベントのアクセシビリティ対応不足。BoxコンポーネントにonClickを設定しているが、キーボードナビゲーションやスクリーンリーダー対応ができていない。 | ButtonコンポーネントまたはroleとtabIndexを追加することを推奨 |
| 2 | Home.tsx | 14-26 | インラインイベントハンドラーの使用。パフォーマンス最適化のためuseCallbackの使用を検討。 | 再レンダリング時に新しい関数が作成される |
| 3 | Home.tsx | 全体 | TypeScript型定義不足。コンポーネントの戻り値型(JSX.Element)の明示的な定義がない。 | 型安全性向上のため |
| 4 | Header.tsx | 17 | コンポーネント名とファイル名の不一致。ファイル名はHeaderだが、コンポーネント名がButtonAppBarになっている。 | 保守性とコードの可読性向上のため |
| 5 | Header.tsx | 25-60 | JSX内でのコンポーネント定義。DrawerListがコンポーネント内で定義されており、再レンダリング時に毎回新しいオブジェクトが作成される。 | useMemoまたはコンポーネント外への移動を推奨 |
(以下略)

まとめ

所感

  • エージェントを事前に設定しておくことで、毎回同じ背景や役割を説明する手間が省けて効率的。
  • JSONファイルでエージェントを定義できるので、チームに配布が容易。
  • allowedToolsでエージェントの実行可能な操作を明確に制御でき、セキュリティリスクを低減できる。

活用例

  • コーディングルールを事前に設定して、チーム開発の標準エージェントとする。
  • 言語別(Python、Java、Go等)の専門エージェントを作成してプロジェクトごとに使い分ける。
  • 成果物の変更をしたくないときは書き込みを一切禁止するエージェントを利用。
  • コマンド実行権限を制限し、システムへの予期せぬ影響を防止する。

今回は、アップデートされたAmazon Q Developer CLIの新機能を使ってカスタムエージェントを作成しました。今後も様々なカスタムエージェントを作成して、開発効率の向上等に活用していきたいと思います。

佐々木 悠貴 (記事一覧)

エンタープライズクラウド部(配属予定)

2025年6月入社 現在研修中