AI駆動開発でどこまでできるのか?お試し中...
AIとの協働で未経験技術のキャッチアップで簡単なアプリを作ってます。アイデア壁打ち、ベストプラクティスの確認、エラー修正では絶対的な効率化を感じています。エラーは自動でフィックス&トライを繰り返すので、(エンジニアあるあるの)あの悩ましい時間はかなり削減されます。ストレスフリーで開発効率爆上がりです。
vscodeのエージェントだとワークスペース全体を見渡せておらず、部分的な解決案を提案してきます。
他のツールはどうなんだろう。機会があれば試したいです。
目次
バックボーン
作っているもの
なぜつくるか
なぜ占いか?
どうなったか
バックボーン
20年以上業務システム開発やECコンサルとして活動しています。最近はフリーランスでLaravelを使ったバックエンド担当が続いてます。おいてけぼりにならないようたまにキャッチアップをしています。
作っているもの
四柱推命と姓名判断から人生のブループリントを読み解くPWAアプリをMVPで作っています。
- 入力:氏名、生まれた年月日時
- 出力:命式、五行、五格。その情報をもとにAIが総合鑑定文を作成
経過は https://github.com/plaodas/fortunesで公開中
なぜつくるか
最近携わることが多くなったフリーランス案件ですが、現場に入ってからの即戦力が求められます。契約獲得に際しては直近の実績が重要視されます。
実績のあるスキルセットで契約を取り続けられる間は収入面で安定しますが、技術の陳腐化とともにエンジニアの単価は下がっていってしまいます。その上、実績のないスキルの案件は契約をとることができません。なかなか厳しい世界です。
そこで技術のキャッチアップが必要になってきます。
今回は、
- PythonのフレームワークFastAPI(未経験)
- AI駆動開発(深堀)
- React/TypeScript(深堀)
- LLM(自然言語モデル)API(未経験)
を使って、占い(未経験)アプリを作ってみたいと思います。
技術スタック目的(事業化目的ではない)なので、認証やログ監視は省いています。
なぜ占いか?
たまたま画面にしいたけ占いが表示されていたので、このスキルセットで占いが作れないかなと思いました。
どうなったか
占いの決め方ですが、以下のようなポイントでAIに整理してもらいました
- インプットが文字/数字のみで少ない項目数
- 2つの占いを掛け合わせたい
- LLMの表現力で出力のテンプレート化を防ぎたい
四柱推命と姓名判断は一般的な算出モデルがあるのでそれを更に簡略化して実装することにしました。
今回使用したい技術は決まっていたので、さっそくwsl上の vscode + Copilot で以下のプロンプトを入力しました。
以下のサービスの開発準備をお願いします。
サービス名:Fortunes
タイトル:Fortunes -四柱推命と姓名判断から本当のあなたを暴きます
初めはMVPとして以下の機能を実装:
- フロントで名前、生年月日、生まれた時間(1時間単位)の入力
- バックエンドで命式と画数を計算して (ダミーデータ)JSON を返す
- result = {
"year": "乙卯",
"month": "戊寅",
"day": "辛巳",
"hour": "乙卯",
"nameAnalysis": {
"tenkaku": 26,
"jinkaku": 15,
"chikaku": 11,
"gaikaku": 22,
"soukaku": 37,
"summary": "努力家で晩年安定"
}
}
- フロントでUIに表示、グラフで五行バランスを可視化
構成:
docker composeで以下の環境をセットアップ
- バックエンド:Python/FastAPI
- テーブル作成、初期データはmigrationファイルで管理
-
- DB: PostgreSQL
- フロントエンド:React/Next, PWAアプリ
githubでのソース管理を前提とし、mainブランチpushの際はGithub actionsでのテストを実施します。これだけで
- インフラ:docker compose、github action
- フロントエンド:reactでフォームの実装
- バックエンド:FastAPIのエンドポイント実装(登録, 一覧取得)、ユニットテスト
- DB:フォーム内容と結果JSON格納用の項目を持ったテーブル、テストデータ1件
の環境が作成されました。ここまでがっつり環境を作らせてみたことがなかったので出来栄えに驚きです。
思い立ってから2時間で開発のベースができました!
占いの命式、五行、五格の算出コードもAIが提案してきた内容でそのまま実装。(占いの当たり外れは、できてからのおたのしみ)
この後も基本的には、「▽▽にしたい場合どうすればよいかな?」「〇〇して」「AとB」のようなプロンプトベースでAIがファイルをガシガシ操作/編集していきました。
エラーがでれば勝手に該当ファイルを読んで直していきます。わたしはほぼ[Allow]するだけ。インターネットからダウンロードした漢字画数のデータベースの取り込みも、
「(ダウンロードファイルを指定して)このファイルのDBのテーブルと取り込む処理の実装お願い」
で実装終了。多少の手直しはあります。
3日後・・・
LLM利用の実装以外は一旦終わりました。
確かに冗長的な記述はあるけど、この状態が3日でできたってすごいな。
LiteLLMのキャッチアップと実装後に更新します。
5日目・・・
無事、当初のスコープは完成しました!
さて、今回鑑定文の生成でGPTとGeminiのモデルをいくつか比べてみたのですが、やはり新しいモデルは表現力豊かで良いですね。
- 簡潔にまとめるだけなら軽量で安価なモデル(サマリー作成)
- 物語を生み出す場合は高品質なモデル(鑑定文)
とモデルを使い分けてそれぞれに最適化したプロンプトを分けて用意するのが良いとわかりました。
動的に高品質な情報を生成する場合、1回の処理が長時間(数分返ってこない・・・)なので、キュー管理や面白いローディングなどの工夫が必要なことも学びました。
とてもいいキャッチアップになりました。
オツカレシター🖖