Loading
BLOG 開発者ブログ

2025年7月17日

AWS初AIエージェントIDE”Kiro”が登場!早速試してみました。

こんにちは、shibamです。
米国時間7月14日、AWSからAIエージェントIDE”Kiro”が発表されました。
スペック駆動開発(SDD)を提唱し、要件定義~開発までを一貫して担うことのできるIDEということで、
今までのClaude Codeでの開発体験における「言語による指示の困難さ」をどれほど解決できるか、期待大です。
現時点ではpreview版ということで無料で試せるので、折角なので試してみました。

目次

  1. TL;DR
  2. はじめに
  3. Kiroの特徴:スペック駆動開発
  4. Kiroの特徴:hooks
  5. Kiroの特徴:steering
  6. Kiroのインストール方法
  7. 最後に

TL;DR

  1. “スペック駆動開発”により、AIエージェントが「どう実装してくれるか」が明確に
  2. 分割したタスクを個別に実装できるため、ステップバイステップでの開発が可能
  3. Claude Codeと比較すると開発体験における”スピード感”は控えめ。ただし確実。
  4. 是非preview版のうちに、お試しを!

はじめに

AWSが今回発表したAI IDE”Kiro”は、コンセプトからプロダクションまで、AI エージェントとの作業を簡素化した開発者体験を通じて開発を支援することを目指して作成されたツールです。
これまでのAI IDEやClaude Code,Gemini CLIなどとは異なり、「指示を理解して開発する」だけでなく、「指示から要件を定義し、設計し、開発する」までを一貫して進めていきます。
これによって、より良く、保守のしやすいアプリケーション開発を行うことができるようになる…ということらしいです。
実際、私もClaude Codeにタスクを渡す前に要件定義書を(gpt-o3などに依頼しつつ)yamlで記載してもらって、それをClaude Codeに投げることで開発を進めたりしていたので、ここまでをKiroがやってくれるのであれば大助かりです。
また、併せてKiroの特徴である「スペック駆動開発」とは何か、「hooks」とは何か、ということについても紹介できればと思います。

Kiroの特徴:スペック駆動開発

Kiroの特徴の1つは、「スペック駆動開発」です。
従来のVibe Codingにおいてデファクトスタンダードになりつつあったのは「テスト駆動開発」であり、
AIエージェントがやりがちな「コードが通るテストを書いてしまう」ことを防ぐことに加えて、「テストによって仕様と動作を定義し、以降のエージェントによるリファクタリングを堅牢に行わせる」ために非常に有効な手段でした。
ただ、TDDで開発を進めるとしても仕様は必ず必要になってくるため、そのために必要な要件定義を別途作成して渡すことが重要です。
(私は基本o3と対話するなどでここを代替していました。もしくは、そもそも明確なプロンプトを渡して作業させるか、ですかね。)
Kiroでは、指示を受けた時に以下のステップで開発を進めます。

Requirements

要求、要件を定義するフェーズです。ここではこちらの指示に対して「要求はこう、要件はこう」という内容をmarkdown(requirements.md)で出力します。
ユーザはこの内容を読み込み、意図に沿っていれば次のフェーズへ、意図と異なっていれば改めてKiroと会話を進めます。
例えば、 Amazon Linuxから出力された脆弱性情報を、https://alas.aws.amazon.com/から抽出し、自身の環境に対して影響のある脆弱性がどれかを診断するツールを作ってください。という指示に対して、以下のようなrequirements.mdを出力してくれます。

# Requirements Document

## Introduction

Amazon Linux環境で動作するCVE影響度診断ツールです。このツールは、セキュリティ診断ツールから出力されたCVE一覧を入力として受け取り、各CVEについてAmazon Linux Security Advisory (ALAS) サイト(https://alas.aws.amazon.com/)から詳細情報を取得し、現在の環境に実際に影響があるかを判定します。システム管理者が検出されたCVEの中から本当に対応が必要なものを特定できるようにします。

## Requirements

### Requirement 1

**User Story:** システム管理者として、既存のセキュリティ診断ツールで検出されたCVE一覧から影響のあるものだけを抽出したいので、CVE IDリストを入力として受け取れるツールが欲しい

#### Acceptance Criteria

1. WHEN ツールを実行する THEN システムはCVE-YYYY-XXXXX形式のCVE IDリストを入力として受け取る SHALL
2. WHEN CVE IDを受け取る THEN システムはファイル入力、標準入力、またはコマンドライン引数での指定をサポートする SHALL
3. WHEN 無効なCVE ID形式を検出する THEN システムは警告メッセージを表示して処理を継続する SHALL
4. IF 入力が空の場合 THEN システムは適切なエラーメッセージを表示する SHALL

### Requirement 2

**User Story:** システム管理者として、入力されたCVE IDについてALASサイトから詳細情報を取得したいので、各CVEに関連するALAS情報を検索・抽出できるツールが欲しい

#### Acceptance Criteria

1. WHEN CVE IDを受け取る THEN システムは https://alas.aws.amazon.com/ でそのCVEに関連するALAS情報を検索する SHALL
2. WHEN ALAS情報を検索する THEN システムはCVE IDに対応するALAS-YYYY-XXX形式のアドバイザリを特定する SHALL
3. WHEN ALAS情報を取得する THEN システムは影響を受けるパッケージ名、バージョン範囲、重要度を抽出する SHALL
4. IF CVEに対応するALAS情報が見つからない場合 THEN システムは「ALAS情報なし」として記録する SHALL

### Requirement 3

**User Story:** システム管理者として、現在の環境にインストールされているパッケージ情報を取得したいので、Amazon Linuxのパッケージ管理システムと連携できるツールが欲しい

#### Acceptance Criteria

1. WHEN ツールを実行する THEN システムは yum または dnf コマンドを使用してインストール済みパッケージ一覧を取得する SHALL
2. WHEN パッケージ情報を取得する THEN システムはパッケージ名、バージョン、アーキテクチャ情報を含める SHALL
3. IF パッケージ管理コマンドが利用できない場合 THEN システムは適切なエラーメッセージを表示する SHALL

### Requirement 4

**User Story:** システム管理者として、自分の環境に実際に影響するCVEだけを知りたいので、ALAS情報と環境のパッケージ情報を照合する機能が欲しい

#### Acceptance Criteria

1. WHEN ALAS情報とパッケージ情報を取得完了する THEN システムは両方の情報を照合する SHALL
2. WHEN パッケージ照合を実行する THEN システムは影響を受けるパッケージが環境にインストールされているかチェックする SHALL
3. WHEN バージョン比較を実行する THEN システムは脆弱性の影響を受けるバージョン範囲と現在のバージョンを比較する SHALL
4. WHEN 照合が完了する THEN システムは実際に影響のあるCVEのみをフィルタリングして表示する SHALL

### Requirement 5

**User Story:** システム管理者として、CVE診断の詳細情報を確認したいので、見やすい形式で結果を表示するツールが欲しい

#### Acceptance Criteria

1. WHEN 診断結果を表示する THEN システムはCVE ID、重要度、影響を受けるパッケージ、ALAS情報を含める SHALL
2. WHEN 結果を表示する THEN システムは重要度順(Critical > Important > Medium > Low)でソートする SHALL
3. WHEN 結果を表示する THEN システムは推奨されるアップデート方法を含める SHALL
4. IF 影響のあるCVEが見つからない場合 THEN システムは「影響のあるCVEは検出されませんでした」というメッセージを表示する SHALL

### Requirement 6

**User Story:** システム管理者として、定期的な監視を行いたいので、コマンドラインから簡単に実行できるツールが欲しい

#### Acceptance Criteria

1. WHEN ツールを実行する THEN システムはコマンドライン引数でオプションを指定できる SHALL
2. WHEN --output オプションを指定する THEN システムは結果をJSON、CSV、またはテキスト形式で出力する SHALL
3. WHEN --quiet オプションを指定する THEN システムは最小限の出力のみを表示する SHALL
4. WHEN --help オプションを指定する THEN システムは使用方法を表示する SHALL
5. WHEN 実行が完了する THEN システムは適切な終了コード(0=正常、1=エラー)を返す SHALL

内容を確認して、問題なければ次のフェーズに進みます。
(ここでは、 #### Requirement 3以降から作ってくれればいいよという指示を出しています。次の設計フェーズで正しくそれが実現されているかも確認したい。)

Design

設計フェーズです。requirements.mdと、会話の結果に従って、設計書を出力します。
設計書には、「概要」「アーキテクチャ」「構成情報」のほか、「実装計画」、「今後のタスク計画」も含まれます。

```md
# Design Document

## Overview

CVE影響度診断ツールは、既存のセキュリティ診断ツールから出力されたCVE IDリストを入力として受け取り、Amazon Linux Security Advisory (ALAS) サイトから各CVEの詳細情報を取得し、現在の環境にインストールされているパッケージと照合して、実際に影響のあるCVEのみを抽出するPythonベースのコマンドラインツールです。

## Architecture

```mermaid
graph TD
    A[CVE IDリスト入力] --> B[CVE入力パーサー]
    B --> C[ALAS情報取得エンジン]
    C --> D[パッケージ情報取得エンジン]
    D --> E[影響度判定エンジン]
    E --> F[結果フォーマッター]
    F --> G[出力]
    
    C --> H[ALASサイト]
    D --> I[yum/dnf コマンド]
```

### コンポーネント構成

1. **CVE入力パーサー**: CVE IDリストの読み込みと検証
2. **ALAS情報取得エンジン**: ALASサイトからのCVE詳細情報取得
3. **パッケージ情報取得エンジン**: システムのパッケージ情報取得
4. **影響度判定エンジン**: CVEとパッケージ情報の照合
5. **結果フォーマッター**: 結果の整形と出力

## Components and Interfaces

### CVEInputParser

```python
class CVEInputParser:
    def parse_cve_list(self, input_source: str) -> List[str]
    def validate_cve_format(self, cve_id: str) -> bool
    def read_from_file(self, filepath: str) -> List[str]
    def read_from_stdin(self) -> List[str]
```

### ALASInfoRetriever

```python
class ALASInfoRetriever:
    def get_alas_info(self, cve_id: str) -> Optional[ALASInfo]
    def search_alas_by_cve(self, cve_id: str) -> List[str]
    def parse_alas_page(self, alas_url: str) -> ALASInfo
    def extract_package_info(self, alas_content: str) -> List[PackageInfo]
```

### PackageInfoRetriever

```python
class PackageInfoRetriever:
    def get_installed_packages(self) -> Dict[str, PackageInfo]
    def execute_package_command(self) -> str
    def parse_package_output(self, output: str) -> Dict[str, PackageInfo]
    def detect_package_manager(self) -> str
```

### VulnerabilityAnalyzer

```python
class VulnerabilityAnalyzer:
    def analyze_cve_impact(self, cve_id: str, alas_info: ALASInfo, 
                          installed_packages: Dict[str, PackageInfo]) -> ImpactResult
    def compare_versions(self, installed_version: str, 
                        vulnerable_version_range: str) -> bool
    def check_package_affected(self, package_name: str, 
                              installed_packages: Dict[str, PackageInfo]) -> bool
```

### ResultFormatter

```python
class ResultFormatter:
    def format_results(self, results: List[ImpactResult], 
                      output_format: str) -> str
    def sort_by_severity(self, results: List[ImpactResult]) -> List[ImpactResult]
    def generate_text_output(self, results: List[ImpactResult]) -> str
    def generate_json_output(self, results: List[ImpactResult]) -> str
    def generate_csv_output(self, results: List[ImpactResult]) -> str
```

## Data Models

### ALASInfo

```python
@dataclass
class ALASInfo:
    alas_id: str
    cve_ids: List[str]
    severity: str
    description: str
    affected_packages: List[PackageInfo]
    fixed_packages: List[PackageInfo]
    published_date: datetime
    url: str
```

### PackageInfo

```python
@dataclass
class PackageInfo:
    name: str
    version: str
    architecture: str
    repository: Optional[str] = None
```

### ImpactResult

```python
@dataclass
class ImpactResult:
    cve_id: str
    alas_info: Optional[ALASInfo]
    is_affected: bool
    affected_packages: List[PackageInfo]
    severity: str
    recommendation: str
    reason: str
```

## Error Handling

### ネットワークエラー処理
- ALASサイトへのアクセス失敗時のリトライ機能
- タイムアウト設定とエラーメッセージ
- オフライン時の適切な処理

### パッケージ管理エラー処理
- yum/dnfコマンドの実行失敗時の処理
- 権限不足エラーの処理
- パッケージ情報の解析エラー処理

### 入力検証エラー処理
- 無効なCVE ID形式の処理
- 空の入力ファイルの処理
- ファイル読み込みエラーの処理

## Testing Strategy

### 単体テスト
- 各コンポーネントの個別機能テスト
- モックを使用したALASサイトアクセステスト
- パッケージ情報解析のテスト
- バージョン比較ロジックのテスト

### 統合テスト
- エンドツーエンドの処理フローテスト
- 実際のALASサイトを使用した統合テスト
- 異なる入力形式でのテスト

### パフォーマンステスト
- 大量のCVE処理時の性能テスト
- 並列処理の効果測定

## 実装詳細

### ALASサイトからの情報取得
- BeautifulSoupを使用したHTMLパース
- requests ライブラリでのHTTPアクセス
- レート制限を考慮したアクセス制御

### パッケージ情報取得
- subprocess を使用したコマンド実行
- yum list installed / dnf list installed の出力解析
- パッケージマネージャーの自動検出

### バージョン比較
- RPMバージョン比較ロジックの実装
- セマンティックバージョニング対応
- エポック、バージョン、リリース番号の考慮

### 出力フォーマット
- テキスト: 人間が読みやすい形式
- JSON: 他のツールとの連携用
- CSV: スプレッドシート処理用
```

内容を確認し、問題なければ次に進みます。

Task list

設計フェーズの結果に基づき、タスクを分解してリストアップします。
以下のような画像のタスク計画書が出力されます。

それぞれのTaskにStart taskというアイコンが出ているのが見えると思いますが、
これらのアイコンをクリックすることで、実際にタスクを開始します。
必要であれば手でこれらのタスク内容を修正することもできます。
2.に対して2.1.となっているような場合、大タスクをスタートすれば小タスクも併せて実行されます。
(並行稼働ではなく、直列稼働になるみたいですね。)
実装が終わったあとは、Update Taskを要求することで、タスクにチェックをいれてくれます。
何らかの要因でTaskが失敗した場合は、失敗したことがわかるように赤字で表示されます。
※筆者談:Claude Sonnet 4.0を利用するとリクエストエラーになる確率が高いですね。現時点では、Claude Sonnet 3.7を利用することをおすすめします。

Kiroの特徴:hooks

Kiroのもう一つの特徴がhooksです。これはドキュメントの作成・更新・削除時(もしくは任意のタイミングで手動)に特定のプロンプトによるタスクを駆動させる機能です。

ここで事前に定義しておいたプロンプトが自動で実行されます。
以下のような用途で使えそうですね。

  1. Gemini CLIによるコードレビュー依頼
  2. README.mdの更新
  3. Slackなどへのドキュメント更新完了通知

MCPサーバと連携して、色々と面白いことができそうな気がします。
一旦は、Kiroのテンプレートに従い、以下のドキュメント更新対応をhooksに設定しています。

Creating hook: Listen to all source files in this repository. For example, if this is a typescript project, listen to *.ts, if this is python listen to *.py. Also listen to relevant specific other files or other pattern that are related to the source. On change on these files, ask the agent to make change to docs in either the README or if there is a specific /docs folder update there too.

Kiroの特徴:steering

これまでのエージェントとは異なり、KiroはAGENT.mdではなく./specs/{project-name}/steering/配下に配置された複数のmdファイルをそれぞれ認識し、エージェントルールとしてくれます。
Kiroでプロジェクトを始めるとき、以下のmdファイルが自動作成されます。
※筆者談:正確には”プロジェクト開始時”というよりは、”Generate Steering”を実行したとき、ですかね。Kiroの機能で自動作成してくれることは正しいです。

  1. product.md – 製品の目的、ターゲットユーザー、主要機能、ビジネス目標を定義します。これにより、Kiroは技術的な決定の背後にある「理由」を理解し、製品目標に沿ったソリューションを提案することができます。
  2. tech.md – 選択したフレームワーク、ライブラリ、開発ツール、および技術的制約を文書化します。Kiro が実装を提案する際、既存のスタックが他の選択肢よりも優先されます。
  3. structure.md – ファイル構成、命名規則、インポートパターン、アーキテクチャ上の決定事項を概説します。これにより、生成されたコードが既存のコードベースにシームレスに適合することが保証されます。

面白いのはinclude modeで、事前に指定したファイル拡張子に対してのみ、特定のルールを適用することができるようになります。
「テストコードの記載ルール」と「コーディングルール」を分けたいときなど、上手く使えばより円滑にプロジェクト開発を進められそうです。

今までのAGENT.mdよりもより柔軟に、ユーザにとってわかりやすい形でルールを提供する、ということなんでしょうね。
AGENT.mdが肥大化しがちな面もこれなら解消できそうです。
ただ一方で、他のエージェントを併用したい場合にこの方式が使えないことはネックなので、メリット・デメリットはありそうです。

Kiroのインストール方法

Kiroのインストール自体は単純です。
Kiroの公式ページからインストールを行い、指示に従い順にインストールを実行していけば起動します。
7月17日時点ではpreview版の提供のため、無償での利用が可能です。
今後は有料プランに以降するみたいですね。

最後に

スペック駆動開発、今後の生成AI IDEのデファクトスタンダードになりそうな気もします。
あと、アイコンのおばけが可愛いのもとても良い。
IDE自体の開発体験も結構良く、VS Codeと同じような感覚で利用できますし、あと差分の表示され方が結構良い。
AWSが出している、という所からも、企業での導入検討なども進めやすそうに見えました。
現状だとちょっと一個一個の開発に時間がかかりすぎなのはありますが、作成されるrequirements.md~task.mdをClaude Code側に渡すのも一つ手かなと思いました。
現時点ではpreview版なので、今後の続報を待ちたいですね。

 

 

shibamのブログ