v0で作ったUIをNext.jsに組み込むときの考え方

v0で作ったUIをNext.jsに組み込むときの考え方。v0などを対象に、向き不向きが分かるように整理します。

AIものさし編集部

v0で作ったUIをNext.jsへ組み込むときは、生成されたpageを丸ごとコピーするより、既存projectのrouting、component、data flow、依存関係に合わせて必要な部品を小さく統合します。既存repositoryをv0で扱える条件が揃っているなら、GitHubからimportして現在のcodebase上で作業する方法もあります。どちらを選んでも、画面がPreviewで表示されたことだけでは統合完了になりません。

最初に確認するのは、App RouterかPages Routerか、共通layoutはどこか、どの処理がserver側で行われ、どの操作がbrowser上のstateを必要とするかです。ここが曖昧なままpage全体を置き換えると、navigation、認証、データ取得まで変わり、見た目の修正が思わぬ障害につながります。以下では、既存一覧へ検索と詳細UIを加えるケースを例に、受け入れ前の確認順をまとめます。

先に既存routeとデータ契約を読む

対象routeのpage、layout、共通componentを確認し、同じ画面で使う型やデータ取得関数を探します。URLの命名、query parameter、戻る操作、breadcrumb、エラー表示などは既存の約束に合わせます。生成側に仮のURLやサンプルページがあるなら、公開routeへ置き換え、存在しないpathへ飛ばないか確認します。

一覧へ検索欄を追加する例では、一覧データがどこで取得され、既にfilterやpaginationがあるかを見ます。検索してからページ分割するのか、現在のページだけで検索するのかで結果が変わります。画面からrouteだけを見て判断せず、データの全件・部分取得も把握してください。APIがページ単位の結果しか返さない場合に、ブラウザー側だけで全件検索できるとは限りません。

既存repositoryをv0へimportするなら、対象repository、branch、connected projectを操作画面で確かめます。公式v0 DocsはGitHub repositoryを使うcodebase workflowを案内していますが、実際の権限や接続先はアカウント設定に依存します。未保存の変更がある場合は先に差分を確認します。別projectでUIを生成して移植する場合は、使用package、参照asset、環境変数名、想定APIを一覧化します。

pageごと移さず統合境界を選ぶ

生成されたpageをそのまま置き換える前に、受け入れるUIを特定します。既存のdata fetchingや認証は残し、検索欄・結果行・詳細drawerだけを取り込めるか検討します。page全体を移すと、既存のloading、permission、breadcrumb、error状態が意図せず置き換わることがあります。

componentの分け方は再利用、独立状態、別々の検証が必要かで決めます。生成側の小さなcomponentを全て残す必要はありませんが、一つの巨大な画面へ戻すのも扱いにくくなります。既存のbutton、form、design tokenがあるなら、似た見た目の部品を二重に維持しないようにします。共通componentを変える場合は使用routeを調べてから影響を確認します。

ServerとClientの責務を切り分ける

検索入力やmodalの開閉など、browser操作に必要な状態だけをclient側に置く考え方がありますが、具体的な境界は既存architectureを優先します。生成codeがブラウザーAPIやevent handlerを使っていないか確認し、必要のない親pageまでclient化しないようにします。データ取得や認証がserver側にあるなら、その処理をUI都合でclientから直接呼ぶ構造に変えません。

clientへ渡すデータにも注意します。秘密値や利用者に許可されていないデータがbundleへ含まれないか、環境変数の接頭辞だけでなく実際にどこへ渡るかを追います。認証、個人情報、API tokenが関わる場合は、UIの移植とは別にsecurity上の検証が必要です。サンプル値と本番データを混同しないよう、mock dataを使う画面はpreview限定か、画面にサンプルと分かる表示を置きます。

data shapeと状態を合わせる

生成UIが想定するfield名や型と、既存APIのresponseを比較します。例としてUI側がnameやstatusを期待しても、APIがdisplayNameやstateを返す場合があります。型エラーをanyで消すのではなく、実データのshape、null、欠損fieldを確認し、必要なら明確な変換境界を置きます。

空配列、loading、通信失敗、権限不足は別々の状態です。データが0件なら次に登録や条件解除を案内できるかもしれません。通信に失敗した場合は再試行が必要です。権限不足では管理者への依頼が次の行動になります。これらを同じ「データなし」表示にまとめると、利用者の判断を誤らせます。

mock dataは画面の骨格と操作を確認するために使えますが、接続後に残っていないか確認します。実データへ置き換える際はfield、日付、単位、並び順、検索対象を確かめ、仮値が実績のように表示されないようにします。

まずは使ってみる

記事の文脈に合うToolへ進めます。報酬の有無で見た目は変えていません。

dependencyと既存UIを整理する

v0がchart、icon、formなどのpackageを追加した場合、package.jsonとlockfileの変更を確認します。既存projectに同等のlibraryがあるなら、新規依存を足す理由を見ます。依存を増やすとbundle、保守、更新の負担が増えるため、デザイン差だけなら既存部品に寄せる選択肢があります。

生成されたCSSやstyleが共通tokenを無視して固定色・固定幅を追加していないかも確認します。ページ一つでは問題なく見えても、長い日本語、利用者名、エラー文、画面幅で崩れることがあります。design systemへ合わせる変更と、既存の一部routeだけに閉じる変更を分けて判断します。

Next.js統合用の確認表

表は横にスクロールできます

確認箇所先に見ること失敗例
route直URL、内部リンク、query404や条件の消失
component再利用と責務headerやformの二重表示
datafield、型、null、0件mock値が本番に残る
stateloading、error、submit古い結果が残る
security認証、権限、秘密値clientへ不要データを渡す
styletoken、長文、小画面overflow、button clipping
buildtype、lint、test、exportPreviewだけ動いてbuild失敗

この表は確認漏れを防ぐためのものです。全projectで全checkが必要という意味ではなく、既存CIと変更の範囲に合わせて実施します。

Diff・Preview・testを順に回す

差分では対象component以外にlayout、route、environment variable、middleware、API handlerが変わっていないか見ます。GitHub連携が変更をbranchへまとめても、その内容をreviewする必要は残ります。不要なファイル変更があるなら理由を調べ、今回の目的に必要なものだけを残します。

Previewでは正常データだけでなく、長い文字、0件、API失敗、画面幅、直接URLを確認します。既存画面から遷移する場合と、routeを直接開く場合の両方を試します。Preview上の環境変数にだけ依存していないか、production相当buildで再確認します。

テストはrepositoryの既存scriptとCIを基準に選びます。検索なら一致、0件、解除、既存filterとの併用、paginationとの順序が確認対象です。見た目だけの修正でも、type、lint、buildのうち関係する検査を通します。実行していない検査は完了済みと書かず、未確認として残します。

AIものさしの判断

v0 UIは既存Next.jsアプリの設計を置き換える正本ではありません。受け入れ側のroute、data contract、server/client境界、design systemを優先し、必要な部品を選んで統合します。

公開前の完了条件は、表示だけではなく、主要操作が既存データと契約に合い、空・loading・errorも扱え、必要なtype・test・build確認が終わった状態です。URLや権限、認証の変更が必要ならUI統合に混ぜず、影響を把握してから別判断にします。

統合後に確認するユーザーの流れ

画面を直接開いて表示を確認したあと、一覧から検索、結果選択、詳細表示、戻る操作まで一続きで試します。検索条件がURLに保存される設計なら、再読込や共有後も条件が保たれるかを確認します。条件が保存されない仕様なら、戻る操作でどの状態へ戻るかを明確にします。ここは生成画面の見栄えでは判断できない、既存routeとの接点です。

本番データや権限が関わる確認はpreviewだけで済ませず、既存の安全な検証環境と手順を使います。

引用・データ出典

次の一手

記事の内容を踏まえて、公式とTool詳細から続けられます。

次に読む・使う

この記事の次に必要な情報へ進めます。