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

フルAI開発バトル参加レポート

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

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

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

自己紹介

クラウド開発事業部所属のmatsuraです。
普段は 受託開発案件のPJリーダーやSylphinaのテックリードを担当しています。エンジニア歴は 4年で、主に AWS/Amazon Connect/Reactを使った開発をしています。

普段使ってるAIツール

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

  • Cursor
  • Chat GPT Pro

Chat GPT Proはかなり調査系タスクで役に立ちます。

参照したURLを必ず表示してくれるのでハルシネーションリスクも初期のAIよりも減り責任あるAIとしての姿を感じます。

Cursorに関してはKiroよりも先発の古いAIエディタではあるのですが、使い勝手がよく重宝してました。

Claude Codeに乗り換えようとしていたんですがあまりコードを書く機会が減ってしまったためそのまま今まで来ました・・・・・・AIはまだまだ黎明期なのかどんどん新しいのが出てきますね

企画概要とゴール

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

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

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

作業プロセス

要件の理解と整理

まずは要件を整理します。
方向性としてはシンプルなToDoアプリを作れば良いということがわかったので、ミニマムに作ろうと思いました。

運営への質問事項

Vive コーディングの経験もあったので私の今のAI駆動開発の実力を試すいい機会だと思い運営へは質問しませんでした。

Specs定義

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

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

私はまず、上記のお題と必須要件をプロンプトに記載した後最後に

「曖昧な要件だと思うので私に判断を仰ぎたい部分は必ず私に質問してください」

という一文を付け加えました。

これまでのViveコーディングの経験上曖昧な要件でもコーディングしてくれることはわかっていたのですが、判断できない部分も何となくこうだろうで突き進んでしまうため手戻りが生じる場合もありました。

なのでこのようなAIが判断できないことを私に質問させることでより私の頭の中の通り実装してくれるのでこの質問させるという手法は Vive コーディングをする上で必須テクニックだと思ってます。

Kiroへの指示

その後Kiroはいくつかの技術選択、アプリのUI/UXに関していくつかの質問をした後以下の出力を返しました

Kiroの出力

  • requirements.md

 

  • design.md

 

  • tasks.md

出力の判定と修正

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

判定結果

問題なし

良かった点

  • 要件を整理した上で適切な技術選択の質問をしてくれた点
  • requirements.md、design.md、tasks.mdの3つのドキュメントが体系的に整理されていた点
  • 曖昧な部分について的確な質問を返してくれた点
  • スペック駆動開発のアプローチが期待通り実行された点

問題点

  • Amplifyでホスティングする予定だったが、gitのブランチ作成とAmplifyとの紐付けタスクが抜けていることを見逃していた点
  • そのため、デプロイ前にgitへのプッシュとAmplify環境作成を割り込みタスクとして実行する必要があった点
  • Amplifyのビルド時に複数回エラーが発生し、その都度ビルドエラーログをAIに渡して対応する必要があった点

Kiroとの対話

tailwind CSSを使ってみたのですが、最初tailwind CSSの適用がされておらず、白黒ののっぺりとした画面となってしまいました。
そのため、tailwind CSSが効いてないことをAIに伝えるとAIがそのまま試行錯誤し解決しました。
Vive コーディングではAIが自分でエラーを確認し試行錯誤してくれるので大変便利ですよね。

テスト実装

Playwright MCPを活用して、アプリケーションの品質を保証するための包括的なE2Eテストを実装しました。テストは機能ごとに4つのファイルに分類し、合計20以上のテストケースをカバーしています。

1. 基本操作テスト

CRUD操作の基本機能を検証するテストです。

  • タスク追加機能: 空の状態からタスクを追加し、リストに正しく表示されることを確認
  • タスク編集機能: 編集モーダルを開き、タイトル・担当者・優先度などを変更して保存、変更が反映されることを確認
  • タスク削除機能: 削除ボタンをクリックし、確認ダイアログを経てタスクがリストから消えることを確認
  • 完了チェック機能: チェックボックスをクリックしてタスクが完了状態になり、打ち消し線が適用されることを確認

2. データ永続化テスト

LocalStorageを使ったデータ保持機能を検証するテストです。

  • リロード後のデータ保持: タスクを追加後にページをリロードし、データが保持されていることを確認
  • LocalStorageへの保存: タスク追加時にLocalStorageに正しい形式でデータが保存されることを確認
  • 複合操作の整合性: 複数タスクの追加・編集・削除を行った後、リロードしてもデータの整合性が保たれることを確認
  • 完了状態の永続化: 完了チェックの状態がリロード後も保持されることを確認

3. ソート機能テスト

テーブルの各列でのソート機能を検証するテストです。

  • タイトルソート: タイトル列をクリックして昇順・降順にソートされることを確認
  • 担当者ソート: 担当者列をクリックして正しくソートされることを確認
  • 期限ソート: 期限列をクリックして日付順にソートされることを確認
  • 優先度ソート: 優先度列をクリックして低・中・高の順にソートされることを確認
  • ステータスソート: ステータス列でのソート機能を確認
  • ソート方向の反転: 同じ列を2回クリックすると昇順・降順が切り替わることを確認

4. バリデーション・エッジケーステスト

入力検証やエッジケースを検証するテストです。

  • 空タイトルの拒否: タイトルが空の状態で追加しようとするとエラーメッセージが表示されることを確認
  • 空白文字のみの拒否: 空白文字のみのタイトルも拒否されることを確認
  • 編集時のバリデーション: 編集時にタイトルを空にしようとするとエラーが表示されることを確認
  • フォームのクリア: タスク追加後にフォームが自動的にクリアされることを確認
  • 空状態の表示: タスクがない場合に適切なメッセージとアイコンが表示されることを確認
  • 削除のキャンセル: 削除確認ダイアログでキャンセルするとタスクが保持されることを確認
  • 編集のキャンセル: 編集モーダルでキャンセルすると変更が破棄されることを確認
  • Escapeキーでの操作: Escapeキーでモーダルやダイアログを閉じられることを確認

テスト実行結果

全てのテストが正常にパスし、アプリケーションの品質が保証されました。Playwright MCPのおかげで、実際のブラウザ操作を通じた現実的なテストを効率的に実装できました。

 

成果物

実際に作ったアプリのデモ動画はこちらです。

所要時間

2時間

主な機能

  • タスク管理機能: タイトル、担当者、期限を含むタスクの追加・編集・削除
  • 一覧表示機能: 登録されたタスクを見やすい形で一覧表示
  • フォーム入力機能: 画面上部のフォームからタスクを簡単に追加
  • 操作ボタン機能: 各タスク行に編集・削除ボタンを配置し直感的な操作を実現
  • データ永続化機能: ローカルストレージを活用してブラウザを閉じてもデータを保持
  • レスポンシブデザイン: モバイル・デスクトップ両対応の軽量なUI
  • E2Eテスト機能: Playwright MCPを使用したCRUD操作の自動テスト

工夫点など

  • ユーザビリティを重視したUI設計: TailwindCSSを活用して、直感的で使いやすいインターフェースを実現。タスクの追加フォームを画面上部に固定配置し、編集・削除ボタンを各行に配置することで操作対象を明確化
  • データ永続化の実装: ローカルストレージを活用してブラウザを閉じてもデータが保持される仕組みを実装。サーバーサイドの複雑な実装なしに実用的なデータ保持機能を実現
  • レスポンシブ対応: TailwindCSSのレスポンシブクラスを活用し、モバイルとデスクトップ両方で快適に使用可能。画面サイズに応じてレイアウトが最適化され、どのデバイスからでもサクサク操作可能
  • 包括的なE2Eテスト: Playwright MCPを使用してCRUD操作の全てをカバーするE2Eテストを実装。タスクの追加、編集、削除、一覧表示の各機能が正常に動作することを自動テストで保証
  • シンプルな技術スタック: React + TailwindCSS + ローカルストレージという最小限の技術スタックを選択。複雑な依存関係を避けることで軽量で高速なアプリケーションを実現し、メンテナンス性も向上

発見と学び

AIとの対話で得られた発見

今回のフルAI開発バトルを通じて、いくつかの重要な発見がありました。

1. 質問させることの重要性

「曖昧な要件だと思うので私に判断を仰ぎたい部分は必ず私に質問してください」という一文を加えることで、AIが勝手に判断して進むのではなく、適切なタイミングで確認を求めてくれるようになりました。これにより手戻りを大幅に削減できました。

2. スペック駆動開発の効果

要件定義→設計→タスク分解の順序で進めることで、開発全体の見通しが良くなり、AIも迷わずに実装を進められました。特にrequirements.mddesign.mdtasks.mdの3つのドキュメントを最初に作成したことで、後の開発がスムーズに進みました。

3. エラー対応におけるAIの自己解決能力

TailwindCSSが適用されない問題やAmplifyのビルドエラーなど、技術的な問題が発生した際、AIが自分でエラーログを分析し、試行錯誤して解決してくれました。人間はエラーの発生を伝えるだけで、具体的な解決策を考える必要がありませんでした。

4. Playwright MCPの威力

E2Eテストの実装において、Playwright MCPを使うことで、実際のブラウザ操作を通じたテストが簡単に実装できました。AIがテストコードを書き、実際に動作確認まで行ってくれるため、品質保証の面でも安心できました。

実務で活用できるTips

プロンプト設計のコツ

  • 「質問してください」を明示的に指示する
  • 日本語での質問を求める(理解しやすさのため)
  • 要件の曖昧さを事前に伝える

開発フローの最適化

  • スペック駆動開発を徹底する
  • ドキュメント作成→実装の順序を守る
  • エラーログは必ずAIに共有する

技術選択の判断基準

  • AIが得意な技術スタックを選ぶ(React、TailwindCSS等)
  • デプロイまで含めた全体設計を最初に決める
  • テスト実装も開発計画に含める

感想

良かった点

今回のフルAI開発バトルに参加して、本当に多くの収穫がありました。

まず、AIとの協働開発スキルが大幅に向上したことが最大の成果です。これまでもCursorやChatGPT Proを使っていましたが、「AIに質問させる」「スペック駆動で進める」といった具体的な手法を身につけることで、AIをより効果的に活用できるようになりました。

また、短時間での開発力が証明できたことも大きな自信につながりました。2時間で要件定義からデプロイまで完了できたのは、AIとの協働があってこそです。これは実務でのプロトタイプ開発や概念実証において非常に有用なスキルだと感じています。

新しい技術への挑戦ができたことも良かった点です。Playwright MCPは今回初めて使いましたが、AIのサポートがあることで学習コストを大幅に削減しながら実用的なE2Eテストを実装できました。

そして何より、AIの可能性を肌で感じられたことが印象的でした。エラー対応での自己解決能力や、曖昧な要件に対する適切な質問など、AIが単なるコード生成ツールを超えて、開発パートナーとして機能することを実感できました。

苦労した点

一方で、いくつかの苦労した点や課題も見えてきました。

AIの判断に依存するリスクが最も大きな課題でした。AIが「これで良いだろう」と判断して進めた部分で、後から「実はこうしたかった」という齟齬が生じることがありました。特にUI/UXの細かい部分では、人間の感覚とAIの判断にギャップを感じる場面がありました。

デバッグ時の情報共有の難しさも課題でした。エラーログをAIに渡すのは簡単ですが、「なんとなく動作が重い」「UIの見た目が微妙」といった感覚的な問題を言語化してAIに伝えるのは思った以上に難しく、時間がかかりました。

最終的な品質の担保についても課題を感じました。AIが作成したコードやテストが本当に要件を満たしているか、セキュリティ面で問題がないかなど、最終的な品質判断は人間が行う必要があり、その責任の重さを改めて実感しました。

今後に活かせること

今回の経験を通じて、実務で活かせる具体的なポイントが明確になりました。

プロトタイプ開発の高速化では、新機能の検証や顧客への提案資料作成時に、今回の手法を活用することで開発時間を大幅に短縮できると考えています。特に「要件が曖昧な段階でもAIに質問させながら進める」アプローチは、顧客との要件すり合わせにも有効だと感じました。

チーム開発での活用においては、ジュニアエンジニアの教育やコードレビューの効率化に応用できそうです。AIとの対話ログを共有することで、思考プロセスや技術選択の理由を可視化でき、チーム全体のスキル向上につながると期待しています。

品質保証プロセスの改善では、Playwright MCPを使ったE2Eテストの自動生成を既存プロジェクトにも導入したいと考えています。テストケースの網羅性向上と、回帰テストの自動化により、リリース品質の向上が期待できます。

技術調査・学習の効率化も大きなメリットです。新しい技術やライブラリを導入する際、AIと対話しながら実際に動くサンプルを作成することで、ドキュメントを読むだけでは得られない実践的な知見を短時間で獲得できます。

最後に、顧客とのコミュニケーション改善にも活用できると感じています。要件の曖昧な部分をAIに質問させることで、顧客への確認事項を整理し、より具体的で建設的な議論ができるようになると期待しています。


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

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

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

Twitter で

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

採用情報
ページトップへ