はじめに
AWS の AI コーディングエージェント IDE 「Kiro」の特徴として、仕様駆動開発を行うことができるというものがあります。仕様駆動開発とは、仕様を先に定義し、その仕様に合わせてコードを生成する開発手法です。Kiro では、仕様を定義するためのファイルを作成することができます。
本記事では、Kiro の Spec モードを使って仕様を定義し、それに基づいて Web サイトに機能を追加してみた体験を紹介します。
まずは、AWS Expert Online for JAWS-UG #37 - AWS NYC Summit re:Cap "Kiro"を視聴すると、より理解が深まると思います。
参考情報
要件を定義する
今回は、自分の Web サイトに機能を追加します。このサイトの右上にハンバーガーメニューを配置し、About Me や Other Links へのアンカーリンクを設ける機能を作成します。
要件書の作成
右側のサイドバーを開くと現れるチャットにプロンプトを入力し、要件書を作成してもらいます。まず、要件書を作成してほしいと伝えました。すると、Kiro がディレクトリ内にあるコードを理解したうえで「どのような機能を追加したいか」を尋ねてきました。そこで、具体的な要件を伝えたところ requirements.md
というファイルが作成されました。このファイルには、具体的な要件が記述されています。
以下が、自動生成された要件書(requirements.md)の一部です。内容を確認し、必要であればチャットで指示をし修正を行います。
設計と実装計画の作成
チャットに戻り、設計と実装計画を作成してもらいます。さきほどの要件書をもとに、Kiro が設計と実装計画を作成します。
以下が、設計書(design.md)と実装計画(tasks.md)の一部です。内容を確認し、必要であればチャットで指示をし修正を行います。
(スクリーンショットを撮り損ねたので、いくつかのタスクが実行済みの状態のものを掲載しています。)
タスクを実行する
Start task
をクリックするとタスクの実行がはじまります。実行中のタスクは Task in progress
、完了したタスクは Task completed
と表示されます。1 つのタスクが完了するのを待って、次のタスクを実行します。
タスクは並列実行できず、ひとつのタスクを実行中に次のタスクを実行すると、Task queued
と表示されます。
コマンドの実行が必要な場合は、Kiro がどの段階まで自動実行を許可するかを尋ねます。Full Command
、Partial
、Base
から自分のポリシーに合わせて選択します。選択した内容に従って、次回のコマンド実行の際に自動実行が許可されます。
選択した内容は、実行許可リストに自動的に追加されます。
実行許可リストは、Settings 内で KiroAgent.trustedCommands
などで検索すると確認できます。ここで、登録したコマンドの削除や追加、編集が行えます。
タスク実行の失敗
タスク実行中にエラーが発生すると、Error implementing task
と表示されます。この場合は、Retry をクリックして再実行します。
タスクの実行が失敗する理由は様々ですが、タスクの実行量によってはこのように 1 日あたりの上限に達したことでエラーになることがあります。
完成した機能
もともとの実装計画では手厚いテストや性能重視の実装が成されていました。結果、一部タスクが完了せず動作も期待したものとはなりませんでした。そのため、チャットで以下の依頼を行い、実装を修正させることで期待した動作をする機能が完成しました。このような要件はあらかじめ requirements.md を作成する際に盛り込むことで、適切な実装につながると思います。
ハンバーガーメニューを開きメニューをクリックすると、対象のリンク先に遷移するが再度トップに戻ってしまう。ハンバーガーメニューに過度なパフォーマンス性能は求めないので、簡易な実装にしてほしい。
そのほかにも、簡易な実装により不要になったテストコードの削除を依頼し、後片付けも行ってもらいました。
完成した機能は以下のようになりました。矢印で示した先にハンバーガーメニューが設置されました。クリックすると、メニューが開きます。
まとめ
Kiro の Spec モードを使うことで、要件を定義し、それに基づいてコードを生成することができます。要件を定義することで、実装の方向性が明確になり、期待値に沿った実装を行うことができます。今回の例では、わずか数行の自然言語をもとに要件の定義が行われ、実装計画やコードが生成されました。途中、修正を依頼するチャットのやりとりがあったものの、そのほかは Kiro が自動的に実装を行ってくれました。
チャットを通じてコードを生成しながら修正を繰り返す手法と比べ、要件の定義から実装まで を Kiro に任せることでより効率的に実装を行うことができるのではと感じました。