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

こんにちは。エンジニアの平田です。

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

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

 

自己紹介

クラウド開発事業部所属の平田です。
普段はGitHubへのソース移行を担当しています。エンジニア歴は7ヶ月で、まだがっつり開発に取り組んでいません!

普段使ってるAIツール

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

  • ChatGPT: 古くから使っており、文章作成や調べものに幅広く活用しているため、安心して頼れる友達のような存在です。
  • Gemini: 毎日利用しており、情報整理やアイデア出しが得意で効率的に作業を進められるため重宝しています。

企画概要とゴール

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

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

 

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

作業プロセス

要件の理解と整理

まず要件を丁寧に読み込むことです。曖昧なところもあるが一旦は無視して進めてみました!

運営への質問事項

作業を進める中で要件や仕様について特に疑問や不明点は浮かばなかったため、質問なしで進めることができました。

Specs定義

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

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

まずは自分で編集せず、時間重視でそのままの文章を提示した。そして、Kiroの反応に間違いがないか確認し、了承を出しました。

Kiroへの指示

Kiroの出力

  • requirements.md

  • design.md

  • tasks.md

出力の判定と修正

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

判定結果

  1. テスト失敗の詳細
    • 問題1: 編集機能のテスト失敗(9テスト)
      • 問題1: 編集機能のテスト失敗(9テスト
      • 原因: イベントリスナーとボタン参照の問題
    • 問題2: バリデーション機能のテスト失敗(18テスト)
      • エラー内容: エラーメッセージが表示されない
      • 原因: HTMLのrequired属性がブラウザネイティブバリデーションを発動
  2. 私の指示
    • 「npx playwright testでerrorが出ています」
    • エラーログの提供
    • 段階的な修正の承認
  3. 実施した修正
    • 修正1: app.jsの編集機能修正
    • 修正2: index.htmlのrequired属性削除

良かった点

  • このような経験は初めてだったためプロンプトを投げるだけでどんどん修正されていく様子は観ていて爽快でした。
  • 完了した後に未完了に戻すボタンがあること

問題点

  • ローカルストレージ箇所が上手く行かず、時間を要してしまった…

Kiroとの対話

1.追加要件があったため

プロンプト:

2.1で間違えた要件を伝えてしまったため

プロンプト:

テスト実装

Playwright で実施したテスト内容です。

1. タスク追加機能(task-add.spec.js)

  • フォームに入力してタスクを追加できる
  • Enterキーでタスクを追加できる
  • 複数のタスクを追加できる
  • タスク追加後にフォームがクリアされる
  • タスクに操作ボタン(完了・編集・削除)が表示される

2. タスク編集機能(task-edit.spec.js)

  • 編集ボタンをクリックしてタスクを編集できる
  • 編集時にボタンが「更新」に変わり、保存後に「追加」に戻る
  • 編集後にフォームがクリアされる
  • 編集内容がLocal Storageに保存される
  • 複数のタスクから特定のタスクを編集できる

3. タスク削除機能(task-delete.spec.js)

  • 削除ボタンをクリックしてタスクを削除できる
  • 削除後にLocal Storageからも削除される
  • 複数のタスクから特定のタスクを削除できる
  • 削除後に残りのタスクの順序が維持される
  • 全てのタスクを削除できる

4. タスク完了機能(task-complete.spec.js)

  • 完了ボタンをクリックしてタスクを完了状態にできる
  • 完了タスクに視覚的な完了表示(取り消し線)が適用される
  • 完了ボタンを再度クリックして未完了状態に戻せる
  • 完了ボタンのラベルが状態に応じて変わる(「完了」⇔「未完了に戻す」)
  • 複数のタスクの完了状態を個別に管理できる
  • 完了状態の切り替えが往復できる(トグル動作)

5. バリデーション機能(task-validation.spec.js)

  • 空のタイトルでタスクを追加しようとするとエラーメッセージが表示される
  • 空白のみのタイトルでタスクを追加しようとするとエラーメッセージが表示される
  • エラーメッセージは3秒後に自動的に消える
  • 編集時に空のタイトルで保存しようとするとエラーメッセージが表示される
  • 編集時に空白のみのタイトルで保存しようとするとエラーメッセージが表示される
  • バリデーションエラー後に有効なタイトルでタスクを追加できる
  • 担当者と期限は空でもタスクを追加できる
  • 複数回バリデーションエラーが発生してもアプリケーションが正常に動作する

6. データ永続化機能(task-persistence.spec.js)

  • タスクを追加してページをリロードしても保持される
  • タスクを完了状態にしてページをリロードしても完了状態が保持される
  • 複数のタスクと完了状態がページリロード後も保持される
  • タスクの編集内容がページリロード後も保持される
  • タスクの削除がページリロード後も反映される
  • Local Storageに正しい形式でデータが保存される
  • 空のタスクリストもページリロード後に保持される

テスト環境:

  • ブラウザ: Chromium、Firefox、WebKit(Safari)
  • 合計105テスト(各ブラウザで35テスト × 3ブラウザ)

成果物

所要時間

2時間30分

主な機能

  • タスクの追加: 画面上部のフォームからタイトル、担当者、期限を入力してタスクを作成
  • タスクの編集: 各タスク行の編集ボタンから内容を変更
  • タスクの削除: 各タスク行の削除ボタンからタスクを削除
  • タスクの一覧表示: 登録されたタスクをタイトル、担当者、期限とともに表示完了管理機能
  • タスクの完了マーク: 完了ボタンをクリックしてタスクを完了済みにする
  • 完了の取り消し: 完了済みタスクの完了ボタンを再度クリックして未完了に戻す
  • 視覚的な完了表示: 完了済みタスクには取り消し線などの視覚的な表示を適用データ管理機能
  • 自動保存: タスクの追加、編集、削除、完了状態の変更を即座にLocal Storageに保存
  • データ永続化: ブラウザを閉じても、再起動時に全てのタスクと完了状態を復元操作性
  • 単一ページ: 全ての機能が1ページで完結、ページ遷移なし
  • 入力バリデーション: 空のタイトルでの追加・保存を防止
  • 直感的なUI: 各操作ボタンが明確に識別可能技術仕様
  • ログイン不要: 認証なしで即座に使用可能
  • 軽量実装: フレームワーク不要のVanilla JavaScript
  • レスポンシブデザイン: デスクトップとモバイルに対応

工夫点など

  • 完了したタスクに取り消し線を表示して、自動保存機能でブラウザを閉じてもデータが消えないようにしました。
  • データ保存に失敗したときに元の状態に戻すロールバック処理と、XSS攻撃を防ぐためのエスケープ処理を実装しました。
  • メモリを節約し、変更があったときだけLocal Storageに保存するようにしました。

発見と学び

非エンジニアでのコードを書ける時代だと言われているのは知っていたが、ここまでボタン一つでコーディングできるとはとても驚きました。

感想

良かった点

このような経験は初めてだったためプロンプトを投げるだけでどんどん修正されていく様子は観ていて爽快でした。

苦労した点

エンジニア歴が短いのもあり、どのような修正を行っているのか理解が追いつかなかったです。

今後に活かせること

私の今の実務では既存コードを理解するサポート的な位置づけとして役立てようと思いました。

 

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

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

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

Twitter で

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

採用情報
ページトップへ