概要
- みなさん、こんにちは! アイレット エンタープライズクラウド事業部(EC事業部)の新川です。今回2025/7/6(日)~7/12(土)の日程で 、EC事業部初のワーケーションを行いました。
- ワーケーション実現までの企画裏側、ワーケーション期間中のレポートの第1弾は、以下のブログで公開しております。合わせてお読みください。
▼【ワーケーション日記】EC事業部が北海道で試す、新しい働き方のカタチ
https://iret.media/159412
▼【ワーケーション日記】札幌の地で生まれた新たなシナジー!KAGオフィスで開発&LT会
https://iret.media/159835 - 本記事では、ワーケーション実施レポートの第2弾として、 ついにワーケーションのメインテーマであるアプリ開発について詳しくご紹介します。
「ウィッシュモン」アプリ開発物語
アプリ開発の概要
- 今回のワーケーションでは、私たちにとって、これまでにないチャレンジングな企画を実施しました。それは、「5日間という限られた期間で、企画からリリースまで、AIの力を最大限に活用して一つのWebアプリケーションを作り上げる」というものです。
- EC事業部のインフラセクションとアプリセクションのメンバーが合同でチームを組み、要件定義、設計、デザイン、コーディング、インフラ構築の全工程をAIと協業して行う、まさに新しい開発スタイルに挑戦しました!本記事では、そのアプリ開発の全貌と、AIとの協業で得られたリアルな学びをお届けします。
- アプリ開発の前提
- 期間:5日間
- 体制:インフラエンジニアとアプリケーションエンジニア x5名による共同チーム
- 手法:要件定義、設計、デザイン、バックエンド/フロントエンドのコーディング、インフラ構築まで、すべての工程で生成AIを活用する。
- アプリの説明
- タイトル:ウィッシュリストモンスター(ウィッシュモン)
- コンセプト:日々のタスク・夢や目標のリスト管理(ウィッシュリスト)と、モンスターの育成要素を組み合わせたWebアプリケーションです。 ユーザーはタスクを完了させることで、自分が選んだアニメ風のモンスターを育てることができます。 楽しみながらタスク達成と自己成長を行うことを目的としています。
- 主な機能:
- ウィッシュリスト管理:「ビジネス」「自己研鑽」「趣味」「大きな夢」「小さな夢」といったカテゴリ別にタスクを作成できます。各タスクには期限や難易度も設定可能です。
- モンスター育成:タスクを完了すると経験値を獲得し、モンスターが成長します。完了したタスクのカテゴリによって、モンスターの「HP」「攻撃力」といった各ステータスの伸び方が変わるのが特徴です。
- 進化:モンスターは特定のレベルに到達すると「進化」し、見た目がより強力に変化します。
- (ご参考)今回実現できませんでしたが、将来的にはフレンド機能や対戦機能も構想していました。
アプリの開発物語
- AIと対話しながら要件定義・設計書の作成
- プロジェクトの初期段階では、Gemini が要件定義や設計書といったドキュメント作成で大活躍しました。 Gemini にヒアリングをしてもらい、こちらの意図を汲み取りアイディアが構造化される。私たちが要件を再確認し、修正を依頼する。このような流れであっという間に要件定義や設計が進み、1日目で仕様を決める必要があった私たちにとって、アプリ開発の優秀なプランナーのような存在でした。
- コーディング段階では、GitHub Copilot を初めて取り入れました。 IDEと完全に統合され、設計書を理解して次々と的確なコードを作成してくれます。行き詰まった部分を質問すると、解決策を具体的なコードで示してくれるため、まさに腕利きのペアプログラマーでした。
- 今回、私たちが特に驚いたのは、AIが、明確な指示なしにAWSのベストプラクティスであるシングルテーブルデザイン(関連データを1つのテーブルにまとめパフォーマンスを向上させる手法)でDynamoDBを設計してきた点です。これにはチーム全員が感心しました!
- 以下は、Gemini と共に行った要件定義のプロンプトの様子です。
- Gemini からのヒアリングによって、要件定義を詰めていきます。
- 以下は、AIと共にコーディングしている開発の様子です。
- 要件定義・設計はGemini、実装はCopilot という使い分けで開発が進みましたが、キャラクター(モンスター)のデザイン作成には苦労しました。
- あらかじめステータスの種類・組み合わせの数だけ成長したモンスターのデザインを作成しようと試みましたが、Geminiでは一度に多くの画像生成を指示することができませんでした。また、1つのチャットで繰り返し画像生成を指示すると途中から意図通りの結果が返らなくなりました。AIにはコンテキストの限界があり、処理できる情報の量に限界があるためだと思われます。
- 他にも、Geminiでは指示が繰り返した場合に、画像が意図通りに生成されませんでした。例えば、あるモンスターを進化させたい場合、ベースとなる画像を基に進化後の画像作成を指示しますが、まったく別の雰囲気となってしまいます。
- AI を活用したいのに画像生成に手間がかかる、モンスターに妥協したくはない..と、開発2日目で頭を抱えていました。
- 最終的にGeminiのプロンプトを工夫したり、ChatGPT を活用して、モンスターの画像生成を行いました。
- 例えば、以下はChatGPT を使って実際の写真を基に作成したモンスターの画像です。(この画像は、アプリのログイン画面に採用しました)
- AIに指示を行って、コーディングのタスク洗い出し・Lambdaコード作成
- 私が担当したバックエンドのコーディング作業の一部を紹介します。
- タスクの洗い出し:まずCopilot に要件定義書と設計書をインプットとして、「この機能を実現するためのLambda関数に必要なタスクをすべて洗い出して」と指示しました。
- 個別コードの生成:次に、洗い出された個別のタスク(例:現在のステータス取得、経験値の加算など)を、Pythonで書かれた1つずつのLambdaコードとして生成させました。
- コードの統合:最後に、タスクごとに生成された複数のコードを提示し、「これらのコードを1つのLambda関数として統合してください」と指示。
- このプロセスを通じて、インフラエンジニアである私でも、短時間でアプリケーションのロジックを実装することができました。
- 実際には、細かな不具合もありますので、AIと共に修正を行っていきます。
- インフラコードもすべてAI開発
- インフラは、Terraform を利用して構築を行いました。インフラコードもすべてAI に指示して開発を行いました。
- Gemini に設計書をインプットとしてコード作成を依頼、AWS サービス単位にコードを生成してくれました。さらに、構成図とインフラコードのチェックも行ってもらいます。
- 以下、今回作成した構成図になります。今回実現できませんでしたが、難易度分析・判定にはAmazon Bedrock を使用する構想でした。
最終日に行った事業部発表会
- ワーケーションの5日目には、事業部メンバー向けにワーケーションの報告をオンラインで行い、開発したアプリ「ウィッシュモン」のデモを行いました。
- 「ウィッシュモン」を少しだけご紹介します。
- 以下、アプリのログイン画面となります。「ログイン」か、「新規アカウント作成」を選択します。
- アカウント新規作成では、ユーザー名、パスワードの設定の他、キャラクター(成長させたいモンスター)を選択します。
- タスクを達成していくと経験値が加算され、モンスターが成長します。
まとめ
- 5日間のワーケーションを通して、技術的なスキルだけでなく、多くの学びと経験を得ることができました。
- 対面コミュニケーションの価値
- 普段のリモートワークとは違い、隣にいるメンバーに「すぐ聞ける」環境は、開発のスピードを向上させました。一つの画面を一緒に見ながら意見を出し合える一体感、相手の表情を見ながら進める楽しさは、対面ならではの価値だと再認識しました。
- AIとの協業で学んだこと
- 要件定義・設計書の作成にAI が活用できることを経験し、AI 利用の幅が広がったと共に、AI がアウトプットするクオリティにも驚かされました。
- 意図を正確に伝え、望むアウトプットを引き出すためのプロンプトが重要であることを学びました。コーディングや画像生成を指示する際のテクニックだけでなく、人間同士のコミュニケーションにも必要とされる普遍的なスキルだと感じました。
- AIによるコード生成の進歩は、知識として知っていましたが、今回実際に肌で感じることができました。業務ではなかなか試せない新しい技術にも、ワーケーションという集中できる環境があったからこそ挑戦できたのだと思います。この経験を、今後の業務に積極的に活かしていきたいと考えています。
- 今回のワーケーションは、AI開発と、ものづくりの原点にあるチームワークの楽しさを再発見できた、非常に密度の濃い5日間でした。この経験を糧に、今後もAIを活用した新しい開発スタイルに挑戦し、お客様により良い価値を提供していきます!