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

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

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

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

 

自己紹介

クラウド開発事業部所属の maimai です。
普段は 既存システムの保守・開発・テストを行いながら開発チームをリードする役割しています。エンジニア歴は 25年で、今は主に PHP を使った開発をしています。とはいえ、最近はコーディングより説明資料を書いている時間のほうが長かったりします。

趣味は音楽で、歌を歌ったりフルートを吹いたりしています。これから春までは発表会やステージが続いていて、練習と体調管理に気をつけています!

最近「鼻うがい」をはじめました。鼻やのどの乾燥が気になるときにやると、すっきりしますよ。風邪をひきかけても悪化しにくいような気がします(個人の感想です)。

 

普段使ってるAIツール

日常的に以下のAIツールを活用しています。といっても他のメンバーよりは使ってないかも。

  • GitHub Copilot: VSCodeと連動していて使いやすいので。コードを書くときの確認とかに使ってます。今回のルールみたいな使い方ではなくて、コードの書き方に迷った時のサポートとかコードレビューとかに使ってます。
  • Amazon Q Developer CLI: コードに関係なくてもちょっと相談したいこととか調べたいことがあるときに使ってます。スケジュール感の参考にしたりするときも。(最近Kiro CLIになりました)

 

企画概要とゴール

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

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

 

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

 

作業プロセス

要件の理解と整理

  • AWSにデプロイするWebアプリケーション
  • タスクの追加、編集、削除、一覧表示ができる
  • ログイン機能は不要
  • 1ページで完結する

などなど書かれていることは満たす必要があります。ただ、文章の行間の解釈はさまざまなので、確認は必要そうです。

「ログイン機能は不要」とあるので、第一印象ではあくまで個人で使う想定なのかな?と考えました。であれば、URLで識別して複数ユーザーで使い分けることもできそうです。

でも業務の一環として使うなら(ふつうは)複数ユーザーで管理したいよな…。佐藤さんの要求がとにかくフワッとしているので、この辺は確認していく必要がありそうです。

運営への質問事項

「ログイン機能は不要」というところが気になり、いくつか質問しました。

  1. 個人で利用する前提? → No.(複数の社員で使いたい)
  2. URLで個人を振り分けるのはあり? →なし(タスクの一覧を社員で共有したい)→この時点で、当初の私の想定と違っていたことがわかりました。質問してよかった。
  3. タスクを入力した人以外が「完了」してもいいの?→ほんとはよくないけど、ID/PWを管理したくないからログインが面倒。→ログイン以外の方法で、手間を取らせずにユーザーを識別できればより良いものができそう?と思いました。

ここまでを踏まえて、Kiroとやりとりして対策を考えました。こんな感じで聞いてみます。

複数案が出されたのですが、使い勝手やセキュリティ面を考慮して、

こんな方向性はどうかなと結論を出しました。

それを踏まえて、運営にもうちょっと聞こうかなと思ったら…、佐藤さんが退勤してしまいました。(あるある!)

ということなので、最終確認はあきらめて、ログインなしで個人が特定できる方向で要件追加していくことにしました。

 

Specs定義

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

 

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

最初は自分で整理した仕様をKiroに入力しようとしましたが、収集つかなくなりそうに。途中で軌道修正しました。

まず佐藤さんの提示要件をそのままインプットして、補足が必要なものを追加していくことにしました。

 

Kiroへの指示

requirements.md の完成までには以下の入力をしました。何度か方針を修正しました。まずは最初に提示された要件をそのまま。

運営側と調整した内容を追加しました。

「完了したタスクを元に戻す機能も追加したい。」というのは後出しの要件でした。要件の追加、よくありますね。

これは明示的な要件ではないですが、今後の運用を楽にするためにはやっておきたいので追加しておきました。(本来は非機能要件として確認の上で追加すべきでしょうね)のちにこれに苦しめられるとは…。(AWSへのデプロイにすごい時間がかかってしまった)

最後に、ずっと引っかかっていた「ログイン機能は不要」について。

としました。(運営側と合意までいかなかったですが。こちらも本来は合意してから追加すべきですよね。あとからひと悶着ありそう)

 

Kiroの出力

  • requirements.md

 

  • design.md

 

  • tasks.md

 

出力の判定と修正

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

 

判定結果

今回は問題なしとしました。

 

良かった点

非機能的なところや、品質面も考慮して仕様を組み立てていくところは、キャリアの有無にかかわらず一定の品質を保てるのかもしれないと思います。

問題点

tasks.mdのチェックは大変ですね。今回はざっくり見るだけにしてしまいました。

本来はじっくりレビューすべきなのでしょうが、この辺も容易にできるのか。他のメンバーがどうやっているのか気になります。

 

Kiroとの対話

前述のとおり、requirements.md の完成まではなんどかやり取りをしました。

design.md の「今後の拡張性」については、以下の観点を追加しました。

運営との確認で「将来的には認証も考えている」と言っていたのでそれを踏まえて追加してます。

tasks.md については、最初の出力のままです。

 

テスト実装

KiroにPlaywright で実施したテスト内容を出力させました。ファイル出力させておくと後から参照もできるので便利でした。

 

 

成果物

最初にURLにアクセスすると、ユーザー名を求められます。

 

タスクの入力、一覧ができます。

 

佐藤さん(タスクを入力していない人)からはこんな感じに見えます。

WebUIを見たのはここが初です。実際の開発ではこんな経験はないです…。

入力画面が左ペインになっているなあ。最初提示された要件では上ペインじゃなかったっけ?

あと動作もちょっと微妙なところがありました。やっぱり要件が指定しきれていなかったか。担当者は最初に入れた名前と当然連動すべきでしたよね。(今回は時間切れです)

 

所要時間

すごく時間かかりました。自分でもびっくり。他のメンバーよりかなり長いんじゃないかな。

  • tasks.mdが完成するまでに2.5時間
  • taskの実行に3時間くらい。(これはクライアントPCの性能か?)
  • KiroにAWSへのデプロイを依頼して、デプロイして正常動作を確認できるまですごい時間がかかりました。4時間くらい。(問題がループしている状態に陥っていた)

 

主な機能

Kiroに整理してもらいました。

  • ログイン不要: Browser IDとニックネームで簡単にアクセス
  • 共有タスクリスト: 複数ユーザーで同じリストを閲覧
  • 所有権ベースの編集: 自分が作成したタスクのみ編集可能
  • 完全サーバーレス: AWS Lambda、DynamoDB、CloudFrontで構築
  • 包括的なテスト: ユニット、プロパティベース、E2Eテスト
  • 自動デプロイ: テスト失敗時はデプロイ中止

工夫点など

Kiroに整理してもらいました。私が指示したものとしていないものが混在しています。具体的には認証なしのユーザー識別システム、Infrastructure as Code は明示的に指示した内容です。

  • サーバーレスアーキテクチャの採用
    • インフラ管理不要、自動スケーリング、コスト効率UP
  • 認証なしのユーザー識別システム(Browser ID)
    • ユーザー認証はしないけど、他の人にタスク操作させないようにした
    • 将来的にはユーザー認証を追加するかも
  • パフォーマンス最適化(楽観的UI更新、HTTPリトライ、CDN配信)
  • エラーハンドリングの多層化
  • プロパティベーステスト(fast-check)の活用
  • Infrastructure as Code(AWS CDK)
  • 技術的なチャレンジと解決策
    • Lambda関数のコールドスタート
    • DynamoDBのデータモデリング
    • CORS設定
    • ローカル開発環境の整備
  • コード品質の工夫
    • TypeScriptの型安全性
    • コメントとドキュメントの整備

 

発見と学び

つらつらと書きました。

  • 詳細を理解しないままだと、単にCreditを超消費するだけな気がする。Creditの有効活用ってどうやるのがいいのか?(お金は大事ですよね)
  • よくわからない技術要素でも実装できちゃう。これは新しい技術要素を取り入れるチャレンジできるという反面、操作している人間がよくわからないことが実装できちゃう怖さもありますね。
  • フロントエンドのUIデザインについてはほとんどやり取りしていないけど、これでいいのか?見た目を変更したいときはどの段階でチェックして修正していくのがいいんだろうか?(実際顧客とやり取りすると、見た目のUIデザインに対する指摘って結構あると思うのですが…日本的すぎる?)
  • AWSにデプロイして正常動作を確認できるまですごい時間がかかってしまった。同じような問題を繰り返している状態だったので、なんか根本的にやり方が間違っていたような気がします。自分でコード書けないのつらい。
  • Kiroが修正しようとしていることを適宜理解して適切にフィードバックする能力が必要ですね。人間相手と同じだなあという印象。苦労することには変わらない。

 

感想

良かった点

Spec駆動というワードは聞いたことがあったので、実際試せたのはよかったです。requirements.mdとdesign.mdについては短時間でこれだけのものが作れるというのは効率UPだと感じました。

苦労した点

一方で、Kiroの出力が妥当かどうかを判定するためのスキル(アウトプットを読み解く能力、矛盾などがないかなど)が必要と感じました。特にtasks.mdについては、内容の妥当性をどうやって判定するのがいいのか正解が見つかりませんでした。

今回は時間の都合上ほとんどチェックできていないですが、実務上で使うとなるとAIに丸投げすることになるのでAIとの付き合い方としてそれはよくないですよね。あくまで人間がコントロールしないと…。「AIが間違えました。すみません」は通用しないですよね。

 

今後に活かせること

今回やったことをすべて今の業務に割り当てていく、というのは難しくても、要件を整理するときとかのサポートとしてこれらのステップを利用していくのはアリだなと思います。特に要件が曖昧なときとか。

 

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

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

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

Twitter で
The following two tabs change content below.
maimai
エンジニア
エンジニア歴は約20年。 主な開発(言語)遍歴: Cのサーバ系アプリ開発を少々 →Javaサーバ系アプリ開発をがっつり →C#のWindowsアプリをがっつり →ここ数年はいろんな言語、いろんな環境をちょこちょこと。 最近はコードを書かないお仕事もいろいろ。

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

採用情報
ページトップへ