AWS re:Invent 振り返り

Kiro によるスペック駆動開発 (DEV314)

振り返りシリーズ

セッションノート

Kiro とスペック駆動開発の紹介

概要

  • Kiro は最近リリースされた新しいエージェント型 IDE で、スペック駆動開発を重視している。
  • 構造化されたワークフローを通じて、コード品質とレビュープロセスを改善することを目指す。
  • IDE は、コンパイラやデバッグなどの統合ツールによって普及した。
  • AI エディタはコード補完から始まり、エージェント型の体験へと進化した。
  • 現在、開発者は制御を保ちながら、AI エージェントを導いてコードの作成とレビューを行う。
  • バイブコーディングとスペック駆動開発:
  • バイブコーディングは迅速なプロトタイピングを可能にするが、従来の SDLC ライフサイクルを欠いている。
  • スペック駆動開発では、要件から成果物までの構造化されたワークフローを導入し、事前計画に重点を置くことでモデルの焦点と出力品質を向上させる。
  • スペック駆動開発のワークフロー:
  • 要件から始まり、設計、タスクリスト、実装へと進む。
  • 目的の成果物が得られるまで反復的に改善可能。
  • スペルチェックやコーディング原則の適用など、変更を検証するためのフックを含む。

AI エディタとソフトウェア開発の進化

AI エディタ

  • 開発者が自然言語を入力し、AI が複数のファイルを編集する、よりエージェント型の体験へ進化。
  • 根本的な変化:開発者はワークフローの制御を保ちながら、AI エージェントを導いてコードの作成とレビューを行う。
  • バイブコーディング:
  • 開発者がプロンプトを記述し、AI がコードを生成して、そのサイクルを繰り返す一般的なワークフロー。
  • 迅速なプロトタイピングには効果的だが、従来の SDLC ライフサイクルを欠くため、コンテキストや意思決定に関する課題が生じる。
  • スペック駆動開発:
  • 事前計画を重視することで、バイブコーディングの課題に対処するため導入された。
  • 要件から成果物までの構造化されたワークフローで、モデルの焦点と出力品質の向上を重視。
  • ワークフローには要件、設計、タスクリスト、実装が含まれ、反復的な改善が可能。
  • 変更を検証するためのフックを組み込み、コード品質を確保することで「AI」の問題に対処。

スペック駆動開発

変更を検証するためのフック

  • Kiro は、開発プロセス中の変更を検証するためのフックを組み込んでいる。
  • 例として、ドキュメントのスペルチェッカー、トーンとスタイルのチェック、UI コンポーネントに単一責任の原則などのコーディング原則を適用するものがある。
  • 求職者向けアプリのコンセプト:
  • 中核となるアイデア:面接準備にとどまらず、スタイル、トーン、実際の面接での受け答えなど、求職活動のより広い側面に対応。
  • エレベーターピッチ:ユーザーがログインしてプロフィールを設定し、質問と回答のフローで面接準備に取り組み、最後に定性的なフィードバックと定量的なスコアの両方を受け取る。

Kiro のインターフェイスと機能の概要

Kiro のインターフェイス

  • Tailwind CSS がインストールされた新規アプリの概要。
  • Kiro のメニュー:
  • Agent hooks:ファイルの保存や削除などのイベントでトリガーされるバックグラウンドプロセス。ドキュメントやローカライゼーションの更新に有用。
  • Agent steering:コーディングおよび設計標準のためのルールファイル。アプリケーションの現在の状態に基づいて自動生成される。
  • Specs:要件から成果物までの構造化されたワークフローで、アイデアから実装までの明確な道筋を確保。
  • MCP:My Code Partner servers。
  • さまざまな AWS サービスや製品との統合を可能にし、最近ではインストールを容易にする機能が強化された。
  • Agent Hooks:
  • 一般的なシナリオ向けに事前構築済みのフックが用意され、特定のファイルタイプを柔軟に指定可能。
  • Agent Steering:
  • アプリケーションの現在の状態に基づき、steering ファイルを自動生成。
  • 例:TypeScript と Vite を使用した Vite ウェブアプリケーション向けに作成された product および tech ファイル。
  • MCP Servers:
  • さまざまなサービスや製品に対応する MCP servers のリストを継続的に拡充。
  • 最近の追加:kiro.dev から MCP servers をワンクリックでインストール可能。

Kiro におけるスペック駆動開発

概要

  • スペック駆動開発はこの講演の中心テーマであり、要件から成果物までの構造化されたワークフローを重視。
  • Kiro はさまざまな AI モデル(Sonnet 4.5、4.4、Opus、Haiku)をサポートし、最適なモデルを選択する自動選択機能を備える。
  • 求職者向けアプリの作成:
  • 設計入力として図を使用し、Kiro に求職者向けアプリの作成を指示。
  • 提供された設計に基づく要件ドキュメントの生成からプロセスを開始。
  • 要件ドキュメント:
  • Kiro は最初のプロンプトを分解し、受け入れ基準を伴うユーザーストーリーとして定義された一連の要件を作成。
  • ユーザーストーリーは機能定義を人が読みやすい形式で示し、受け入れ基準は実装に必要な詳細を記述。
  • ユーザーストーリーと受け入れ基準:
  • ユーザーストーリーの例には、ログイン、プロフィール管理、面接準備セッションが含まれる。
  • 詳細な実装に向けて受け入れ基準を掘り下げる前に、ユーザーストーリーをレビューし、目的の機能と一致していることを確認する。

要件の改善と設計フェーズへの移行

要件のレビューと改善

  • Kiro では要件を反復的に改善できる。例では、特定の要件(1、2、状態の永続化)を削除し、その他(3、4、5、6、7、8)を MVP のスコープとして残した。
  • 要件を目的の成果と一致させるため、プロセスを行き来することの重要性を強調。
  • ワークフローの柔軟性:
  • Kiro は、迅速なプロトタイピング向けのバイブコーディングや、構造化された計画向けのスペック駆動開発など、さまざまなワークフローをサポート。
  • 開発者は、より構造化されたアプローチへ移行する前に、初期のインターフェイスや機能を検討するためバイブコーディングを好む場合がある。
  • 設計フェーズ:
  • 要件が確定すると、Kiro は既存のコードベースに基づいて設計ドキュメントを生成。
  • 設計フェーズには、指定された要件をシステムが満たすことを確認するためのアーキテクチャ図とプロパティテストの作成が含まれる。
  • 反復的なプロセス:
  • プロセスは反復的で、開発者が成果に満足するまで要件と設計ドキュメントを改善可能。
  • 生成されたドキュメントは、将来の開発と保守に役立つ参照資料となる。

設計ドキュメントのレビューと強化

設計ドキュメントの概要

  • Kiro は、改善された要件に基づき、上位レベルのアーキテクチャとコンポーネント概要を含む設計ドキュメントを生成。
  • 設計ドキュメントでは Mermaid の図と Markdown を使用し、明確な可視化と文書化を実現。
  • 上位レベルのアーキテクチャ:
  • アーキテクチャには、開始画面、質問画面、結果画面、データ永続化のためのローカルストレージ、音声回答を録音するための Web Audio API が含まれる。
  • コンポーネントの内訳:
  • 特定された主要コンポーネント:開始画面ビュー、質問画面ビュー、セッション状態の取得(質問と回答)、質問バンク (MVP)、セッションストレージ。
  • 不足点の特定:
  • 不足している機能として、ユーザー回答音声の文字起こしと結果の詳細分析を特定。
  • 設計ドキュメントには、音声を文字起こしする方法と、結果を生成して提示する方法の詳細が不足。
  • 設計の強化:
  • ユーザーの発話と同時にテキストへ文字起こしする機能と、結果に対する追加分析を要件に追加。
  • 自然言語プロンプトを使って新しい要件を簡単に追加できることを示し、AI 支援による文書化の利便性を強調。

設計の強化とタスクリストへの移行

設計ドキュメントの更新

  • Cloud SDK を使用した音声の文字起こしや結果の詳細分析など、設計ドキュメントに機能を追加。
  • バージョン管理システムに依存せず以前の状態へ簡単に戻せるよう、チェックポイントと復元機能を導入。
  • システム図の更新:
  • 文字起こしサービス(Cloud SDK を使用した speech-to-text)を含めるようシステム図を更新。
  • タスクリストの生成:
  • 更新された設計ドキュメントに基づくタスクリストの生成へワークフローを移行。
  • タスクには、データモデルの作成、音声録音サービスの実装、回答検証用ストレージ、AI 統合が含まれる。
  • 柔軟性と改善:
  • 手動による編集と改善を設計ドキュメントへ反映できるワークフロー。
  • MVP のスコープを迅速に達成することへ集中できるよう、タスクの並べ替えや優先順位付けが可能。
  • オプションタスク:
  • プロパティベーステストのタスクはデフォルトでオプションに設定され、開発者は追加テストへ対応する前にコア機能へ集中可能。
  • タスクリストを調整し、特定のタスクを優先して MVP 開発を迅速化できる。

タスクリストの優先順位付けと実装

タスクリストの柔軟性

  • MVP のスコープを迅速に達成することへ集中できるよう、タスクリストを調整して並べ替え可能。
  • タスク数を減らしてワークフローを管理しやすくするため、タスクをグループ化可能。
  • テストファースト開発:
  • テスト駆動開発アプローチを好む場合、開発者はテストを先に記述可能。
  • ワークフローはさまざまな開発スタイルをサポートし、チームの希望に合わせてカスタマイズ可能。
  • MVP のコアタスク:
  • 5 つのタスクをコア MVP として特定:依存関係のセットアップ、コアデータ型の作成、アプリケーション状態管理の実装、音声録音の実装、音声テスト。
  • その他のタスクには、回答検証用ストレージの実装と開始画面コンポーネントの作成が含まれる。
  • UI の組み込み:
  • 初期フェーズでは UI コンポーネントを含めない場合もあるが、視覚的なテストと操作のため UI を含むよう調整可能。
  • タスクの実装:
  • UI のクリックまたはチャットコマンドでタスクを開始可能。
  • Kiro はタスクを順番に実行し、ターミナルコマンドを実行して依存関係をインストールし、必要なファイルを作成。
  • プロセスは反復的で、変化する要件と設計に基づき迅速に調整・改善可能。

プロパティベーステストの概要

構造化された要件

  • 要件はユーザーストーリーと受け入れ基準の形式で定義。
  • 要件について論理的等価性と形式的推論が可能。
  • プロパティと形式的推論:
  • プロパティとは、システムのすべての実行において成立すべき特性または振る舞い。
  • Kiro は Gherkin 形式の要件からプロパティを抽出し、Fast Check というフレームワークをプロパティベーステストに使用。
  • Gherkin
  • Behavior-Driven Development (BDD) でソフトウェアの振る舞いのシナリオを構造化された人間可読形式で記述するために使用されるプレーンテキスト言語で、主に Given-When-Then 構造を使用する。
  • Feature:テスト対象の機能を記述。
  • Scenario:機能が動作する具体例。
  • Given:アクション実行前の初期コンテキストまたは状態を設定。
  • When:ユーザーまたはシステムが実行するアクションを記述。
  • Then:期待される成果または結果を定義。
  • And/But:同じキーワード(Given、When、Then)を繰り返さず、そのキーワードにさらにステップを追加するために使用。
  • Fast Check Framework:
  • Fast Check は、さまざまな値を生成してプロパティに照らしてテストすることで、ファズテストを可能にする。
  • 入力が限られるユニットテストとは異なり、プロパティベーステストは、生成された出力が要件に対応していることを示す、より多くの根拠を提供。
  • プロパティベーステストの例:
  • Kiro を使用してチェスアプリを作成し、アプリが期待どおり動作することを確認するためプロパティベーステストを使用。
  • AI が生成したすべての手が、手のルールに照らして有効であることの確認などをテスト。
  • Fast Check はランダムな変更を加えてテストを複数回実行し、堅牢性を確保してバグを削減。
  • プロパティベーステストはコード品質を高め、バグが発生する可能性を低減。

診断ツール

  • Kiro の診断ツールは、タスク実行中の問題の特定と解決を支援。
  • エディタから lint の問題を読み取り、開発プロセスを改善するためのフィードバックを提供。
  • このツールにより、タスク完了中に発生する問題の数が減少。
  • タスクの実行:
  • アプリには、面接準備向けの行動、技術、リーダーシップに関する質問が含まれる。
  • アプリは回答生成用の Sonnet 3.7 モデルに接続。
  • 最適化されたデモ:
  • 最終的なアプリは、質問と回答を使った面接準備の練習を実演。
  • ユーザーは技術的な質問への回答を練習し、フィードバックを受け取ることができる。
  • デモでは、回答を録音して文字起こしする機能を含むアプリの機能を紹介。