v0無料枠を使ってアプリを開発してみる


# はじめに
こんにちは、株式会社TechoesのK（入社1年目、エンジニア歴3年目）です
今回は、いまやAIでのwebアプリnフロントエンド開発におけるデファクトスタンダードになりつつある、**v0**の無料枠を使ってフィードバックを反映しながら家計簿を開発してみたいと思います

# v0とは
- 概要
  - フロントエンド特化の対話式AI駆動でのweb開発
Next.jsを開発してるVercelから発表された

https://v0.dev


<br>
  
 ![スクリーンショット 2024-10-27 8.15.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/1ea8483c-2eea-567d-5e99-e8da29970ac8.png)
chatGPTを使ったことがあるならすぐに使えるとっつきやすいデザイン

<br>


- 導入手順
  - 「Sign up」からアカウント登録
    - Githubアカウントなどの外部連携も可能
    - Email認証の場合、確認コードを入力する

![スクリーンショット 2024-10-27 8.31.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/e166c806-5bd7-9166-516a-efcb41d18627.png)

![スクリーンショット 2024-10-21 14.26.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/4e63e5ad-bfbe-4141-0db6-8dd7b4ab351c.png)

# 実際に開発してみる
- 無料版の回数制限は以下の通りです
  - 1月200回まで
  - 1日10回まで

↓使い切ると以下のような表示が出る
![スクリーンショット 2024-10-27 17.10.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/ccfced89-88ed-9360-3095-11f0b82bfb1e.png)
<br>

では、実際に開発していきたいと思います！

 ※フィードバック 1サイクルごとの使用回数はまちまちなので予めご了承ください
 


<br>



- サンプルアプリの開発
家計簿をテーマに、実際にサンプルアプリを開発してみる

![スクリーンショット 2024-10-27 9.52.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/18f47c25-6558-b37f-d31c-98ea028a8139.png)

「家計簿アプリを作って」と指示するとコードが生成され、プレビューが表示される
<br>

  - プロトタイプ
  生成したコードで実際に表示されたのは以下の状態（全体の上下中央揃えだけ追加で1回指定）
  
  ![スクリーンショット 2024-10-27 9.57.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/ae94c57d-2713-8611-fc2f-8cad07960be9.png)
<br>


- フィードバック 1サイクル目
  - 月毎の表示切り替え
  - 棒グラフの追加
  - 使用日も指定できるように

![スクリーンショット 2024-10-28 9.19.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/76bb329f-56aa-cddf-da0a-5eb89c6ada5d.png)
<br>

 
- フィードバック 2サイクル目
  - ジャンル欄の追加
  - ジャンルごとに棒グラフを色分け
  - 家計簿なので残高表示を削除


![スクリーンショット 2024-10-28 9.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/9a3d9240-a5a7-dd2c-3003-068ea6b12de6.png)
<br>

 
- フィードバック 3サイクル目
  - 「最近の取引」→「支出内訳」に文言変更
  - 支出内訳内で日別に項目が表示されるように設定
  - 支出内訳は最新日付から5日分だけ表示　※指定せず自動設定された内容

![スクリーンショット 2024-10-28 9.47.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/10520f5e-6485-d93c-fd53-9068c9178d27.png)
<br>

 
- フィードバック 4サイクル目
  - 支出内訳は月初から古い順に全ての内容を表示する
  - 金額の入力欄はデフォルトで半角になるようにした

![スクリーンショット 2024-10-28 10.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/186c0e54-38e8-6cf4-4934-19cbb280f34c.png)
<br>

- フィードバック 5サイクル目
  - 支出内訳の各項目の内容と金額を編集できるようにした
  - 支出内訳の各項目を削除できるようにした

![スクリーンショット 2024-10-28 10.17.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/37efe1d3-6905-6faf-eff5-2ed951c30094.png)

# 途中経過
ここまでで、家計簿に求められる基本的な機能はほぼ実装出来ているような気がします...
ちなみに、現在の使用回数はまだ20回です
<br>

ここからは以下の機能を追加していきます

- DB上でのデータ管理
- 月毎の管理ページの追加
- CSVエクスポート機能


<br>

- フィードバック 6サイクル目
  - DB上でデータを管理できるようにする
    - 基本的なCRUD処理の追加で実DB上でデータ管理できるようにした（ローカル）

![スクリーンショット 2024-10-30 17.58.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/188eb08e-e214-068c-ddbb-d764f65eec9f.png)

データを追加すると

![スクリーンショット 2024-10-30 17.59.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/f0101af1-46ea-247d-5ad7-79a644a05907.png)

DB上にデータが入る（リロードで消えないようになった）

<br>

- フィードバック 7サイクル目
  - 項目を選択式に
    - ジャンルに応じて内容が変わるようにした
  - 編集ダイアログも同様に修正

![スクリーンショット 2024-10-31 11.23.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/fb5bb8b7-553e-45f3-4bfc-7d44843aa137.png)
![スクリーンショット 2024-10-31 11.24.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/f62e4704-27de-dfd8-2a50-088765c36af8.png)

<br>

- フィードバック 8サイクル目
  - グラフの機能修正
    - 全日表示するようにした


![スクリーンショット 2024-10-31 11.31.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/a3497ed8-7718-3180-a872-dc59599c9efc.png)

<br>

- フィードバック 9サイクル目
  - グラフの表示修正
    - 配置間隔を調整した

![スクリーンショット 2024-11-01 15.26.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/76bf6ff1-c8c1-6216-a72d-2ba2e0a2799f.png)

<br>


- フィードバック 10サイクル目
  - 月次分析ページを追加
    - データはまだ未表示の状態

![スクリーンショット 2024-11-01 16.07.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/799a8e42-15b0-0b7f-67f2-6589aaa35039.png)

![スクリーンショット 2024-11-01 16.08.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/72fade28-980f-91c3-d007-583627da3895.png)
リンクボタンを追加

<br>


- フィードバック 11サイクル目
  - 棒グラフを追加
    - 月毎にデータをグラフで表示するようにした

![スクリーンショット 2024-11-03 11.23.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/c2653d7f-95b2-a096-4d01-f524228639c5.png)
<br>


- フィードバック 12サイクル目
  - 月別の合計表示を追加
    - 月毎に各種目の合計値を表示するようにした

![スクリーンショット 2024-11-03 11.36.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/22646dc1-3450-f778-987b-7b94a3ab55bb.png)

<br>


- フィードバック 13サイクル目
  - グラフにホバー表示を追加
    - 月毎に各種目の合計値を表示するようにした

![スクリーンショット 2024-11-03 11.47.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/632d9617-d268-6c59-a4da-af62601bd46f.png)

<br>


- フィードバック 14サイクル目
  - csvエクスポート機能を追加
    - 月次分析ページにも追加した

![スクリーンショット 2024-11-04 10.26.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/445e062b-b7af-7b08-f4b5-591ec992b156.png)

![スクリーンショット 2024-11-04 10.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/1fd184a6-e31a-fb5c-a2a6-bbee879b8d23.png)

<br>

# 最終結果の比較

- 初期状態

![スクリーンショット 2024-10-27 9.57.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/ae94c57d-2713-8611-fc2f-8cad07960be9.png)

- 金額と説明を入れて追加ボタンを押すと、追加したデータが下部に表示される
  - フロントで保持しているだけなのでリロードすれば消える

<br>

- 最終状態
  - 月単位（日別）の表示ページ

![スクリーンショット 2024-11-04 10.37.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/09ea6c44-8c7f-ba10-1720-5fc2590478eb.png)


<br>


- 月毎に表示切り替えできるようにした
- ジャンル、項目は選択式にした
  - 項目は各ジャンルに応じてそれぞれ設定
- カレンダーで指定した日付のデータを追加できるようにした
- 棒グラフで日毎の支出を表示できるようにした
  - 各ジャンルごとに色分けして表示される
  - 数値に応じて高さが変わる
- 支出内訳を日別に表示するようにした
  - 各項目は編集、削除が可能
- csvエクスポート機能の追加
- 月次分析（年単位ページ）へのリンク（とページ本体）を追加
<br>


- 追加ページ
  - 年単位（月別）の表示ページ

![スクリーンショット 2024-11-04 10.53.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/6d234693-308a-a066-9489-bff2cf7020bd.png)
<br>


- 月毎に合計値を棒グラフで表示
  - 各ジャンルごとに合計値を表示するようにした
  - グラフにホバー表示を追加
- 月毎に総計および各ジャンルごとの合計を表示
- csvエクスポート機能を追加


<br>

合計使用回数は...100回でした！
制限回数が月200回なので、半分の使用回数で実装したい機能がほぼ実装できたことになります！（すごい！）



# まとめ

というわけでめちゃくちゃ優秀なv0ですが、使っている上で感じたメリットとデメリットを書いていきたいと思います（初めての使用なのでデメリットはちょっと的外れかも...）


※あくまで個人の感想を多分に含みます
<br>

- メリット
  - デザイン修正に関しては相当な精度の高さ
    - プレビュー機能で仕上がりもわかりやすい
      - 実コード反映→確認というプロセスが短縮されるのでかなりの時短に
  - フロントの関数などもほぼそのまま使える状態でコードが出力される
  - 生成されたコードをそのままコピペできる
    - ファイル全体がコピペできるのでかなり楽

<br>

- デメリット
  - バックエンド、DBとの通信を含めた処理が入ると精度がかなり落ちる
    - プレビューも実質使用不可に（フロント上でデータを取得しないため）
  - 上記に関連して、実装上書かざるを得ない書き方で修正したコードがフロント上でのベストプラクティスから外れている場合、書き直される（気がする）
    - 機能追加や修正のたびに毎回元に戻すのが結構な手間（指定した部分は修正しないように出来ないかフィードバックには投げたが...）
  - （無料版限定）
    - 日に10回制限が地味にしんどい
      - 使い倒すなら有料版にアップグレードが吉


<br>

- 所感
  - フロント開発のかなり強力なツールになると感じた
    - 機能（特にデータ取得）を含めたコード全体でというよりはフロント上の修正したい部分のコードをピンポイントでという指定の仕方が一番真価を発揮するのかも

<br>


以上、v0についてのプレビューでした！
この記事が皆さんの開発の一助になれば幸いです