2026年3月アーカイブ

アマゾンジャパン品川オフィス3階

森のようなアトリウム


  1. はじめに
  2. Text2SQLとは
  3. ワークショップの内容
  4. 参加者の声
  5. PoCから本格導入まで


1.はじめに

営業担当から突然、「この商品の半年分の売上推移のデータください」と言われ、思いがけないタイミングでデータ集計に時間を取られてしまう--。そんな依頼を様々な部署から受け、毎日追われている、というご経験がある方もいらっしゃるのではないでしょうか?

こうした課題を解決する手段として注目されているのがText2SQLです。

今回、アクセルユニバースは アマゾン ウェブ サービス ジャパン合同会社様(以下、AWS Japan)と共催し、 Text2SQLワークショップを開催しました。本記事では、その内容と当日の様子をご紹介します。


2.Text2SQLとは

Text2SQLとは、自然言語(プレーンテキスト)の質問を、Amazon RDS や Amazon Redshift などのデータベースで実行可能なSQLクエリに自動変換する技術です。

例えば、「先月の売上トップ10の商品を教えて」と入力すると、AIがSQLを生成し、データベースから結果を取得します。

このように、AIがユーザーの指示を理解し、事前に設定された目標を達成するために、自律的に計画・実行をする仕組みは「AIエージェント」と呼ばれており、DX領域で注目されています。今回のワークショップでは、Claude(Anthropic社が提供する生成AIモデル※)、 Kiro を利用し、Text2SQLの構築とカスタマイズを体験していただきました。

Kiro は、AIを活用したアプリケーション開発を支援する開発環境であり、AIとの対話を通じて要件整理や処理設計、実装を進めることができます。これにより、従来は専門知識が必要だったデータ分析基盤の構築も、よりスピーディに試行・改善できるようになります。これにより、SQLを書けない人でもチャット形式でデータ分析が可能になります。

※ClaudeはAnthropic PBCの商標または登録商標です


3.ワークショップの内容

今回のワークショップは、参加企業の自社データを用いてText2SQLの構築とデータ分析を体験していただく内容で、2部構成で実施しました。

成果物としては、セミナーに参加された皆様に、翌日からどのようなエージェントでどのように業務を変え、それによりどんな強み / 価値が強化されるのかというストーリーがまとまる状態を目指して実施しました。


3-1.第1部:座学パート

まずはAIエージェント時代のビジネスについて理解するため 座学セッションを行いました。


3-1-1.AI BPR(ビジネスプロセス・リエンジニアリング)について


ar_last.png

アマゾンウェブサービスジャパン合同会社

Senior Machine Learning Developer Relations

久保 隆宏様

​​

AWS Japanの久保様より、AIエージェント時代のビジネスについてご講演いただきました。今回のワークショップでは、Text2SQLの構築だけでなく、AI BPR(AI-driven Business Process ReEngineering:AIを前提とした業務プロセスの見直し)が重要なテーマです。

生成 AI の技術は仕事を任せられる方向へ進化していますが、組織の差別化要因はこれからも人間です。AI BPR が目指すのは、人間の作業を置き換えることではなく、人間の強みをデータ x AI エージェントで強化 することです。

AI BPR は以下の3つの特徴で、従来の "BPR" や生成 AI 適用が抱えている課題を解決します。

  • 「問題」から始めるのではなく、業務を通じた強みや顧客へのアウトカムの特定から始めること
  • 技術的に可能か否かの議論に時間を費やすのではなく、担当者がどのように強み・価値に注力するかという適応を議論すること
  • ヒアリングや要件調整に時間をかけるのではなく、ステークホルダーが同じ時間・場所に集まり、生成AIを用いてリアルタイムに成果物を作成すること


今回のワークショップでは、単にText2SQLの構築を体験するだけでなく、こうしたAI BPRの考え方を実際の手順の中で体験していただきました。


3-1-2.Text2SQLのデモ


ar_last.png

アクセルユニバース株式会社 システム部

齋藤 敬明

​​

弊社エンジニアの齋藤より、 Text2SQLについてご説明しました。自然言語で質問すると、AIがSQLを生成し、データベースから結果を取得する様子をご覧いただきました。

特にデモのときには、参加者の皆様に興味をもってみていただき、参加者の皆様は「自社データで試してみる」ことへの期待が大きくなっているようにみえました。


3-2.第2部:Text2SQLの構築ハンズオン

後半は、実際にText2SQLを構築するハンズオンを実施しました。


ar_last.png

アマゾンジャパン品川オフィス

ハンズオン会場

​​

今回はこんな素敵な空間にある5つのお部屋で、参加企業ごとに部屋を分け、 それぞれのデータを使って構築を進めました。


3-2-1.ハンズオンの手順

  1. Kiro IDEの環境構築
  2. ノンカスタマイズのText2SQLをデプロイ
  3. Kiro IDE を使った自社業務プロセスの分析
  4. Kiro IDE が生成した文書を使って Kiro で Text2SQL のカスタマイズ
  5. チャット形式でデータ分析
  6. 分析結果のまとめ(最終レポート作成)


3-2-2.参加企業の例

参加者
情報システム部の方と、分析実務担当の方 

課題
営業担当から突然「例)この商品の半年分の売上推移のデータください」と依頼があり、想定外のタイミングでデータ集計作業が発生する

当日使用したデータ
市場データ(2か月分)


3-2-3.体験中の様子

最初はAIの集計結果に半信半疑の様子でしたが、手元の手動集計データと比較した結果、正確な集計であることが確認できました。

その後は積極的にAIへ質問を行い、「商品種別ごとの傾向」や「注目ポイント」などをチャットで会話しながら確認され、その回答に今後の活用への期待感を抱いていただけたようでした。参加者からは「営業担当と一緒に使えば、さらに価値が出そう」という感想もいただきました。


ar_last.png

ハンズオンの一場面

環境構築の様子

​​


4.参加者の声

環境構築を終え、Kiroが生成した最終レポートを確認した際には、自然と拍手が起こる場面もありました。

アンケートでは以下の声をいただきました。(一部抜粋)

  • AIと対話しながら業務プロセスを分解し、改善のイメージを持つことができた。
  • やりとりの質が高く、言語化できていない要素を整理・言語化するのに最適だと感じた。
  • ハンズオンでアプリを作れたことで理解が深まった。
  • グラフなど、視覚的な分析ができる点が良いと感じた。
  • AIが自動でクエリを再生成する仕組みに驚いた。


「業務プロセスの分解や言語化に役立つ」「AIとの対話を通じて活用イメージが具体化した」といった感想もあり、AI BPRの考え方が実体験を通して伝わっていたことがうかがえました。

一方で、データ準備や環境構築に関する課題も一部挙がっており、実運用に向けて検討すべきポイントも明らかになりました。 こうしたフィードバックは、今後のワークショップ内容の改善や実践支援を行う上での貴重な示唆となりました。


5.PoCから本格導入まで

PoCから本格導入まで

アクセルユニバースでは、今回のデモ環境をベースにPoCから本格導入までの支援を行っています。

一例ですが、約3か月のPoCを通して、

  • 自社データでの検証
  • 活用シナリオの検討
  • 定着化

を進めることが可能です。


AIの活用が重要になることは感じていても、

  • どこから始めればよいのか分からない
  • 何を作ればいいのか分からない

という方も多いと思います。

そうした段階でも、課題整理から一緒に検討させていただきます。ぜひお気軽にご相談ください。

AUCへのお問い合わせ 


  1. はじめに
  2. 生成AIプロジェクトで起きがちなこと
  3. リリース前に起きる問題とよくある対応
  4. 本質的に必要なアプローチ
  5. おわりに


1.はじめに

「PoCではうまくいっていたのに、本番が近づくと急に問題が噴出する」

いくつかの生成AI案件を進める中で、この現象には共通する構造があることに気づきました。PoCでは「使えそう」だったものが、本番直前で「このままでは出せない」と判断されるのです。

原因はモデルの性能不足だけではありません。

多くの場合、課題は進め方にあります。生成AIは、曖昧な要件でもそれらしく動いてしまう一方で、評価基準が定まらないまま進めると、後工程で揺らぎが顕在化します。

本記事では、生成AI活用でよくある失敗パターンと、 安定した成果を出すために必要な考え方について整理してみます。


2.生成AIプロジェクトで起きがちなこと

生成AIを使ったプロジェクトの初期段階では、次のような状況がよく見られます。

  • 生成AIの活用範囲を模索する段階で、要求がまだ抽象的な状態にある
  • 具体的な評価基準が定まらないままPoCが進む
  • 「なんとなく良い」という評価で次のフェーズに進む


この段階では、大きな問題は表面化しません。むしろ「思ったよりできる」という印象を持つことも多いでしょう。
なぜこのようなことが起きるのでしょうか。

生成AIは、要件が曖昧な状態でも一定水準の回答を返せるという特性を持っているからです。

たとえば「わかりやすく説明して」という指示に対して、明確な基準がなくても、それらしい文章を出力します。これは生成AIの強みでもあります。 評価基準がまだ固まっていない段階でも一定品質の出力が得られるため、想定以上に「使えそうだ」という感触のPoCが出来上がることがあります。

その結果、「十分に良いのではないか」という評価のもと、仕様や判断基準が明確に整理されないまま、プロジェクトが次のフェーズへ進んでいくケースも見られます。


3.リリース前に起きる問題とよくある対応

しかし、リリースや本格運用が近づくにつれて状況は変わります。

  • 「ここはこうしてほしい」という具体的な要望が出てくる
  • これまで許容されていた回答の揺れが問題視される
  • リリースを目前にして、初めて「こんなのでは困る」という具体的な目標がわかってくる


つまり、ここで初めて評価基準が具体化するのです。PoC段階では曖昧だった「正解」が、急に具体的な形を持ち始めます。
その結果、これまで見えていなかったズレが一気に顕在化します。

◆よくある対応の落とし穴

多くのプロジェクトで見られるのが、指摘されたケースを例示として追加し、few-shotで挙動を矯正する対応です。

特にリリース直前では、急いで修正する必要があり、影響範囲を限定しながら確実に直したいという判断から、このような対応方法が選ばれやすくなります。

一見、直ったように見えます。 しかし、修正を重ねるほど次のような問題が起きやすくなります。

  • 特定のケースに合わせた指示になるため、そのケースではうまく動くが、少し条件が変わると対応できなくなる
  • 新しい入力パターンでは通用しない
  • few-shotによる例示がどんどん増えていき、全体の一貫性が失われる(あらゆる箇所に「最重要」などの強い指示が増えていく)


結果として、安定して使える状態になりにくくなります。


4.本質的に必要なアプローチ

安定した成果を出す為には、指摘を足していくだけではいずれ限界が来ます。 重要なのは、次のようなプロセスです。

  • お客様からもらった指示をそのままプロンプトに落とし込むのではなく、背景や意図を考える
  • その指示が必要な理由を掘り下げる
  • 期待される結果や出力の形を整理する
  • 複数の要望を共通の判断基準にまとめる
  • その判断基準に沿ってプロンプトを組み立てる


この整理を挟むかどうかで、プロジェクトの安定性は大きく変わります。 判断基準が曖昧なまま具体例だけを増やしても、安定した成果にはつながりません。
「やっとわかってきた具体的要求を噛み砕いて、生成AIにプロンプトという形で指示を与える。」 それは、従来の開発における上流工程で実施していた要求分析から設計、実装に落とすフェーズや、PMがメンバーに業務を指示してきたことに近いのです。


5.おわりに

生成AI案件では、目標が曖昧で、正解が一意でなく、評価基準も途中で変わることが少なくありません。だからこそ、修正のたびに要望をそのまま追加していくのではなく、一度立ち止まることが重要になります。お客様の要望をそのままプロンプトに足し続けると、全体の構造が崩れ、プロンプトが複雑化していきます。
その前に、「本当に必要なことは何か」「本当にモデルに指示するべき内容は何か」を整理することが、安定した設計につながります。


求められるのは、曖昧な要求を整理し、背景意図を読み取り、具体的な期待値を噛み砕いてプロンプトに落とす力です。


生成AIや機械学習の知識だけではなく、「要求をどう整理し、どう指示するか」が成功の鍵となります。 そのため、生成AI活用を成功させるには、単に技術に強いだけでなく、要求分析や要件定義を丁寧に行えるパートナーかどうかという視点も重要になります。


アクセルユニバースでは、こうした要求整理のプロセスを重視し、曖昧なアイデアや構想の段階から整理しながら、生成AIを組み込んだシステムをオーダーメイドで開発しています。生成AIの特性を踏まえた設計を行うことで、PoCにとどまらない実運用につながる形での活用を支援しています。


それが、生成AI活用プロジェクトの難しさであり、面白さであるのかもしれません。

AUCへのお問い合わせ 



X(旧Twitter)・Facebookで定期的に情報発信しています!

目次

  1. はじめに
  2. Kiroについて
  3. 実際に触ってみた
  4. 感想
  5. おまけ


1. はじめに

AIを使用してコーディングする場面を思い浮かべてください。
コード生成した結果、周辺とは違った書き方をされたり、余計な箇所を直されたり、意図しない修正をされて困った経験はありませんか?
他機能への影響が限定的な箇所や、とても簡単な機能の修正は、思い通りにいくことが多いですが、
他機能への影響が大きい改修など、機能の複雑度が高くなればなるほど上手くいかないことは顕著になりませんか?
本来はそんな(レバレッジの効きやすい)大規模な修正作業こそ、AIに任せたいものですよね。(しみじみ)

これらの問題の多くは、AIに「何を作りたいか」を正確に伝えられていないことが原因であることが多いと思います。
つまり、AIとの対話において、必要な情報を適切な形で提供できていないことが原因です。
プロンプトを調整したり、サービスとやり取りするチャットのセッションをリセットしたり、AIへの依頼方法を調整する行為をプロンプトエンジニアリングの上位概念として「コンテキストエンジニアリング」と言うらしいです。

調整したコンテキストをAIに依頼する。という熟練者達の暗黙知を
手段として提供しているAIコーディングエージェント「AWS Kiro」について、特徴や実際の操作についてまとめてみたので紹介します。


2. Kiroについて

AWS Kiroは、AIコーディングエージェントで、特にSpecモードが特徴的です。
公式ドキュメント

2.1. Spec駆動開発:AIとの対話を構造化する

従来のAIコーディングエージェントでは、「何を作りたいか」「どう作るか」はユーザの任意のタイミングで伝える必要がありました。
しかし、KiroのSpecモードは、開発プロセスを3つのフェーズに分けることで、AIとの対話を構造化してます。

  • フェーズ1: 要件定義(Requirements)
    • 「何を作るか」を明確にする
    • ユーザーストーリーと受入基準を定義
    • この段階でレビュー・修正が可能
  • フェーズ2: 設計(Design)
    • 「どう作るか」を設計する
    • アーキテクチャ、コンポーネント、テスト戦略を定義
    • 要件を基に自動生成され、レビュー・修正が可能
  • フェーズ3: 実装計画(Tasks)
    • 「どの順番で作るか」を計画する
    • 具体的なタスクリストを生成
    • 設計を基に自動生成され、レビュー・修正が可能


この段階的なアプローチにより、各フェーズで必要な情報だけに集中することができ、AIに対して適切な情報を適切なタイミングで提供することができます。
結果として、AIが生成するコードの品質が安定し、意図しない実装を最小限にすることができます。

注意:

AIへ依頼する仕組みとしては整備がされていますが、必ずしも十分な内容を提案してくれるとは限りません。
意図に沿わないものは、適宜修正する必要があります。
他者に伝えるときと同じように、AIにも伝わるよう丁寧に整理する心遣いが大切ですね。

2.2. なぜSpec駆動開発が効果的なのか

Specモードの最大の特徴は、「AIに必要な情報を段階的に整理させる」という点です。

  • 情報の整理
    • 各フェーズで必要な情報だけに焦点を当てられる
    • 前のフェーズの成果物が次のフェーズの入力になる
    • 情報の抜け漏れを防ぐ
  • レビューポイントの明確化
    • 各フェーズで人間がレビュー・修正できる
    • 早い段階で方向性の誤りを修正できる
    • 実装前に要件と設計を確定できる
  • 品質の安定化
    • 要件から実装までのトレーサビリティ
    • (ドキュメント次第ではありますが)プロパティベーステストを含む包括的なテスト戦略
    • 個々のエンジニアの経験に依存しにくい


つまり、Specモードは「AIとの対話の仕組み」そのものを改善することで、
(ある程度のレベルまでは)誰でも適切にAIに情報を伝えられるようになっています。


3.実際に触ってみた

今回はIDE版で進めていきます。
インストール・セットアップの手順については本記事では割愛します。
詳細は公式ドキュメントをご参照ください。

~ % cd sample_kiro
sample_kiro % kiro .

対象のプロジェクトに移動して「kiro .」でkiro.appが開きます
※kiro.appを開いて対象のプロジェクトを開くでも問題ないです。

kiro_start

「Spec」を選択して、早速以下のプロンプトを渡してみました

ブラウザで動作する簡単なTODOリストを作成したいです。

created_requirements

Kiroが requirements.md(要件ドキュメント) を作成してくれました
中身はこんな感じです

requirements.md - クリックして展開

要件ドキュメント

はじめに

ブラウザで動作するシンプルなTODOリストアプリケーション。ユーザーがタスクを追加、完了マーク、削除できる基本的な機能を提供します。

用語集

  • System: TODOリストアプリケーション全体
  • Task: ユーザーが管理する個々のTODO項目
  • Task_List: すべてのタスクを保持するコレクション
  • Local_Storage: ブラウザのローカルストレージAPI
  • User_Interface: ユーザーが操作するブラウザのUI

要件

要件1: タスクの追加

ユーザーストーリー: ユーザーとして、新しいタスクをTODOリストに追加したい。そうすることで、やるべきことを記録し整理できる。

受入基準

  1. WHEN ユーザーがタスクの説明を入力してEnterキーを押すかまたは追加ボタンをクリックする THEN THE System SHALL 新しいタスクを作成してリストに追加する
  2. WHEN ユーザーが空のタスクを追加しようとする THEN THE System SHALL 追加を防止し現在の状態を維持する
  3. WHEN 新しいタスクが追加される THEN THE System SHALL 入力フィールドをクリアして次の入力のためにフォーカスする
  4. WHEN タスクが追加される THEN THE System SHALL タスクを即座にローカルストレージに永続化する

要件2: タスクの完了マーク

ユーザーストーリー: ユーザーとして、タスクを完了としてマークしたい。そうすることで、どのタスクが完了したかを追跡できる。

受入基準

  1. WHEN ユーザーがタスクをクリックする THEN THE System SHALL タスクの完了状態をトグルする
  2. WHEN タスクが完了としてマークされる THEN THE System SHALL 視覚的なフィードバックを提供する(例:取り消し線、チェックマーク)
  3. WHEN タスクの完了状態が変更される THEN THE System SHALL 変更を即座にローカルストレージに永続化する

要件3: タスクの削除

ユーザーストーリー: ユーザーとして、タスクを削除したい。そうすることで、不要になったタスクをリストから削除できる。

受入基準

  1. WHEN ユーザーが削除ボタンをクリックする THEN THE System SHALL タスクをリストから削除する
  2. WHEN タスクが削除される THEN THE System SHALL 削除を即座にローカルストレージに反映する
  3. WHEN タスクが削除される THEN THE System SHALL UIを更新して削除されたタスクを表示しない

要件4: タスクの永続化

ユーザーストーリー: ユーザーとして、ブラウザを閉じて再度開いたときにタスクが保持されていてほしい。そうすることで、作業を継続できる。

受入基準

  1. WHEN ユーザーがアプリケーションを開く THEN THE System SHALL ローカルストレージから既存のタスクを読み込む
  2. WHEN ローカルストレージにデータが存在しない THEN THE System SHALL 空のタスクリストで開始する
  3. WHEN ローカルストレージのデータが破損している THEN THE System SHALL エラーを処理して空のリストで開始する

要件5: ユーザーインターフェース

ユーザーストーリー: ユーザーとして、シンプルで使いやすいインターフェースを使いたい。そうすることで、タスク管理に集中できる。

受入基準

  1. THE User_Interface SHALL 入力フィールド、追加ボタン、タスクリストを表示する
  2. WHEN タスクが表示される THEN THE System SHALL 各タスクに完了状態と削除ボタンを表示する
  3. THE User_Interface SHALL レスポンシブで様々な画面サイズに対応する
  4. WHEN ユーザーがインターフェースと対話する THEN THE System SHALL 即座にフィードバックを提供する

要件6: データの整合性

ユーザーストーリー: システム管理者として、データの整合性が維持されることを確認したい。そうすることで、ユーザーがデータを失わないようにできる。

受入基準

  1. WHEN タスクが作成される THEN THE System SHALL 一意の識別子を割り当てる
  2. WHEN 複数の操作が実行される THEN THE System SHALL データの整合性を維持する
  3. WHEN ローカルストレージへの書き込みが失敗する THEN THE System SHALL エラーを適切に処理する

要件を確認して、修正したいところがあれば修正します。
今回はこのまま進めます。 Move to design phase を押下します。

created_design

要件に沿って Kiro が design.md(設計ドキュメント) を作成してくれました
アーキテクチャ、コンポーネント、データの永続化の方法論や、正常性プロパティ、テスト戦略まで、結構細かい粒度で設計をアウトプットしてくれました。

design.md - クリックして展開

設計ドキュメント

概要

ブラウザで動作するシンプルなTODOリストアプリケーション。HTML、CSS、JavaScriptを使用して実装し、ブラウザのローカルストレージAPIを使用してデータを永続化します。

このアプリケーションは以下の主要機能を提供します: - タスクの追加、完了マーク、削除 - ローカルストレージによるデータの永続化 - レスポンシブなユーザーインターフェース

アーキテクチャ

アプリケーションは以下の3層アーキテクチャで構成されます:

レイヤー

  1. UI Layer(UIレイヤー): ユーザーインターフェースの表示とユーザー入力の処理
  2. Application Layer(アプリケーションレイヤー): ビジネスロジックとタスク管理
  3. Storage Layer(ストレージレイヤー): データの永続化と取得

コンポーネントとインターフェース

1. Task Model(タスクモデル)

タスクを表現するデータ構造:

2. TaskManager(タスクマネージャー)

タスクの管理を担当するコアコンポーネント

3. StorageService(ストレージサービス)

ローカルストレージとのやり取りを担当

4. UIController(UIコントローラー)

UIの更新とユーザー入力の処理を担当

データモデル

Task(タスク)

ローカルストレージ形式

正確性プロパティ

プロパティとは、システムのすべての有効な実行において真であるべき特性や動作のことです。本質的には、システムが何をすべきかについての形式的な記述です。プロパティは、人間が読める仕様と機械で検証可能な正確性保証の橋渡しをします。

Property 1: タスク追加でリストが増加

任意のタスクリストと有効な(空でない)タスク説明に対して、それをタスクリストに追加すると、タスクリストの長さが1増加するべきです。

検証対象: 要件 1.1

Property 2: 空白文字のみのタスクは無効

任意の空白文字のみで構成された文字列に対して、それをタスクリストに追加しようとすると拒否され、タスクリストは変更されないべきです。

検証対象: 要件 1.2

Property 3: 入力フィールドのクリア

任意の入力バーが空でないUI状態に対して、入力を送信すると入力バーが空になるべきです。

検証対象: 要件 1.3

Property 4: 操作の永続化ラウンドトリップ

任意のタスク操作(追加、トグル、削除)に対して、操作を実行してからローカルストレージから読み込むと、同じ状態が復元されるべきです。

検証対象: 要件 1.4, 2.3, 3.2, 4.1

Property 5: 完了状態のトグル

任意のタスクに対して、完了状態をトグルすると、状態が反転する(completed: false → true または true → false)べきです。

検証対象: 要件 2.1

Property 6: 完了タスクの視覚的フィードバック

任意の完了したタスクに対して、レンダリングされたHTMLには完了状態を示す視覚的インジケーター(CSSクラスや属性)が含まれるべきです。

検証対象: 要件 2.2

Property 7: タスク削除でリストから除外

任意のタスクリストとタスクに対して、そのタスクを削除すると、タスクはリストに含まれなくなり、UIにも表示されなくなるべきです。

検証対象: 要件 3.1, 3.3

Property 8: タスクレンダリングの完全性

任意のタスクに対して、レンダリングされた文字列には、タスクの説明、完了状態インジケーター、削除ボタンが含まれるべきです。

検証対象: 要件 5.2

Property 9: タスクIDの一意性

任意のタスクのコレクションに対して、すべてのタスクIDは一意であるべきです(重複がない)。

検証対象: 要件 6.1

エラーハンドリング

入力検証エラー

  • 空または空白文字のみのタスク説明は拒否される
  • エラーメッセージは表示せず、単に操作を無視する(シンプルなUX)

ストレージエラー

  • ローカルストレージが利用できない場合、メモリ内でのみ動作
  • ローカルストレージのデータが破損している場合、空のリストで開始
  • ストレージへの書き込みが失敗した場合、コンソールにエラーをログ出力

データ検証エラー

  • ローカルストレージから読み込んだデータが無効な形式の場合、そのエントリをスキップ
  • 必須フィールド(id、description)が欠けているタスクは無視

テスト戦略

デュアルテストアプローチ

このアプリケーションは、ユニットテストとプロパティベーステストの両方を使用して包括的なカバレッジを実現します:

  • ユニットテスト: 特定の例、エッジケース、エラー条件を検証
  • プロパティテスト: すべての入力にわたる普遍的なプロパティを検証

両方のアプローチは補完的であり、包括的なカバレッジに必要です。

ユニットテストの焦点

ユニットテストは以下に焦点を当てます:

  • 特定の例(例:「買い物に行く」というタスクを追加)
  • エッジケース(空のストレージ、破損したデータ、ストレージ失敗)
  • コンポーネント間の統合ポイント
  • エラー条件とエラーハンドリング

プロパティベーステストの設定

  • テストライブラリ: fast-check(JavaScriptのプロパティベーステストライブラリ)
  • イテレーション数: 各プロパティテストは最低100回実行
  • タグ形式: 各テストには設計ドキュメントのプロパティを参照するコメントを含める
    • 例:// Feature: browser-todo-list, Property 1: タスク追加でリストが増加
  • 実装ルール: 各正確性プロパティは単一のプロパティベーステストで実装される

テストカバレッジ

  1. TaskManager:

    • ユニットテスト: 基本的な追加/トグル/削除操作
    • プロパティテスト: Property 1, 2, 4, 5, 7, 9
  2. StorageService:

    • ユニットテスト: 保存/読み込み/エラーハンドリング
    • プロパティテスト: Property 4(ラウンドトリップ)
  3. UIController:

    • ユニットテスト: イベントハンドリング、UI更新
    • プロパティテスト: Property 3, 6, 8

エッジケースのテスト

以下のエッジケースはユニットテストでカバーします:

  • 空のローカルストレージ(要件 4.2)
  • 破損したローカルストレージデータ(要件 4.3)
  • ストレージへの書き込み失敗(要件 6.3)
  • 特殊文字を含むタスク説明
  • 非常に長いタスク説明

設計についてもこのまま進めます。 Move to implementation plan を押下します。

created_tasks

tasks.md(実装計画)が作成されました。
一部のタスクをオプション化してまずはコア機能のみの計画にするか or 最初から包括的に作成する計画にするか
聞かれたので、包括的に作ってもらいました。

tasks.md - クリックして展開

実装計画: ブラウザTODOリスト

概要

HTML、CSS、JavaScriptを使用してブラウザで動作するシンプルなTODOリストアプリケーションを実装します。ローカルストレージを使用してデータを永続化し、プロパティベーステスト(fast-check)とユニットテストで品質を保証します。

タスク

  • [] 1. プロジェクト構造とテスト環境のセットアップ

    • HTMLファイル(index.html)を作成
    • CSSファイル(styles.css)を作成
    • JavaScriptファイル(app.js)を作成
    • テスト環境をセットアップ(Jest + fast-check)
    • package.jsonを作成してテストスクリプトを設定
    • 要件: すべて
  • [] 2. StorageServiceの実装

    • [] 2.1 StorageServiceクラスを実装
    • ローカルストレージへの保存・読み込み機能
    • エラーハンドリング(破損データ、ストレージ失敗)
    • 要件: 4.1, 4.2, 4.3, 6.3

    • [] 2.2 StorageServiceのユニットテストを作成

    • 正常な保存・読み込みのテスト
    • 空のストレージのテスト
    • 破損データのエラーハンドリングテスト
    • 要件: 4.2, 4.3, 6.3
  • [] 3. TaskManagerの実装

    • [] 3.1 TaskManagerクラスを実装
    • タスクの追加、トグル、削除機能
    • 一意のID生成(UUID)
    • StorageServiceとの統合
    • 要件: 1.1, 1.2, 2.1, 3.1, 6.1

    • [] 3.2 Property 1のプロパティテストを作成

    • Property 1: タスク追加でリストが増加
    • 検証対象: 要件 1.1

    • [] 3.3 Property 2のプロパティテストを作成

    • Property 2: 空白文字のみのタスクは無効
    • 検証対象: 要件 1.2

    • [] 3.4 Property 4のプロパティテストを作成

    • Property 4: 操作の永続化ラウンドトリップ
    • 検証対象: 要件 1.4, 2.3, 3.2, 4.1

    • [] 3.5 Property 5のプロパティテストを作成

    • Property 5: 完了状態のトグル
    • 検証対象: 要件 2.1

    • [] 3.6 Property 7のプロパティテストを作成

    • Property 7: タスク削除でリストから除外
    • 検証対象: 要件 3.1, 3.3

    • [] 3.7 Property 9のプロパティテストを作成

    • Property 9: タスクIDの一意性
    • 検証対象: 要件 6.1

    • [] 3.8 TaskManagerのユニットテストを作成

    • 基本的な追加・トグル・削除操作のテスト
    • エッジケース(特殊文字、長い説明)のテスト
    • 要件: 1.1, 2.1, 3.1
  • [] 4. チェックポイント - すべてのテストが通ることを確認

    • すべてのテストが通ることを確認し、質問があればユーザーに尋ねる
  • [] 5. UIControllerの実装

    • [] 5.1 UIControllerクラスを実装
    • DOM要素の取得と初期化
    • イベントリスナーの設定(追加、トグル、削除)
    • タスクリストのレンダリング
    • 入力フィールドのクリア
    • 要件: 1.1, 1.3, 2.1, 2.2, 3.1, 5.1, 5.2

    • [] 5.2 Property 3のプロパティテストを作成

    • Property 3: 入力フィールドのクリア
    • 検証対象: 要件 1.3

    • [] 5.3 Property 6のプロパティテストを作成

    • Property 6: 完了タスクの視覚的フィードバック
    • 検証対象: 要件 2.2

    • [] 5.4 Property 8のプロパティテストを作成

    • Property 8: タスクレンダリングの完全性
    • 検証対象: 要件 5.2

    • [] 5.5 UIControllerのユニットテストを作成

    • イベントハンドリングのテスト
    • UI更新のテスト
    • 要件: 1.1, 2.1, 3.1
  • [] 6. HTMLとCSSの実装

    • [] 6.1 index.htmlを完成させる
    • 入力フィールド、追加ボタン、タスクリストのマークアップ
    • JavaScriptファイルの読み込み
    • 要件: 5.1

    • [] 6.2 styles.cssを実装

    • レスポンシブデザイン
    • 完了タスクの視覚的スタイル(取り消し線など)
    • シンプルで使いやすいUI
    • 要件: 2.2, 5.3
  • [] 7. アプリケーションの統合とワイヤリング

    • [] 7.1 すべてのコンポーネントを統合
    • app.jsでStorageService、TaskManager、UIControllerを初期化
    • アプリケーション起動時にタスクを読み込む
    • 要件: 4.1

    • [] 7.2 統合テストを作成

    • エンドツーエンドのフローをテスト
    • 要件: すべて
  • [] 8. 最終チェックポイント - すべてのテストが通ることを確認

    • すべてのテストが通ることを確認し、質問があればユーザーに尋ねる

注記

  • 各タスクは特定の要件を参照してトレーサビリティを確保します
  • チェックポイントは段階的な検証を保証します
  • プロパティテストは普遍的な正確性プロパティを検証します
  • ユニットテストは特定の例とエッジケースを検証します

run all tasks

Kiroにタスクの実行してもらいます。(チャットに「run all tasks」と入力) 実行中は以下のような感じで、進行状況がわかるようになってます。

run

最終的にできたアプリはこちらです。

todoアプリ

  • タスクの追加、削除、do/undoができる
  • データの永続化ができてる(localstrageの範囲で)
  • レスポンシブでシンプルなデザイン


4. 感想

「実際に触ってみた」のセクションで見てきたように、Specモードを使った開発では、
最初の簡単なプロンプトから

  • 要件定義、設計、実装計画が段階的に生成
  • 各フェーズで必要な情報が整理・確認することができ
  • tasks.mdの実行中に何度かエラーが発生し(エラー解析>修正を繰り返し)つつも、最終的に要件を満たすアプリを完成することができました


実際には、AIが提案する要件や、設計に対して、修正しながら進めていく事になると思います。
「要件定義、設計、実装計画」に時間をかける事で、品質や満足度の高いものを提供していければなと思いました。

AWS KiroのSpec駆動開発は、AIとの対話を構造化することで、品質を一定以上に得られる仕組みだと思います。
プロンプトの書き方ばかりに時間をかけるのではなく、最初から仕組み化されたツールを選ぶことも大切ですね。
ぜひ一度、試してみてはいかがでしょうか。


5. おまけ

AWS KiroにはCLI版の提供もあります。
以下の通り、インストール、pathの設定後に「kiro-cli」にて起動できます。 (メッセージは英語表示になってますが、日本語の質問すると日本語で返ってきました。)
エディターの縛りなく使用が可能です!!

sample_kiro % curl -fsSL https://cli.kiro.dev/install | bash ### Kiro CLIをインストール ###
Kiro CLI installer:

Downloading package...
✓ Downloaded and extracted
✓ Package installed successfully

🎉 Installation complete! Happy coding!

1. Important! Before you can continue, you must update your PATH to include:
/Users/moronagajun/.local/bin

Add it to your PATH by adding this line to your shell configuration file:
export PATH="$HOME/.local/bin:$PATH"

2. Use the command "kiro-cli" to get started!

sample_kiro % nvim ~/.zshrc ### 自分の場合はmacなので「~/.zshrc」に「export PATH="$HOME/.local/bin:$PATH"」を追記 ###
sample_kiro % source ~/.zshrc ### 「~/.zshrc」を再読み込み ###
sample_kiro % kiro-cli ### プロジェクトのディレクトリで「kiro-cli」を実行 ###

sample_kiro % Welcome to Kiro CLI, let's get you signed in!

Press enter to continue to the browser or esc to cancel ### enter 押下するとブラウザが起動するので、ログイン ###

✓ Signed in with Google (use "kiro-cli logout" to logout)
⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢀⣴⣶⣶⣦⡀⠀⠀⠀⢀⣴⣶⣦⣄⡀⠀⠀⢀⣴⣶⣶⣦⡀⠀⠀⢀⣴⣶⣶⣶⣶⣶⣶⣶⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣶⣶⣶⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢰⣿⠋⠁⠈⠙⣿⡆⠀⢀⣾⡿⠁⠀⠈⢻⡆⢰⣿⠋⠁⠈⠙⣿⡆⢰⣿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣦⠀⠀⠀⠀⣴⡿⠟⠋⠁⠀⠀⠀⠈⠙⠻⢿⣦⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⣇⣴⡿⠋⠀⠀⠀⢀⣼⠇⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢠⣤⣤⣤⣤⣄⠀⠀⠀⠀⣿⡆⠀⠀⣼⡟⠀⠀⠀⠀⣀⣀⣀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⡿⠋⠀⠀⠀⢀⣾⡿⠁⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢸⣿⠉⠉⠉⣿⡇⠀⠀⠀⣿⡇⠀⣼⡟⠀⠀⠀⣰⡿⠟⠛⠻⢿⣆⠀⠀⠀⢻⣧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠙⠁⠀⠀⢀⣼⡟⠁⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢸⣿⣶⣶⡶⠋⠀⠀⠀⠀⣿⠇⢰⣿⠀⠀⠀⢰⣿⠀⠀⠀⠀⠀⣿⡆⠀⠀⠀⣿⡆
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠹⣷⡀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣼⠟⠀⢸⣿⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⣿⡇
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠀⣠⡀⠀⠀⠹⣷⡄⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣤⣄⠀⠀⠀⠀⠹⣿⡅⠀⠀⠸⣿⠀⠀⠀⠸⣿⠀⠀⠀⠀⠀⣿⠇⠀⠀⠀⣿⠇
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣾⡟⣷⡀⠀⠀⠘⣿⣆⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣿⡟⣷⡀⠀⠀⠀⠘⣿⣆⠀⠀⢻⣧⠀⠀⠀⠹⣷⣦⣤⣤⣾⠏⠀⠀⠀⣼⡟
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⡇⠹⣷⡀⠀⠀⠈⢻⡇⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣿⡇⠹⣷⡀⠀⠀⠀⠈⢻⡇⠀⠀⢻⣧⠀⠀⠀⠀⠉⠉⠉⠀⠀⠀⠀⣼⡟
⠀⠀⠀⠀⠀⠀⠀ ⠸⣿⣄⡀⢀⣠⣿⠇⠀⠙⣷⡀⠀⢀⣼⠇⠀⠸⣿⣄⡀⢀⣠⣿⠇⠸⣿⣄⡀⢀⣠⣿⠇⠀⠙⣷⡀⠀⠀⢀⣼⠇⠀⠀⠀⠻⣷⣦⣄⡀⠀⠀⠀⢀⣠⣴⣾⠟
⠀⠀⠀⠀⠀⠀⠀ ⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠀⠀⠈⠙⠻⠿⠿⠿⠿⠟⠋⠁


Jump into building with Kiro:

1. Ask a question or describe a task
2. Use /context add to provide Kiro with additional info
3. Connect to external tools with by using /mcp

Use /help for more information and happy coding!

Model: auto (/model to change) | Plan: KIRO FREE (/usage for more detail)


4% > Ask me anything! ### ここにプロンプトを渡す ###

最後に、「設計を明確にしてからAIに依頼することが大切」という観点でCursorのPlanモードについても記事を書いてます。
興味がありましたら、一緒に読んでいただけると嬉しいです。
CursorのPlanモードについての記事はこちら

最後の最後までお読みいただき、ありがとうございました。

このアーカイブについて

このページには、2026年3月に書かれた記事が新しい順に公開されています。

前のアーカイブは2026年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。