【中編】「動く」と「使える」は別物だった|NextPlay開発記録

ブログ記事「バイブコーディング体験記・中編」のアイキャッチ画像。「動くと使えるは別物だった」というタイトルと、NextPlayのURLを記載したダークブルー背景のバナー画像。
  • URLをコピーしました!

前編では「なぜNextPlayを作ったか」と、バイブコーディングの概要を書きました。

中編では実際の開発の中身を書きます。最初の1週間で動くものを作り、2週目にコア機能を実装する中でぶつかった壁の話です。

目次

まず「動作するアプリを作る」

【図解】Codexが出したMVP vs 自分が作りたかったもの の対比図
左:ユーザーが手動登録→マイリスト
右:ゲームDB→フィルタ→AI→1本提案

開発初日、最優先にしたのはこれでした。

「ログイン後にダッシュボードが落ちずに表示される」

完成度はひとまず置いておいて、まずアプリとして「最低限の動作をすること」ことを確認したかった。

方針を伝えて、AIコーディングエージェント(OpenAI Codex)に最初のMVPを出してもらいました。ところが、出てきたのは自分が思い描いていたものと全然違うアプリでした。

Codexが作ったのは「ユーザーが自分でゲームのタイトルやジャンルを入力して、マイリストを作る」システム。いわばゲーム管理ツールです。

でも自分が作りたかったのは「ゲームデータベースから自動で候補を引いてきて、今の気分に合う1本を提案してくれる」アプリです。方向が真逆。

まずは認証画面・ホーム画面・マイリストが動作することだけ確認して、すぐに修正指示を出しました。

ここで実感したのは、前編でも書いた通りAIはこちらの意図を読み取ってはくれないということです。

「ゲームのおすすめアプリを作って」ではダメで、「どこからデータを取ってきて、どう提案するか」まで伝えないと、AIは自分なりに解釈して別のものを作ってしまう。

  • ゲームを登録する機能を作って
  • ユーザが選択したフィルタ項目やマイリストに基づいて、ゲームデータベースから自動でおすすめタイトルを提案
  • ユーザは、おすすめタイトルに対して「気になる」「プレイ済み」「ブロック」のステータスを付与でき、マイリストに保存される

「誰が・何をしたとき・何が起きるか」まで書く。 この差が、返ってくるコードの品質に直結しました。


認証の壁をSupabaseで突破する

【図解】認証が通った瞬間の体験フロー

「ログイン機能」はWebアプリで必須ですが、ゼロから作ろうとすると複雑です。パスワードの保存方法、セッション管理、セキュリティ対策……

今回はSupabaseというサービスに認証を丸ごと任せました。Supabaseはデータベース・認証・ストレージをまとめて提供するサービスで、以前のバイブコーディングで使った経験がありました。自分から提案するつもりだったんですが、Codexから先に提案されて、そのまま採用。デプロイ先のVercelについても同様でした。

自分のアプリにログインできた瞬間は、地味に毎回感動します。

普段使っているサービスと同じように認証が動いている。Supabaseの管理画面を開くと、サインアップしたアカウントがちゃんとテーブルに追加されている。内部の仕組みは詳しくわからないけど(笑)

ただ、同時に不安も芽生えました。

「わからない」からこそ、セキュリティが心配になった。 認証周りで自分が見えていないリスクがあるんじゃないか。

結局、セキュリティの定番書である通称「徳丸本」を買いました。そしてCodexにも「認証まわりで確認すべきセキュリティ項目を洗い出して、最適化して」と依頼して調整しました。

バイブコーディングは「AIがコードを書いてくれる」けど、自分が理解していない部分への不安は消えない。 その不安をどう処理するかは、自分の仕事でした。


1週間でできたもの

1週間で動くようになったもの
  • メール認証(ログイン・サインアップ)
  • ホーム画面(おすすめ提案画面)
  • マイリストもどき(ステータス登録ゲームの一覧表示)

アプリの名前はまだ「Stacked Game OS」でした。AIがつけたコードネームをそのまま使っていた時期です(「NextPlay」に変わるのはもう少し先の話)。

UIはひどかったです。ゲームの画像をかろうじて取得できましたが、テストデータもそのままで「test2」「テスト1」がそのまま並んでいる。白くて無骨で文字だらけ。

でも、スクリーンショットを見返すと気づくことがあります。「今日の1本を決める」というコア体験の形は、この時点ですでに見えていました。


コア機能を作る中でぶつかった壁

【図解】NextPlayの全体フロー RAWG API→フィルタで絞る→候補リスト→OpenAI APIで並び替え→1本提案→ユーザーアクション(気になる/遊んだ/ブロック/次へ)→好みデータ蓄積→次の提案が育つ

軸は最初から決まっていました。「プラットフォームを横断して、今の気分に合う1本を提案するアプリ」。Steamを開いて30分無駄にするあの体験をなくしたいという課題感はブレなかった。

  • RAWG API連携:ゲームデータベースからゲーム情報を取得する
  • OpenAI API連携:候補のリランキング(並び替え)で推薦精度を上げる
  • フィルタ機能:時代・プラットフォーム・ジャンルで候補を絞る
  • 4択アクション:「気になる」「遊んだ」「ブロック」「次へ」でユーザーの好みを学習する

2週目はその軸に向かって、コア機能を一気に実装していく期間でした。

ここで3つの壁にぶつかりました。

壁①:API初体験の手探り

【図解】APIの仕組みをシンプルに説明する図 NextPlay(アプリ)←リクエスト/レスポンス→ RAWG API(ゲームデータ) NextPlay(アプリ)←リクエスト/レスポンス→ OpenAI API(AI処理) ※レストランの注文に例える

API連携は初めての経験でした。

実装自体はCodexがやってくれます。でも「APIキーって何?」「どこで取得するの?」「どう設定するの?」という前提知識がそもそもない

ゲームのデータベースにどんなサービスがあるかすら知らなかったので、まずはリサーチから依頼しました(これはCodexではなくChatGPTに聞いた記憶があります。調査系はチャットAIの方がやりやすかった)。そこでRAWG APIという、ゲーム情報を網羅的に提供するデータベースに辿り着きました。

バイブコーディングでは「実装はAIがやってくれる」けど「どんな道具があるか」「その道具をどう使うか」は、最低限知っておかないと指示すら出せない。

APIの存在やなんとなくの役割は知っていましたが、今回実際に連携にいたることでより現実の技術として腹落ちすることができました。

壁②:フィルタとデータが噛み合わない

【図解】フィルタとDBデータのズレ→調整→ヒット の概念図 左:フィルタ枠(サバイバル、ローグライク…)とDB枠(Action, RPG, Adventure…)がずれている→ヒットゼロ 右:フィルタをDB準拠に修正→ちゃんとヒットする

フィルタ機能を作ったとき、はじめは無邪気に自分の好きなジャンルを追加していきました。「サバイバル」「ローグライク」とか最近人気だしいいやろと。

その結果、何も表示されませんでした。

原因はシンプルで、RAWG APIのデータベースに存在しないジャンル名をフィルタに設定していたのです。自分の頭の中にあるジャンル分類と、データベースが持っているジャンル分類は違う。

Codexに「フィルタの項目がデータベースの実データと一致しているか確認して」と依頼して、DBの分類に合わせてフィルタを再設計しました。

この経験から得た教訓

「欲しい機能」ではなく「使えるデータ」に合わせて設計する。

取れないデータを前提にした画面は、いつも空っぽかエラーかのどちらかになります。

壁③:レコメンドロジックの試行錯誤

最初は、ゲームの候補をそのままAIに渡してリランキング(好みに合う順に並び替え)させていました。

これが遅い。しかもエラーが出る。

膨大な量のデータをAIに渡すと処理時間がかかりすぎるし、途中でエラーになる可能性も高い。

そこで二段構成にしました。まずフィルタ(時代・プラットフォーム・ジャンル)で候補を絞り、その絞った候補のから「メタスコア」の高い順に上位約10本だけをOpenAI APIに渡して並び替える。

【図解】二段構成のレコメンド処理 [全ゲームDB] →→ [フィルタで候補を絞る] →→ [候補リスト(数十件)] →→ [OpenAI APIで並び替え] →→ [1本を提案] ※「全部をAIに渡すと遅い&エラー」→「フィルタで減らしてからAIに渡す」

データベースが「量を絞る」仕事をして、AIが「質を選ぶ」仕事をする。

もうひとつの問題として、「遊んだゲームがまたおすすめに出てくる」ことがありました。

これは普通に困るので、遊んだゲームはおすすめから除外し、さらに一度表示されたゲームは24時間再表示しないようにして、「次へ」を押すたびに新鮮なゲームが出てくるようにしました。

正直に言うと、レコメンドロジックは今も改善したいと思っています。

メタスコアを利用していることによる「品質と新鮮さ」のジレンマもありますし、表示されるまでの速度、推薦の精度などまだまだ満足できるものではありません。

これからは「使いながら育てていく」フェーズとしてレコメンドの改善を重ねていこうと思います。


この時期の教訓

2週間の開発で実感したことを整理すると、こうなります。

UIは先に作れる。でもデータに合わせた設計は後から直すと痛い。

バイブコーディングの特徴として、画面(UI)はAIが出してくれるコードでどんどん先に進められます。でも「どんなデータが実際に取れるのか」を先に確認しないと、フィルタは空振りし、画面はスカスカになる。

完璧じゃなくていいので、最初に「このアプリが使うデータは何で、どこから取るか」だけは頭に入れておく。

それだけで後の苦労がだいぶ違います。


やってみたいと思ったら

セキュリティを知っておく用

バイブコーディングで認証を実装すると、「本当にこれで大丈夫?」という不安が必ず生まれます。全部読む必要はないですが、手元に置いておくと安心できる1冊です。


次回:後編

後編では、ランダムだったレコメンドをどう改善したか、デザインを作り直した話、名前をつけて公開するまでの話を書きます。


ブログ記事「バイブコーディング体験記・中編」のアイキャッチ画像。「動くと使えるは別物だった」というタイトルと、NextPlayのURLを記載したダークブルー背景のバナー画像。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次