【Kiro・Playwright】社内でフルAI開発バトル!!「1行も書かずに」Todoアプリを完成させた話〜Damarの場合〜

こんにちは。エンジニアのダマルです。

このブログはギークフィードアドベントカレンダー2025の14日目の記事です。

他の記事もぜひチェックしてみてください!

 

自己紹介

クラウド開発事業部所属のダマルです。
普段はAPI-データベース連携の開発、AWSクラウドの設計を担当しています。エンジニア歴は3年で、主にAWS、Node.js、Pythonを使った開発をしています。

最近写真を撮ったり、野球(メージャー)を見たりするのが好きです。

普段使ってるAIツール

日常的に以下のAIツールを活用しています。

  • ChatGPT:タスクの整理や調査に利用しています。特に、参考リンクを見つけたり、自分の理解を深めるために議論してもらうときにとても役立ちます。
  • Cursor:開発時のコーディング支援やコードレビューで使用しています。既存コードの内容を理解したり、そのコードに基づいてテストコードを自動生成してくれる点が非常に便利です。

企画概要とゴール

今回、「フルAI開発バトル」という企画に参加しました。

ルールはシンプルかつ過酷です。

 

詳しいルールや目的はアドベントカレンダー1日目の記事で紹介しております。

 

作業プロセス

要件の理解と整理

まず最初にやったのは、渡された要件を丁寧に読み込み、どの部分があえて曖昧にされているのかを整理することでした。

具体的には、以下の点について自分なりの前提を決めて進めました。

  • 「今日やること」 の定義:
    「期限が今日のタスク」だけでなく、「期限が未設定だが今日中に片付けたいタスク」も含める。

  • 完了タスクの扱い:
    一覧から完全に削除するのではなく、打ち消し線で残し、誤操作を防ぎつつUndo機能で戻せるようにする。

  • データの保存方法:
    高速な操作レスポンスを優先し、LocalStorageを使用してブラウザ内で永続化する。

  • UI構成:
    1ページ完結型で、上部に追加フォーム、下部にタスク一覧を配置するシンプルな構成を想定。

また、今回のKiroへの指示はすべて英語で行いました。
英語の方が自分の考えをより正確に表現できるし、インターネットで見つけた「AIに単に同意させず、対話的に批判してもらうためのプロンプト(いわゆる“intellectual sparring partner”スタイル)」を参考にしました。
この設定を最初に明示することで、Kiroが単に「はい、わかりました」と従うのではなく、曖昧な要件を自ら指摘し、より深い議論をしてくれると感じています。

運営への質問事項

今回は、運営への質問は行いませんでした。
理由としては、イベント当日に参加することができず、週末に個人で進めていたためです。

 

Specs定義

要件を整理した上で、スペック駆動開発の第一歩として、Kiroに要件定義を依頼しました。

指示に至るまでの思考プロセス

AIを「指示を実行するだけのツール」ではなく、議論してくれるパートナーとして扱うため、冒頭で「Sparring Partnerモード」を設定し、曖昧な点には反論、質問、代替案を出すよう指定しました。プロンプトはすべて英語で、より正確に意図を伝えられるようにしました。

Kiroへの指示


 

Kiroの出力

  • requirements.md

 

  • design.md

 

  • tasks.md

出力の判定と修正

Kiroの出力を確認し、期待通りか、修正が必要かを判断しました。

判定結果

最初のspecの定義時に、要件定義について少し調整する必要はありましたが、問題なし。

 

良かった点

  • 今日やること」定義やUndo仕様など、曖昧な部分を自動的に質問、整理してくれました。
  • テストケース、テストコードの実装、修正、Playwrightでの実施まで無事にやってくれました。

問題点

  • 一部の文体が冗長で、要件書として不要な説明が多かったと感じています。
  • コードの内容は把握していない、エラーが発生したら自分で理解するまでには手間がかかります。

Kiroとの対話

Kiroとのやり取りでは、曖昧な前提を1つずつ確認しながら仕様を整理しました。
特に「Today」ビューや完了タスクの扱いなど、細かい設計判断で良い議論ができました。

  • 「Today」ビュー:
    単一リストにして、今日のタスクを上部で強調表示(切替なし)。

  • Assignee:
    単なるラベル扱い(マルチユーザー機能なし)。

  • ソート設定:
    LocalStorageに保存して永続化。

  • 完了タスクとUndo:
    自動非表示はやめ、手動の非表示トグル + 10秒トーストUndoに統一。

これらを最終決定として、requirements.md、 design.md、tasks.md生成を依頼しました。

テスト実装

Fast-checkでのプロパティテスト(26件)と、PlaywrightでのE2Eテスト(約25件)を組み合わせ、UIとロジックの両面から安定性を確認しました。

主な流れは以下の通りです:

  • 実装構成:React + TypeScript + Tailwind + Playwright + Vitest

  • ドメインロジック:タスク生成、検証、Undo、LocalStorage永続化

  • UI機能:日本語対応フォーム、今日のタスク強調、Hide Completedトグル、レスポンシブ対応

  • テスト範囲

    • プロパティテスト:一意ID生成、日付検証、Undo復元、フィルタ動作など

    • E2Eテスト:CRUD操作、ソート、Undo、バリデーション、アクセシビリティ、レスポンシブ

  • 最終結果:全テスト成功。1000件規模のタスクでもパフォーマンス良好。

 

成果物


412dac14fdc23902bc116abd68314cac

所要時間

約3時間

主な機能

  • タスクの追加・編集・削除・完了切替

  • Hide Completedトグル機能(非表示)

  • 今日のタスクを自動的に上位表示

  • Undo(10秒トースト通知付き)

工夫点など

  • 一部のAI出力が冗長で、仕様として不要な説明が多く、取捨選択に時間がかかりました。
  • コードの動作を完全に理解するために、テストやデバッグを繰り返す必要がありました。

 

発見と学び

  • AIを任せて、この程度のクオリティのアプリがそのままデプロイできるのは勉強になりました。
  • ただ、AIの出力をそのまま使うのではなく、自分の考えの重要性を感じました。

 

感想

良かった点

  • 要件定義からテストまでの流れをKiroと一緒に体験ができました。
  • AIとの対話を通じて、自分の考えを言語化する練習になりました。

苦労した点

  • 出力内容の意図を正確に読み取るのに時間がかかりました。

今後に活かせること

  • AIを設計の早い段階から使うことで、ドキュメント作成やテスト設計を効率化できると感じました。

  • チーム開発では、AIをレビューやテスト支援に使うことで、品質とスピードを両立できそうです。

  • また、コードの理解を深めたり、その内容を他のメンバーにわかりやすく伝えるのにも役立つと感じました。

 

この記事が、少しでもみなさんのにお役に立てば幸いです。

ここまでお読みいただき、ありがとうございました!

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
Damar Hadisumarto
インドネシアから来日し、東洋大学情報連携学科最優等で卒業し、最優秀卒業論文賞を受賞しました。元々プログラミングとイノベーションに興味をもち、大学時代に、チームと一緒に2020 Infinity Blockathon国際大会と2020三菱FUSO Case Challengeを優勝しました。趣味はスポーツ、特に野球。高校時代にインドネシア代表としてアメリカのU-18 CWS野球大会に参加しました。教育にも興味をもち、2022年にIEEE Education SocietyのIEEE EDUCONに”A Tangible-Tool-Based Lesson Plan on Cypher Key Exchange Protocol for Early-Stage Learners”の大学卒業論文を出版しました。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ