はじめに
AWS Kiro を使って、コードを一切書かずにチーム分けアプリをつくり、デプロイするまでの手順をまとめました。無料プランで簡単なアプリなら開発可能なので、Kiro を試してみたい人の参考になればうれしいです。
今回つくったのは、こんなアプリです。
メンバーを登録してボタンを押すと、ランダムでペアを作ってくれるシンプルなアプリです。これを自然言語で指示するだけ、コードは一切書かずに、約1時間でつくりました。以下、その手順を順番に紹介します。
現在、エンジニア7名でペア開発をしていて、毎週ペアをオンラインのツールで決めていました。ただ、お休みの方がいたり、技術力を均等にしたりと、チームで独自のルールが生まれてきました。こうした独自ルールでのチーム分けはオンラインツールでは難しくなってきたので、独自ルールでも簡単にチーム分けできるアプリをつくることにしました。今回は、前から使ってみたかった AWS Kiro でアプリ開発をしてみました。
Kiro とは
Kiro は、AWS が開発したエージェント型 AI コーディング IDE です。自然言語のプロンプトを「Spec(仕様書)」に変換してからコードを生成する、仕様駆動開発(Spec-Driven Development)を強みとしています。自然言語で要件を書くだけで、コードは一切書かずにアプリケーションを開発できます。
料金
今回のチーム分けアプリは、Free プランで収まりました。
| プラン | 月額 | クレジット |
|---|---|---|
| Free | $0 | 50 |
| Pro | $20 | 1,000 |
| Pro+ | $40 | 2,000 |
| Pro Max | $100 | 5,000 |
| Power | $200 | 10,000 |
Kiro のインストール
公式サイトにアクセスし、ダウンロードボタンから Kiro のアプリをダウンロードしましょう。
初回起動すると認証画面が表示されるので、アカウント連携をします。私は今回、私用の AWS Builder ID で連携しました。
連携が完了すると、VSCode の設定や拡張機能をインポートするか聞かれます。私はあとで必要になったらインストールしようと思ったので、Skip しました。そのあと、テーマカラーなどの初期設定を行います。
下記の画面まで進めたら設定完了です。
1. Project を作成してみよう
まずは、GitHub で今回作りたいチーム分けアプリの空のリポジトリを作成しました。Kiro にアプリ名を考えてもらい、「TeamUp」というアプリ名にしました。
リポジトリをクローンしてきて、最初の Open Project からフォルダを開くと「信頼するか」の確認画面が表示されるので、Yes を選択します。
2. Next.js アプリを作成して Amplify にデプロイしよう
私の手元の環境はこんな感じでした。
aws --version
aws-cli/2.35.9 Python/3.14.5 Darwin/25.5.0 exe/arm64
amplify -v
9.2.1
node -v
v26.2.0
Next.js のアプリを作成します。
cd teamup
npx create-next-app@latest .
つづいて、Amplify のコンソールから今回作成したリポジトリを紐づけます。
10分程度待つとデプロイ完了になり、作成された URL にアクセスすると、create-next-appで作成されたアプリがデプロイされていることが確認できます。まずは動くものを先にデプロイしておき、このあと Spec で中身を作り込んでいきます。
3. 仕様駆動を試してみよう
Spec にまずはこちらを入力しました。
ペアプロ用の「ランダムペア作成アプリ」を作りたい。
## 背景
- A社2名・B社5名の計7名で、毎週ペアプロをしている
- 毎回ランダムでペア(2人組)を作りたい
- - 既に Next.js (App Router) アプリを作成し、AWS Amplify Hosting にデプロイ済み
最初に「新機能か、バグ改修か」を質問されるので、新機能開発を選択しました。
次に「機能要件か、技術設計か」を質問されるので、機能要件を選択しました。
少し待つと requirements が作られるので、要件を確認してから、tasks.md と design.md も自動で作ります。
Kiro の Spec は、3つのファイルが順番に作られていきます。それぞれざっくりこんな役割です。
- requirements.md … 何を作るかをユーザーストーリーと受け入れ基準でまとめたもの。「WHEN(こういうとき)THE SYSTEM SHALL(システムはこうする)」という EARS(Easy Approach to Requirements Syntax)という記法で書かれます
- design.md … どう作るかをまとめた技術設計書。アーキテクチャやコンポーネントの構成、シーケンス図などが入ります
- tasks.md … design をもとに、実装を細かいタスクに分解したチェックリスト。完了・進行中といった状態で進捗を追えます
requirements で「何を」を固めて、design で「どう作るか」に落とし込み、tasks で「実装の手順」に分解する、という流れですね。コードを書く前にこの3つで認識を合わせられるのが、仕様駆動開発の肝だと感じました。
# 要件定義書
## はじめに
本機能は、A社2名・B社5名の計7名が毎週行うペアプログラミングのために、ランダムなペア(2人組)を生成するWebアプリケーションを実現する。メンバーリストを画面上で管理し、ボタン操作1回でペアを生成・表示する。奇数人数の場合は1人余る「あまり」が発生するため、その扱いも明確にする。
---
## 用語集
- **PairGenerator**: ランダムペア生成機能全体を指すシステム名
- **Member**: ペアプロに参加する個人(名前で識別)
- **Pair**: 2名で構成されるペアプログラミングの組
- **Leftover**: 奇数人数のときに余る1名
- **MemberList**: 現在登録されているメンバーの一覧
- **PairResult**: ペア生成の結果(Pair の配列 + 必要に応じて Leftover 1名)
---
## 要件
### 要件 1: メンバーリストの表示
**ユーザーストーリー:** メンバー管理者として、現在登録されているメンバー一覧を確認したい。そうすることで、ペア生成前に参加メンバーを把握できる。
#### 受け入れ基準
1. THE PairGenerator SHALL 初期表示時にデフォルトのメンバーリスト(A社2名・B社5名の計7名)を画面に表示する。
2. THE PairGenerator SHALL MemberList 内の各 Member を名前で識別可能な形式で表示する。
3. THE PairGenerator SHALL 現在の参加人数を MemberList とあわせて表示する。
---
### 要件 2: メンバーの追加
**ユーザーストーリー:** メンバー管理者として、新しいメンバーを MemberList に追加したい。そうすることで、参加者が変わっても柔軟に対応できる。
#### 受け入れ基準
1. WHEN メンバー名が入力されて追加操作が実行された場合, THE PairGenerator SHALL 入力された名前の Member を MemberList に追加する。
2. WHEN 空文字または空白のみのメンバー名で追加操作が実行された場合, THE PairGenerator SHALL Member を追加せず、入力エラーメッセージを表示する。
3. WHEN 既に MemberList に存在する名前で追加操作が実行された場合, THE PairGenerator SHALL Member を追加せず、重複エラーメッセージを表示する。
4. WHEN Member の追加が成功した場合, THE PairGenerator SHALL 入力フィールドをクリアする。
---
### 要件 3: メンバーの削除
**ユーザーストーリー:** メンバー管理者として、MemberList から特定のメンバーを削除したい。そうすることで、欠席者を除外してペアを生成できる。
#### 受け入れ基準
1. WHEN 削除操作が特定の Member に対して実行された場合, THE PairGenerator SHALL その Member を MemberList から削除する。
2. WHEN MemberList が 0 名になった場合, THE PairGenerator SHALL ペア生成ボタンを非活性化する。
3. WHEN MemberList が 1 名になった場合, THE PairGenerator SHALL ペア生成ボタンを非活性化する。
---
### 要件 4: ランダムペアの生成
**ユーザーストーリー:** チームリーダーとして、ボタン1回でメンバーをランダムにペアリングしたい。そうすることで、毎週の組み合わせを手作業なしに決定できる。
#### 受け入れ基準
1. WHEN ペア生成操作が実行された場合, THE PairGenerator SHALL MemberList 内のすべての Member をランダムにシャッフルして Pair の配列を生成する。
2. WHEN ペア生成操作が実行された場合, THE PairGenerator SHALL 各 Pair がちょうど 2 名で構成されることを保証する。
3. WHEN MemberList の人数が奇数の場合, THE PairGenerator SHALL 1 名を Leftover として PairResult に含め、Pair には含めない。
4. WHEN ペア生成操作が実行された場合, THE PairGenerator SHALL すべての Member がいずれか 1 つの Pair または Leftover に過不足なく割り当てられることを保証する。
5. WHEN ペア生成操作が実行された場合, THE PairGenerator SHALL 生成された PairResult を画面に表示する。
6. WHEN ペア生成操作が実行された場合, THE PairGenerator SHALL 同一の MemberList で再度ペア生成操作を実行したとき、前回と異なる Pair 構成が生成される可能性を持つ(ランダム性の保証)。
---
### 要件 5: ペア結果の表示
**ユーザーストーリー:** チームメンバーとして、生成されたペアを一目で確認したい。そうすることで、今週の組み合わせをすぐに把握できる。
#### 受け入れ基準
1. WHEN PairResult が生成された場合, THE PairGenerator SHALL 各 Pair のメンバー名を並べて表示する。
2. WHEN PairResult に Leftover が含まれる場合, THE PairGenerator SHALL Leftover の Member 名を「今週はお休み」または同等の識別可能なラベルとともに表示する。
3. WHEN PairResult が生成された場合, THE PairGenerator SHALL Pair の番号(例: ペア 1、ペア 2)を表示する。
4. WHEN PairResult が生成される前の初期状態では, THE PairGenerator SHALL ペア結果エリアに案内メッセージを表示する。
---
### 要件 6: メンバーリストのリセット
**ユーザーストーリー:** メンバー管理者として、MemberList をデフォルト状態(7名)に戻したい。そうすることで、誤って変更した場合でもすぐに元の状態に復元できる。
#### 受け入れ基準
1. WHEN リセット操作が実行された場合, THE PairGenerator SHALL MemberList をアプリ初期化時のデフォルトメンバー(7名)に戻す。
2. WHEN リセット操作が実行された場合, THE PairGenerator SHALL 表示中の PairResult をクリアする。
requirements が自動で作られるのはすごーく便利なのですが、ご覧のとおり量がかなり多いです。今回みたいなシンプルなアプリでもこれだけのボリュームになるので、抜けや認識のズレがないか文章をすべて読んで確認するのに、けっこう時間がかかりました。
最後に実行を押下します。
20分程度待つと完了メッセージが出るので、実際に実行してみます。
いい感じにペアプロのアプリケーションが作成できました。インストールからリポジトリの準備、デプロイ、Spec での実装まで含めて、トータルでだいたい1時間ほどでここまでたどり着けました。独自ルールは、また新しく Spec を作っていくだけです。
わかったこと
1 つの Spec を実行しただけで、無料プランの半分(約25クレジット)を使ってしまいました。
本格的に独自ルールを足していくなら、Pro プランが必要そうです。とはいえ、コードを一切書かずにデプロイまでできたのは便利でした。次は、休みの人の扱いや技術力の均等化といった独自ルールを Spec で追加していこうと思います。
![FireShot Capture 036 - Create Next App - [localhost].png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F95954%2Fac37948f-7986-45c3-b36d-dc15fafe2470.png?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=7d59ae6176e1d2c3a650b75e0dbd19a7)
![FireShot Capture 002 - Kiro_ Agentic AI development from prototype to production - [kiro.dev].png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F95954%2F95f47c66-0bd4-41c4-9cfa-c0bc445aea04.png?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=f2032662b503ec0adb45b565de1b7f68)



![FireShot Capture 033 - yo-sasago_teamup_ チーム分けアプリ - [github.com].png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F95954%2F39bd3841-94ed-4298-a412-1e130f4d1909.png?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=ec3ea826f20389252422efefcbce49b2)

![FireShot Capture 034 - アプリケーションを作成_ Step 2 - リポジトリとブランチを追加 - Amplify - ap-northeast-1_ - [ap-northeast-1.console.aws.amazon.com].png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F95954%2F5a83abef-a876-4f81-a8b6-f3a3193c204b.png?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=c9134199b77548a81fa2eb9031f40491)
![FireShot Capture 035 - アプリケーションの概要 - Amplify - ap-northeast-1_ - [ap-northeast-1.console.aws.amazon.com].png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F95954%2F7cf4a143-24de-4792-9c00-4403626c7bcc.png?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=045e962d42afa75859901ebcda17278e)






