皆さん、こんにちは!今年の7月、AI開発界隈の話題をかっさらった AWS発の次世代IDE「Kiro」 をご存知でしょうか。パブリックプレビューとして登場するやいなや、その直後からダウンロードが殺到し、背後のAmazon Bedrockサービスに多大なる負荷を与えたというエピソードからも、その注目度の高さが伺えます。
従来のAIコーディングアシスタントとは一線を画すKiro。遅ればせながら、私もWindows 11環境にインストールしてみました。似たようなレビュー記事はたくさんありますが、自分の備忘録と、まだ触れていない方への参考になればと思い、この新しいAIエージェントIDEの第一印象を紹介したいと思います。
Kiroとは何か、なぜ「仕様駆動」が注目されるのか
Kiroは、AIエージェントと協働しながら、プロトタイプからプロダクションまで一貫して開発を支援する統合開発環境(IDE)です。
これまでのAIコーディングといえば、GitHub Copilotなどが提供する「バイブコーディング(Vibe Coding)」が主流でした。「こんな感じの関数を作って」と “ノリ” でAIに指示を出し、迅速にコードを生成させるスタイルです。これはプロトタイピングでは強力ですが、生成されたコードの品質や保守性が課題となり、本番環境への移行でつまずくケースが多くありました。
Kiroが提唱するのは、この課題を解決する「仕様駆動開発(Spec-Driven Development)」です。Kiroは、従来のバイブコーディングを実現するVibeモードだけではなく、Specモードを通じてAIに「とりあえず動くもの」ではなく、「どんな要件のものを作るのか」という設計思想から理解させることを目指しています。
モード | 特徴 | 目的 |
---|---|---|
Vibeモード | チャット形式で迅速にプロンプトを投げる(従来のAIコーディング) | アイデア検証や試作品の作成 |
Specモード | AIが要件・設計をドキュメント化し、それに基づきコードを生成する | 高品質で構造化された本番コードの作成 |
Kiroをインストール&セットアップしてみた
ステップ0:話題のサービスゆえの「ウェイトリスト」待ち
Kiroのプレビューが開始された当初にアクセスが集中したことから、現在では利用するためにはウェイトリストへの登録が必要です。kiro.dev に移動し、Eメールアドレスを入力してウェイトリストへの参加を行います。
私の場合は9月末に申請を行ってから、「Welcome to Kilo! Here's your signup code」というタイトルで利用可能を知らせるメール通知が入るまで 約1週間 待ちました💦このウェイトリストの長さも、Kiroへの期待の大きさを物語っていますよね。

ステップ1:IDE本体のダウンロードとインストール
KiroはCode OSS(VS Codeのオープンソース版)をベースに作られているため、普段VS Codeを使っている開発者ならUIに迷うことはありません。次にメール本文にも記載されているダウンロードページに飛んでKiroをダウンロードしましょう。
macOS、Windows、Linuxに対応するパッケージが用意されています。今回はWindows 11で動かして、ターミナルはWSL2(Ubuntu)といった環境を想定しているため、「Download for Windows」を選択して.exe形式の実行ファイルをダウンロードしました。実行ファイルを起動し、ポチポチするとインストールが始まります。私の環境ではインストールには1分弱くらいかかりました。「Finish」ボタンをクリックするとKiroが無事に起動しました。感動。

ステップ2:認証とログイン
ログインは、AWS Builder IDのほか、GitHubやGoogleアカウントでも可能です。ここでは、Amazon Q Developerでも使っている既存のAWS Builder IDを使ってサインインしました。
「Sign in XX」ボタンをクリックするとブラウザが立ち上がるので、「Allow access」ボタンをクリックして許可を行いましょう。
ステップ3. 初期設定と引き継ぎ
ログインするとVS Codeから設定をインポートするか?と聞かれますので、なんて親切なんだ!とインポートしたくなるのですが、なんと残念なことに、ここには大きな罠がありました。
どんな罠かというと「Import from VS Code」ボタンをクリックし、何分、数十分待っても終わりません。タイムアウトでエラーになることもありません。ちゃんとした人なら裏でどんな処理が走っているのかを見にいくのでしょうが、今回は素直にあきらめて「Next」ボタンを押してしまいました💦
ダークモードかライトモードのどっちにする?と聞かれるので好みで選びましょう。
最後にシェルの設定が行われてセットアップ終了です。
余談ですが、ここのタイミングで「拡張機能の提供者を信頼しますか?」とポップアップが起動し、拡張機能のインストールがなぜ終わらなかったのかが判明します。そこかい💦
ステップ4. ターミナルからWSL2環境への接続
ターミナルを起動するとデフォルトだとPowerShellが起動してくるのですが、私はメインの作業環境をWSL2(Ubuntu)にしているため、これを変更しにいきます。
まずはVS Codeと同じ感覚でSettings
を開きましょう。検索バーにdefault profile: windows
と入力し、設定値をデフォルトから「Ubuntu (WSL)」に変更します。これでターミナルを起動すると、自動的にWSL2に接続へ行くようになりました。めでたし、めでたし。
Kiroの真骨頂!簡単なスペックを作成してコードを書かせてみた
それではKiroのコアとなるSpecモードを試してみましょう。まず、トップ画面で「Specモード」を選択し、簡単なプロンプトを入力します。従来のバイブコーディングなら、すぐにapp.py
などのコードが表示されるはずです。しかし、Kiroは違います。
私(プロンプト):「シンプルな顧客管理を行うWebアプリケーションをPythonとSQLiteで作ってください。機能は『顧客の追加』と『全顧客のリスト表示』のみ。」
ステップ1. 要件(requirements.md)の生成
まず、AIがプロンプトをもとに具体的な 要件 と 受入基準 を生成します。
生成されたrequirements.md
ファイルの中身を見ながら、追加のプロンプトを投げて要件と受入基準を調整していきます。
私(プロンプト):「顧客追加機能は、氏名とメールアドレスの入力必須としたい」「リスト表示は新たに追加された順としたい」
作成されたrequirements.md
はこんな感じでした。今回はお試しなので「これで良し」として次に進んでみましょう。
# 要件定義書
## 概要
PythonとSQLiteを使用したシンプルな顧客管理Webアプリケーション。基本的な顧客情報の追加と一覧表示機能を提供する軽量なシステムです。
## 要件
### 要件 1
**ユーザーストーリー:** 管理者として、新しい顧客情報を追加したい。そうすることで顧客データベースを構築できる。
#### 受入基準
1. WHEN 管理者が顧客追加フォームにアクセスする THEN システムは顧客名(必須)、メールアドレス(必須)、電話番号(任意)の入力フィールドを表示する SHALL
2. WHEN 管理者が顧客名とメールアドレスを入力して送信ボタンを押す THEN システムは顧客情報をSQLiteデータベースに保存する SHALL
3. WHEN 顧客情報が正常に保存される THEN システムは成功メッセージを表示する SHALL
4. IF 顧客名またはメールアドレスが空の場合 THEN システムはエラーメッセージを表示して保存を拒否する SHALL
5. IF メールアドレスの形式が不正な場合 THEN システムはバリデーションエラーを表示する SHALL
6. WHEN 電話番号が未入力の場合 THEN システムは顧客名とメールアドレスのみで顧客を保存する SHALL
### 要件 2
**ユーザーストーリー:** 管理者として、登録済みの全顧客のリストを表示したい。そうすることで顧客情報を確認できる。
#### 受入基準
1. WHEN 管理者が顧客一覧ページにアクセスする THEN システムは登録済みの全顧客情報を新しく追加された順で表形式で表示する SHALL
2. WHEN 顧客一覧を表示する THEN システムは顧客名、メールアドレス、電話番号、登録日時を含む SHALL
3. IF データベースに顧客が登録されていない場合 THEN システムは「顧客が登録されていません」というメッセージを表示する SHALL
4. WHEN 顧客一覧ページを表示する THEN システムは顧客追加ページへのリンクを提供する SHALL
5. WHEN 顧客一覧を表示する THEN システムは最新の登録順(降順)でソートして表示する SHALL
### 要件 3
**ユーザーストーリー:** システム管理者として、アプリケーションが軽量で簡単にセットアップできることを望む。そうすることで迅速にデプロイできる。
#### 受入基準
1. WHEN アプリケーションを起動する THEN システムはSQLiteデータベースファイルが存在しない場合に自動作成する SHALL
2. WHEN アプリケーションを初回起動する THEN システムは必要なテーブル構造を自動的に作成する SHALL
3. WHEN Webサーバーを起動する THEN システムはローカルホストでアクセス可能になる SHALL
4. IF データベース操作でエラーが発生した場合 THEN システムは適切なエラーメッセージをログに記録する SHALL
ステップ2. 設計(design.md)の生成
次に、この要件に基づき、設計ドキュメントを生成していきます。プロンプト入力の右上に「Move to design phase
」ボタンをクリックします。
すると、design.md
ファイルが作成されます。
design.md
ファイルの中身を確認し、必要に応じて追加のプロンプトを投げながら修正していきます。
私(プロンプト):「APIエンドポイントは
/api/*
として機能に応じてPOST/GETを割り当てる」
作成されたdesign.md
はこんな感じでした。今回はこれで受け入れて次の実装フェーズに移りましょう。
# 設計文書
## 概要
PythonのFlaskフレームワークとSQLiteデータベースを使用したシンプルな顧客管理Webアプリケーション。MVCアーキテクチャパターンを採用し、軽量で保守性の高い構造を実現します。
## アーキテクチャ
### 技術スタック
- **Webフレームワーク**: Flask (Python)
- **データベース**: SQLite
- **テンプレートエンジン**: Jinja2 (Flask標準)
- **フロントエンド**: HTML + CSS (Bootstrap)
- **バリデーション**: Flask-WTF
### アプリケーション構造
\```
customer-management-app/
├── app.py # メインアプリケーション
├── models.py # データモデル
├── forms.py # フォーム定義
├── database.py # データベース初期化
├── templates/ # HTMLテンプレート
│ ├── base.html
│ ├── index.html
│ ├── add_customer.html
│ └── customer_list.html
├── static/ # 静的ファイル
│ └── style.css
└── customers.db # SQLiteデータベース(自動生成)
\```
## コンポーネントと インターフェース
### 1. データベース層 (database.py)
- SQLiteデータベースの初期化
- テーブル作成とスキーマ管理
- データベース接続の管理
(以下省略)
ステップ3. 実装計画(tasks.md)の作成
では、これらのドキュメントに基づき、実装計画(タスクリスト)を作成します。プロンプト入力の右上に「Move to implementation plan
」ボタンをクリックします。
するとtasks.md
ファイルが自動的に作成されます。テスト計画策定にあたって質問が来ているので選択肢を選ぶか、追加でプロンプトを与えます。(てか、2つの質問が書かれてて、1つのyes/noで答えろっておかしいでしょう💦)
私(プロンプト):「プロダクションでも使えるように包括的なテストを含めたい」
tasks.md
ファイルの中身を見ると「データベース実装」「APIエンドポイント実装」「フロントエンドUI実装」のような具体的なタスクに分解されていることがわかります。
# 実装計画
- [ ] 1. プロジェクト構造とデータベース基盤の構築
- プロジェクトディレクトリ構造を作成
- SQLiteデータベース初期化スクリプトを実装
- 顧客テーブルのスキーマを定義・作成
- _要件: 3.1, 3.2_
- [ ] 2. データモデルとバリデーション機能の実装
- 顧客データモデルクラスを実装
- 必須フィールド(名前、メール)のバリデーション機能を追加
- メールアドレス形式検証を実装
- _要件: 1.4, 1.5_
- [ ] 2.1 データモデルの単体テストを作成
- バリデーション機能のテストケースを作成
- _要件: 1.4, 1.5_
- [ ] 3. データベース操作機能の実装
- 顧客データの挿入機能を実装
- 全顧客データの取得機能を実装(新しい順でソート)
- データベースエラーハンドリングを追加
- _要件: 1.2, 2.1, 2.5_
- [ ] 3.1 データベース操作の単体テストを作成
- CRUD操作のテストケースを作成
- _要件: 1.2, 2.1_
- [ ] 4. APIエンドポイントの実装
- Flask アプリケーションの基本構造を作成
- GET /api/customers エンドポイントを実装
- POST /api/customers エンドポイントを実装
- JSON レスポンス形式を定義
- _要件: 1.2, 2.1, 2.2_
- [ ] 5. フォームとバリデーション機能の実装
- Flask-WTF を使用した顧客追加フォームを作成
- フロントエンドバリデーションを実装
- CSRFトークン保護を追加
- _要件: 1.1, 1.4, 1.5_
- [ ] 5.1 フォームバリデーションのテストを作成
- フォーム送信のテストケースを作成
- _要件: 1.4, 1.5_
- [ ] 6. HTMLテンプレートとUI の実装
- ベーステンプレート(base.html)を作成
- ホームページテンプレートを作成
- 顧客追加フォームページを作成
- 顧客一覧表示ページを作成
- _要件: 1.1, 2.1, 2.4_
- [ ] 7. スタイリングとレスポンシブデザインの実装
- Bootstrap を使用した基本スタイリングを適用
- レスポンシブデザインを実装
- エラーメッセージと成功メッセージのスタイリング
- _要件: 1.3, 2.3_
- [ ] 8. エラーハンドリングとメッセージ表示機能の実装
- 成功メッセージ表示機能を実装
- バリデーションエラーメッセージ表示を実装
- データベースエラー時のユーザーフレンドリーメッセージを実装
- 空の顧客リスト時のメッセージ表示を実装
- _要件: 1.3, 1.4, 1.5, 2.3, 3.4_
- [ ] 9. アプリケーション統合とルーティング設定
- 全コンポーネントを統合
- ルーティング設定を完成
- ナビゲーションリンクを実装
- アプリケーション起動スクリプトを作成
- _要件: 2.4, 3.3_
- [ ] 9.1 統合テストの実装
- エンドツーエンドのテストシナリオを作成
- _要件: 1.2, 2.1, 2.5_
ステップ4. コードの実装
先ほどまではチャットベースでのやり取りでしたが、コードの生成はtasks.md
ファイル上で操作していきます。各タスクごとに「Start task」ボタンがあるのでここをクリックし、タスク1から順にコードを実装していきます。
「Start task」ボタンをクリックすると「Task in progress
」に状態が変更されます。
プロンプトの方で新しいセッションが作られ、コードの生成状況が表示されます。生成されたコードの実行を促されたら、生成されたコードを確認した上で問題なさそうなら、生成されたコードを確認した上で問題なさそうなら(重要なので2回)、Run
ボタンをポチポチします。
タスクの完了まで進むと「Task 1 Complete ✅」とプロンプト側で言われます。
その後の流れとしては、再びtasks.md
ファイル側に戻って次のタスクの実行へと進む、といった形で、基本的にはポチポチやるだけでコードの実装からテストまで行うことができます。
本記事では最後のタスク実行までは紹介しませんが、この一連の流れをIDE上で確認できるのが、Kiroの最も感動的なポイントではないでしょうか。
終わりに
わずかに触れただけでも、Kiroが単なる「コードを速く書くツール」ではないことがよく分かりました。バイブコーディングで感じていた「速いけど、お試しで動かすレベルなんだよな(これは私の入力が悪い可能性が大いにあり)」という不安を、仕様駆動開発という規律をもって解消しようとするKiroの思想は、非常に革新的に感じました。
まだパブリックプレビュー段階なので、今後さらに進化が期待されます。とくに、各種MCPサーバーなどのリリースがどんどん進められており、既存のAWSサービスとの連携が深まればクラウド開発の現場は劇的に変わってくるのではないでしょうか。もしバイブコーディングのスピード感を気に入っている一方で、コードの品質や保守性に悩んでいるなら、ぜひ一度KiroのSpecモードを試してみてはいかがでしょうか。
以上、最近話題のAI IDEの「Kiro」を少しだけ触ってみた、というお話でした。こんな記事でも誰かの役に立っていただければ幸いです。
- AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
- その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。