🤖

AI駆動開発で社内備品管理ツールを作った

に公開

はじめに

弊社はAI駆動開発に力を入れており、最近はCursorのAgent機能をフル活用して開発を進めています。今回は、社内備品の本(うちは「フォノ文庫」と呼んでいます)の貸出管理ツールをAI駆動開発で作成した体験談をお話しします。

実際に動いている動画等は、こちらの弊社実績ページでご覧いただけます。
また後日、解説記事をアップします!
https://www.phonogram.co.jp/works/2025/06/post-251.html

解決したかった課題

本の管理が大変すぎる問題

弊社では、欲しい本をリクエストチャンネルに投稿すると購入してもらえる制度があります。これは素晴らしい制度なのですが、以下の問題が発生していました:

  • 本の増加スピードが異常 - 本好きが積極的にリクエストするので、本がどんどん増える
  • 重複購入の発生 - 既に持っている本を再度購入してしまうことがある
  • 在庫把握の困難 - 何の本があるのか、どこにあるのかわからない

貸出管理のアナログ地獄

  • 紙ベースの管理 - 借りた人、返却日などを手書きで管理
  • 分析不可能 - どの本が人気なのか、誰がよく借りているのかわからない
  • 借りパク問題 - 長期間借りっぱなしの人を特定できない

解決策:統合Webアプリケーションの開発

これらの課題を一気に解決するため、本の管理から貸出管理まで全てを統合したWebアプリケーションを開発しました。

アプリケーションの特徴

  • スマホファースト設計 - メンバーが普段使うスマホから簡単操作
  • PWA対応 - ブラウザアプリでありながら、ネイティブアプリのような使い心地
  • 一元管理 - 本の登録、在庫管理、貸出・返却管理まで全て対応
  • リアルタイム更新 - 貸出状況がリアルタイムで反映

技術スタック

  • Laravel - 安定したバックエンドフレームワーク
  • Inertia.js - SPAライクな体験を簡単に実現
  • Vue.js - 直感的なフロントエンド開発
  • PWA - モバイル体験の向上
  • Docker - 開発環境の統一

技術選定のポイント: AIがある程度の知識を持っており、細かいルールを書かなくても理解してくれる技術を選びました。これにより、AI駆動開発がスムーズに進められます。

AI駆動開発の実践プロセス

Phase 1: 要件定義 - AIとの対話設計

CursorのAgentモードを使って、AIと一緒に要件定義を行います。

ここが最重要ポイント AIと協働するために、以下を徹底的に言語化する必要があります。
めちゃめちゃAIと対話して深堀りまくります。

  • 必要な機能とその優先度
  • 技術的制約と要件
  • データベースの設計
  • UI/UXの方針

今回AIと一緒にまとめた要件の一部抜粋です。

spec.mdc
## 技術スタック
- バックエンド: PHP (Laravel 12)
- フロントエンド: Inertia.js + Vue 3 + TypeScript
- ビルドツール: Vite
- パッケージ管理: Composer (PHP), npm (Node.js)
- DB: MySQL等のRDBMS(Laravel標準想定)
- その他: PWA対応, プッシュ通知, バーコード/QRコードスキャン(Web API利用)
- dockerを使用し、動作をしています

## 概要
このWebアプリは、会社が所持する書籍の貸出・返却を管理するためのシステムです。
主な利用者は会社の従業員で、スマートフォンからの利用を想定しています。
管理者は書籍の登録・編集・削除、全ユーザーの貸出履歴の閲覧、通知の送信などが可能です。

## 3. 貸出・返却
- ユーザーは書籍のバーコードをスマートフォン等のカメラでスキャンし、貸出処理を行う
- 貸出期間は1ヶ月(延長申請なし、上限冊数なし)
- 返却は返却棚に設置された特定のQRコードをスキャンし、返却したい本のリストから返却ボタンを押して処理
- QRコードの内容は定期的に変更し、envファイルで管理
- 返却期限はアラート通知のみで、強制返却はしない
- 貸出・返却履歴(lendings)は無期限で保持する。削除・アーカイブ運用は行わない。

## 4. 検索・一覧・詳細表示
- 書籍の一覧表示
- 全項目(タイトル、著者、ISBN、ジャンル、管理コード等)での検索
- 書籍詳細画面には画像、タイトル、著者、ISBN、ジャンル、管理コードなどを表示
- 書籍情報はAPI取得+手動入力・編集内容を反映
- 検索時、タイトル・著者・ISBN・ジャンル・管理コードは部分一致検索をサポートする。

## 7. システム仕様・その他
- Webアプリ(PWA対応、主にスマートフォン利用想定)
- オフライン対応なし
- 多言語対応なし
- 本がなくなった場合の特別な対応は不要
- ジャンルや書籍、ユーザーなどの削除時、関連する貸出履歴や通知は削除せず、外部キー制約はRESTRICTまたはSET NULLとする(詳細は運用方針に従う)。
- マイグレーションは既存ファイル編集ではなく新規作成で運用する。
- docker環境でのマイグレーション実行コマンドを用意する。
- コードの最適化・責務分離(例:ISBN整形の共通化、不要な関数の削除、重複処理の関数化)を随時実施する。
- 管理画面は`/admin`配下に設置し、`user.is_admin`でアクセス制御を行う。
- Laravel 12の新しいミドルウェア登録方法(bootstrap/app.phpでalias)に対応する。

## 9. 想定画面例
- ログイン/パスワードリセット/ユーザー登録画面
- 書籍一覧・検索画面
- 書籍詳細画面
- 貸出・返却操作画面(バーコード・QRコードスキャン機能付き)
- ユーザー貸出履歴画面
- 管理者用書籍管理画面
- 管理者用通知送信画面
- 管理者用ユーザー管理画面
- 本登録画面にバーコードスキャン機能(カメラ起動・ISBN自動入力)を追加する。
- 書影画像がない場合は「画像なし」と明示表示する。
- 管理者トップから「本の登録」ページへInertiaの`<Link>`で遷移できるようにする。

効果的な要件定義のコツ

「もう少し決めたほうがいいところある?」
「○○という仕様で、他に考慮すべきポイントはある?」

このような逆質問を積極的に使うことで、自分が気づかない部分を気づかせてくれて、より深い要件定義が出来ます。

要件が固まったら、マークダウンで整理してCursor Ruleとして保存します。これが後の開発フェーズで重要な指針となります。

Phase 2: コード生成 - AIによる実装

要件定義が完了したら、CursorのAgent機能で機能ごとにコード生成を進めます。

初回生成の現実

正直に言うと、最初は理解不能なコードや、微妙に動かないコードが生成されます
これは要件定義が不十分だったり、言葉があやふやだったということなので、以下のサイクルを回します

  1. 生成されたコードを確認
  2. 問題点をAIと対話
  3. 要件定義を修正・追加
  4. Cursor Ruleを更新
  5. 再生成

このサイクルを何度か繰り返すことで、徐々に意図した動作に近づいていきます。

生成結果の品質

一通りAgent生成が完了すると、大体7〜8割程度が動作する(所々バグってる)状態になります。
基本的な機能は動くものの、細かい調整が必要な状態です。

Phase 3: 仕上げ - 人間とAIのハイブリッド

ここからは自分の慣れたエディタ等々(私の場合はPhpStorm)に移動して、細かい調整を行います。

使い分けの戦略

  • 大きな機能追加: CursorのAgent機能を使用
  • 細かい調整・バグ修正: 手作業 + JetBrains AI
  • コードレビュー: JetBrains AIのChat機能

個人的な感覚ですが、JetBrains AIは「絶対嘘つかないマン」な印象があります。(たぶん)
確実性を重視する場面では非常に頼りになります。

開発結果と学び

完成したシステム

大まかな部分はAI、細かな部分は人間の手(+少しのAI) というハイブリッドアプローチで、想定していた機能を全て実装しました。

開発効率の向上

  • 開発時間: 従来の半分以下(今回だと5日 ※隙間時間で進めたのでざっくり換算です)
  • コード品質: 一定水準を保持

AI駆動開発を成功させる実践的なポイント

1. 要件定義に時間をかける

最も重要なのは要件定義です。 ここで手を抜くと、後の工程で大幅な修正が必要になります。

  • AIとの対話を通じて詳細まで決める
  • 曖昧な部分は必ず明確にする
  • 定期的に要件を見直し、更新する

2. AIが分かる技術スタックを選ぶ

AIが少し分かる知識を持つ技術を選ぶことで、より精度の高いコード生成が可能になります。

3. 段階的なアプローチを取る

AI生成→人間による調整のハイブリッドアプローチが(現段階で)最も効果的だと思います。

4. 継続的な改善サイクル

生成結果を見ながら要件定義を継続的にアップデートすることで、より良い結果が得られます。

5. 適切なツールの使い分け

  • CursorのAgent: 大きな機能の生成
  • IDE統合AI: 細かい調整とレビュー
  • 対話型AI: 要件整理と問題解決

おわりに

AI駆動開発は、適切なプロセスで進めることで、従来の開発手法を大幅に上回る効率性を実現できます。
特に、要件定義の段階でAIと徹底的に対話することが大事だと思います。

皆さんもぜひ、AI駆動開発にチャレンジしてみてください!

AUN Tech Blog

Discussion