4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バックエンドエンジニアがAI-DLCでモバイルアプリを爆速開発した話

Last updated at Posted at 2025-12-18

はじめに

この記事はディップ Advent Calendar 2025の19日目の投稿です。

専門外の領域でもAIの力を借りればサクッとアプリを作れるはず!
ということでタイトルの通り、バックエンドエンジニアがAI-DLCというアプローチでモバイルアプリ、その名も寸計1を作ってみました。

アイコン

本記事では、AIを開発の主体に据えることで、いかにして知見のない領域を突破したのか。また、人間一人の思考では陥りがちな「考慮漏れ」を防げたのかを共有します。

自己紹介

Goがメインのバックエンドエンジニアです。
最近はスポットバイトルのリアーキテクチャに取り組んでいます。
アプリ開発経験はFlutterを少し触ったことがあるくらい。

AI-DLC(AI-Driven Development Life Cycle)とは

AIに人間の意図・要求を伝え、AIが要件・仕様を整理し実装まで行う手法です。
開始(Inception)、構築(Construction)、運用(Operation)の3つのフェーズに分けて実施していきます。(今回はアプリ作成までが目的なので運用フェーズは対象外)

よく仕様駆動(SDD)と比較されますが、開発の主体がAIなのか、人間なのか、という点が大きな違いになります。

特徴 AI-DLC 仕様駆動開発 (SDD)
開発主体の中心 AIエージェント 仕様書を定義する人間
プロセスの流れ AIが計画・実行し、人間が検証 人間が仕様を定義し、AIが実行を支援
目的 開発ライフサイクル全体の自動化・効率化 仕様に基づいた正確な実装と品質向上

AI-DLCの詳細については以下を参照ください。
https://aws.amazon.com/jp/blogs/news/ai-driven-development-life-cycle/

アプリ開発のきっかけ

リアーキテクチャチームでは開発手法としてAI-DLCを採用していますが、AIからの膨大なアウトプットをレビューしているうちに、気づけば残業…という本末転倒な事態が起きることが度々ありました。 「タイムボックスを設けて集中し、作業のチェックポイントを作りたい」 そう思ったのが、今回のアプリ開発のきっかけです。

開発してみた

環境

  • VSCode
  • Github Copilot
    • GPT-5 mini(途中からClaude Sonnet4.5を利用2

こちらの要求

# 概要
ユーザーが指定した時間が経過すると通知をslackなどに飛ばせるアプリの開発を検討しています。
以下に記載されている必須要件(must)を全て満たし、希望要件(want)を可能な限り実装できる設計を考えてください。

## must
- 時間設定できる
  - 最大1h
  - 残り時間が視覚的にわかりやすい
- 時間が来たら通知を送れる
  - 設定したslackチャンネルに通知を出せる

## want
- 繰り返し設定できる
- slack以外にも連携できる
- 通知メッセージを任意のものに変更できる

## 使用技術
- Flutter
上記以外は自由。ミニマムかつコストが掛からない技術を選定してください。

inceptionフェーズ

ここでは、抽象的な「やりたいこと」をAIに渡し、詳細なユーザーストーリーに落とし込ませます。 プロンプトには、AIが勝手に暴走しないよう 「熟練PM」としてのロールと、「独自の判断をせず不明点は必ず質問すること」 という制約を課しました。

出力されたユーザーストーリー作成計画書
## 実感タイマー(寸計) - ユーザーストーリー計画

このドキュメントはネイティブアプリケーション寸計のユーザーストーリー作成と実装計画の契約書です
各ステップにチェックボックスを付けていますいずれかのステップで追加情報が必要な場合は [Question] を記載し下に空の [Answer] 欄を用意しています私の判断で仕様を決定せずあなたの回答を待って進めます

---

### チェックリスト

- [x] 1. スコープと成功基準の確定
  - 目的: アプリ名対応プラットフォーム必須/希望要件must/want)、MVPの定義成功の定義を確定する
  - 理由: 以降の設計実装の基準を揃えるため
  - [Question] 以下の点を決めてください
    - 対応プラットフォームiOS / Android / 両方 / macOS等
    - Slack連携方法の初期希望Incoming Webhook / Bot with OAuth / その他
    - アプリ名の確定現在の候補寸計
  - [Answer]
    - 対応プラットフォームはiOS / Android の両方です
    - ミニマムな方法でお願いします
    - アプリ名は寸計で確定です

- [x] 2. ユーザーストーリー作成エピックと詳細ストーリー
  - 目的: must/want をもとにペルソナエピック各ユーザーストーリーを作成し受け入れ基準を定義する
  - 期待成果: 各ストーリータイマー設定通知送信繰り返し設定カスタムメッセージのAcceptance Criteriaを含む一覧

---

## ユーザーストーリー(作成済み)

### ペルソナ

- 名前: 佐藤 太郎
  - 職業: エンジニア / プロダクト担当
  - 年齢: 25-40
  - 目的: 集中作業短い作業セッションの管理作業完了をチームに共有して流れを止めないようにしたい
  - 技術慣れ: スマホAndroid/iOSを日常的に使用Slack は業務で活用

### エピック一覧

1. タイマーの作成管理
2. 通知Slack送信
3. UI/UX と視覚フィードバック
4. 繰り返しスケジュール設定want
5. 外部連携拡張want

---

### ユーザーストーリー(must 要件)

1) タイマーを設定できる最大 1 時間
  - 役割: ユーザー
  - ストーリー: ユーザーは作業時間を最大 1 時間まで設定できるようにしたいそうすれば短時間セッションを正確に計測できる
  - 受け入れ基準:
    - UI から 1 分単位または 30 秒刻みでの選択を含むで時間を指定できる
    - 入力が 1 時間を超える場合設定を拒否しエラーメッセージを表示する
    - 保存されたタイマー設定はアプリ再起動後も保持されるローカル保存)。

2) 残り時間が視覚的に分かる
  - 役割: ユーザー
  - ストーリー: ユーザーは残り時間を視覚的に把握したいそうすれば作業の見通しが良くなる
  - 受け入れ基準:
    - 実行画面に残り時間の数値表示があるmm:ss)。
    - 残り時間が視覚的に分かるインジケーターを表示する: プログレスリングタイムバー色の変化)。
    - 進行中に一時停止/再開ができる

3) 時間が来たら Slack に通知を送れる
  - 役割: ユーザー
  - ストーリー: ユーザーはタイマー終了時に設定した Slack チャンネルへ通知を送信したいそうすればチームへ作業完了や合図を自動で伝えられる
  - 受け入れ基準:
    - 設定画面で Slack Incoming Webhook  URL を登録できる
    - タイマー終了時に登録された Webhook に対して HTTP POST を行いSlack にメッセージが投稿されること成功時の 200 系レスポンスで確認)。
    - 送信に失敗した場合アプリ内でエラーステータスを表示し再試行ボタンを提供する
    - Webhook URL は安全に保存され平文での共有表示はしないデバイスの安全領域または暗号化で保存する)。

---

### ユーザーストーリー(want / 将来の拡張)

4) 繰り返しシーケンス設定ができるwant
  - 役割: ユーザー
  - ストーリー: ユーザーは複数の時間区間を順番に実行するシーケンス: 1時間作業 -> 20分休憩 -> 1時間作業 ...を作成実行したいこれにより作業休憩サイクルを自動化できる
  - ユースケース例: 1時間作業 -> 20分休憩 -> 1時間作業 -> 20分休憩 を繰り返すサイクルをワンタップで開始したい
  - 受け入れ基準:
    - ユーザーが複数のステップを順序付きで定義できる各ステップにラベルと時間を設定可能: {ラベル: "作業", 時間: 60}{ラベル: "休憩", 時間: 20})。
    - 各ステップの時間は分単位で設定でき各ステップは最大 1 時間まで設定可能プロダクトの must ルールに準拠)。
    - シーケンスをループ繰り返しさせるオプションがあり指定回数または無限ループを選べる
    - 実行画面で現在のステップ名残り時間次のステップのプレビューが表示される
    - ステップ終了時にオプションでSlack通知を送れる各ステップごとに通知のオン/オフを切り替え可能)。
    - 実行中に次へスキップ一時停止再開停止が可能でユーザー操作は即時反映される
    - 作成したシーケンスは保存編集削除でき保存されたシーケンスはアプリ再起動後も保持されるローカル保存)。
    - シーケンス実行中にネットワーク障害があってもローカルのタイマー動作は継続しSlack送信は指数バックオフで再試行するユーザーには送信失敗のステータスと手動再送オプションを表示する
    - UI でシーケンスの並び替えが容易にできるドラッグ & ドロップなどステップの挿入削除ができる
    - デフォルトのプリセット: 作業60/休憩20を用意しユーザーはそれを保存して再利用できる

5) 通知メッセージを任意の内容に変更できるwant
  - 役割: ユーザー
  - ストーリー: ユーザーはSlackへ送る通知メッセージを自由に編集したい
  - 受け入れ基準:
    - 設定画面でテンプレートを編集できる: "{ユーザー名} のタイマーが終了しました: {タイトル}" のような変数を使用可能)。

6) Slack 以外の連携want
  - 役割: ユーザー / 管理者
  - ストーリー: 将来的に Teams / Email / webhook-proxy など他サービスに通知を送れるようにしたい
  - 受け入れ基準:
    - 抽象化された通知送信インターフェースが存在する実装詳細は別タスク)。

---

### 非機能要件・セキュリティ・運用上の受け入れ基準

- Webhook URL 等の機密情報はデバイス上で暗号化して保存する
- ネットワークが不安定な場合通知送信は指数バックオフで再試行し一定回数失敗したらユーザーに手動再送を促すUIを表示する
- 標準的なプライバシーポリシーに準拠するユーザーデータを外部に送らないことを明記)。

### 想定されるエッジケース(テスト観点)

- バックグラウンド/フォアグラウンドでのタイマー継続性OSにより制約あり)。
- Webhook が無効権限不足タイムアウトした場合の取り扱い
- デバイスの時刻変更やタイムゾーン変更時の挙動
- アプリ削除や再インストール時の設定復元必要性を要検討)。

---

### 次のアクション(要あなたの承認)

- 上記ユーザーストーリーをレビューしてください
- 修正がなければ承認をお願いします承認後に3. 優先順位付けと受け入れ基準の確定を開始します

---

- [x] 3. 優先順位付けと受け入れ基準の確定MVP確定
  - 目的: MVP を確定しイテレーション優先度を決定する
  - 期待成果: MVP ストーリー集合とそれぞれの完了条件

- [x] 4. UX フローとワイヤーフレーム作成
  - 目的: 主要画面タイマー設定実行画面連携設定履歴等のフロー図と簡易ワイヤーを作成する
  - [Question] デザインの制約やブランド要素カラーロゴフォント等があれば提示してください
  - [Answer]
    - 特に決めていませんこれらも含めて提案をお願いします

- [x] 5. API / 連携仕様Slack定義
  - 目的: Slack 通知の方式権限メッセージフォーマットエラーハンドリング再試行ポリシーを明確にする
  - [Question] Slack 連携について以下を教えてください
    - 組織に既に Slack App があるかある / ない
    - Bot を使った OAuth フローを希望するか簡易でWebhookだけ使うか
  - [Answer]
    - 組織に既に Slack App があるか -> ない
    - 簡易にWebhookだけでOKです

- [x] 6. データモデルとローカル保存戦略
  - 目的: タイマー設定繰り返し情報連携先設定ユーザー設定のデータモデルを定義し保存方法SQLite / ファイル / Keychain を決定する

- [x] 7. 技術選定とアーキテクチャ設計
  - 目的: ネイティブ開発Swift/KotlinかクロスプラットフォームReact Native/Flutter等かの選定モジュール分割通知の実装方針を決める
  - [Question] 対応プラットフォームの優先度を教えてくださいまずiOSその後Android等)。
  - [Answer]
    - クロスプラットフォームで開発想定です
    - 対応プラットフォームはAndroid優先でお願いします

- [x] 8. 実装計画イテレーション分解
  - 目的: 開発を小さなイテレーションに分解し各イテレーションのスコープと完了条件を定義する
  - 期待されるイテレーション例:
    - イテレーション A: 基本タイマー UI最大1h残り時間の視覚化 + ローカル通知
    - イテレーション B: Slack 送信Webhook  Bot + 通知のステータス表示
    - イテレーション C: 繰り返し設定通知メッセージ編集
    - イテレーション D: 他サービス連携設定画面改良

- [x] 9. テスト計画作成
  - 目的: 単体統合受け入れテストの範囲と合格基準を定義するSlack連携はモックを用いた自動テストと手動検証を組み合わせる

- [x] 10. ドキュメントREADME 作成
  - 目的: セットアップ開発手順Slack連携手順デプロイ/配布手順を整備する

- [x] 11. レビューと承認
  - 目的: 上記計画をあなたにレビューしていただき承認を得る承認後1ステップずつ実行し各完了時にチェックをつけて進めます

---

### 承認のお願い

この計画書をレビューしていただき以下の点について承認または修正指示をください

- 対応プラットフォームQuestion欄の回答
- Slack連携方式の希望Question欄の回答
- デザイン制約やブランド要素Question欄の回答

承認いただければ担当PMはこの計画に従って次のステップ(「ユーザーストーリー作成」)を開始し完了時にこのドキュメントのチェックを更新してレビューを求めます

---

作成日: 2025-11-15

AIと壁打ちをする -> 自分では気づけない「不具合・考慮漏れ」の発見

  • 実行中に次へスキップ、一時停止、再開、停止が可能で、ユーザー操作は即時反映される。
  • 作成したシーケンスは保存・編集・削除でき、保存されたシーケンスはアプリ再起動後も保持される(ローカル保存)。

AIと壁打ちをしていて良かったと思ったのが、こちらが指示していない 「一時停止・再開機能」や「デバイス再起動後のデータ保持」 をAI側から提案してきたことです。

バックエンドの感覚で「通知を送る」ことばかり考えていた私にとって、モバイルアプリ特有の「ユーザーが途中で操作を中断する」「アプリがキルされる」といった考慮事項を、設計段階でAIが補完してくれたのは非常に大きな助けになりました。
要求に記載していない一時停止や再開の機能をAI側から整理・提案され、「あー確かにこの機能も必要だな」と気付かされます。

construction

inceptionで作ったドキュメントを「経験豊富なエンジニア」ロールのAIに渡し、モデリング -> コード実装と進めていきます。

爆速の開発体験

結果として、5日間(実働10時間程度)で3タブ構成のアプリが完成しました。

シーケンスの作成、実行、通知先設定を下部のタブから選択

実行画面

通知(Slack Webhook連携)

通常、不慣れなフレームワークだと「環境構築」や「非同期処理の書き方」で数日溶かすことも珍しくありませんが、AI-DLCならそこをスキップして 「ドメインロジックの確認」に脳のメモリを割ける のが強みです。

AI-DLCを実践して

良かった点

  • 未知の領域の高速突破
    • Flutter特有の記法やライフサイクルを知らなくても、レビューができる知識さえあれば形になる
  • 思考の外部化
    • AIを壁打ち相手にすることで、仕様の穴(エッジケース)をかなり埋められる
  • モチベーションの維持
    • 環境構築などの「詰まりどころ」をAIが解消してくれるため、開発が止まらない

課題点

  • トークン消費
    • AIを主軸に作業を進めるため、すぐにトークン上限に達する3(高性能なモデルを使うとさらに一瞬)
  • レビュー疲れ
    • 自分でコードを書くのとは違う、常に「正しいか?」を判定し続ける脳の疲れがある

所感

「バックエンドエンジニアだからアプリは作れない」という壁は、AI-DLCによって取り払われたのかなと感じています。 もちろん、最終的な品質責任は人間にありますが、「0から1を作る」フェーズにおいて、AIは優秀なパートナーになります。

今回使用したLLMでは、GPT-5 miniなどの軽量モデルも案外優秀だなぁと感じた一方、やはり指示への忠実さや文脈理解では Claude 4.5 Sonnet が圧倒的に使いやすかったです。

時間を見つけてブラッシュアップとストア公開までやってみるのも面白そうです。

Appendix

スポットバイトルにおけるリアーキテクチャの取り組みをチームで積極的に発信しています。興味のある方はぜひ読んでみてください。

  1. 名前もAIと壁打ちして決めました。1時間のタイムボックスを計る - >1h time box -> 1h boxer -> 1h punch -> ワンインチパンチ -> 寸勁 -> 寸計 という流れ。AIのセンス

  2. 無料枠を使っていたがたちまちトークン上限に達してしまったので課金した

  3. トークンが尽きたから仕事できません。帰ります。な時代が来るかも、、?

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?