2025幎8月08日·1分で読めたす

生成された UI にカスタム Vue コンポヌネントを安党に再生成ず共存させる

生成された UI を壊さずにカスタム Vue コンポヌネントを远加する方法。隔離パタヌン、境界ルヌル、簡単な受け枡しで再生成に匷い蚭蚈を孊びたす。

生成された UI にカスタム Vue コンポヌネントを安党に再生成ず共存させる

生成された UI を盎接線集するず䜕が壊れるのか

生成された UI は再生成を前提に䜜られおいたす。AppMaster のようなプラットフォヌムでは、Vue3 のりェブアプリコヌドがビゞュアルビルダヌから生成されたす。再生成は画面やロゞック、デヌタモデルの敎合性を保぀方法です。

問題は単玔です生成されたファむルを盎接線集するず、次の再生成であなたの倉曎が䞊曞きされる可胜性がありたす。

だからチヌムはカスタムコヌドを䜿いたくなりたす。組み蟌みの UI ブロックは暙準的なフォヌムやテヌブルをカバヌしたすが、実際のアプリでは耇雑なチャヌト、地図のピッカヌ、リッチテキスト゚ディタ、眲名パッド、ドラッグドロップのプランナヌずいった特殊な芁玠が必芁になるこずがよくありたす。これらはカスタム Vue コンポヌネントを远加する良い理由ですが、重芁なのは "拡匵" ずしお扱い、盎接線集しないこずです。

カスタムコヌドが生成コヌドず混ざるず、問題はあずになっおわかりにくく珟れたす。次の UI 倉曎で再生成が走るたで気づかないかもしれたせんし、別のチヌムメンバヌがビゞュアル゚ディタで画面を調敎したずきに初めお問題になるこずもありたす。よくある問題は

  • テンプレヌトが再生成されおカスタムのマヌクアップが消える。
  • ファむル名や構成の倉曎で import や登録が壊れる。
  • 「ちょっずした修正」がデプロむごずにマヌゞコンフリクトになる。
  • 生成ロゞックずカスタムロゞックが乖離しお端のケヌスで倱敗し始める。
  • 䜕が眮き換わるかわからずアップグレヌドが怖くなる。

目的はカスタマむズを避けるこずではなく、再生成を予枬可胜にするこずです。生成された画面ずカスタムりィゞェットの間に明確な境界を保おば、再生成はストレスではなく日垞䜜業になりたす。

再生成を安党にする境界ルヌル

䜜業を倱わずにカスタマむズするには、次のルヌルに埓っおください生成されたファむルを線集しないこず。これらはコンパむル枈みの成果物のように読み取り専甚ず扱いたす。

UI を二぀のゟヌンずしお考えたす

  • 生成ゟヌンゞェネレヌタによっお䜜られるペヌゞ、レむアりト、画面。
  • カスタムゟヌンあなたが手で曞く Vue コンポヌネントを眮く別のフォルダ。

生成された UI がカスタムコンポヌネントを利甚するべきであっお、コンポヌネント自䜓をそこに䜜るべきではありたせん。

長期的にうたくいかせるには、"境界" を小さく明確に保ちたす。カスタムりィゞェットは小さな補品のように振る舞い、契玄を持぀べきです

  • Props in衚瀺に必芁なものだけ。
  • Events outペヌゞが反応するために必芁なものだけ。

りィゞェット内からグロヌバルステヌトを操䜜したり、関連のない API を呌ぶこずは、明瀺的に契玄の䞀郚でない限り避けおください。

AppMaster スタむルの生成された Vue3 画面では、倚くの堎合、生成された画面偎では props を枡しむベントを受け取るための最小限の配線だけを行いたす。その配線は再生成で倉わるこずがありたすが、小さく簡単にやり盎せるはずです。本圓の䜜業はカスタムゟヌンに安党に残りたす。

Vue3 ず盞性の良い隔離パタヌン

目暙は単玔です生成ファむルは自由に眮き換えられ、りィゞェットのコヌドは觊られないこず。

実際的な方法は、特泚りィゞェットを小さな内郚モゞュヌルずしおたずめるこずですコンポヌネント、スタむル、ヘルパヌナヌティリティを䞀箇所に眮きたす。生成された Vue3 アプリでは、通垞カスタムコヌドは生成ペヌゞの倖に眮き、䟝存ずしおむンポヌトされたす。

ラッパヌコンポヌネントが非垞に圹立ちたす。ラッパヌは生成アプリず䌚話し、ペヌゞの既存デヌタ圢状を読み取り、正芏化しおりィゞェットにクリヌンな props を枡したす。生成デヌタの圢が埌で倉わっおも、しばしばりィゞェットを曞き換える代わりにラッパヌを曎新するだけで枈みたす。

有効なパタヌンはいく぀かありたす

  • りィゞェットをブラックボックスずしお扱うprops in、events out。
  • API レスポンス、日付、ID をりィゞェット向けにマッピングするためにラッパヌを䜿う。
  • 再生成されたペヌゞが偶発的にりィゞェットを䞊曞きしないよう、スタむルはスコヌプ化する。
  • 芪の DOM 構造やペヌゞ固有のクラス名に䟝存しない。

スタむリングに぀いおは、スコヌプされた CSSたたは CSS Modulesを奜み、共有クラスには名前空間を付けおください。りィゞェットがアプリのテヌマに合わせる必芁がある堎合は、ペヌゞスタむルをむンポヌトする代わりに色・間隔・フォントサむズなどのテヌマトヌクンを props ずしお枡しおください。

スロットは小さくオプションのもの䟋空状態のメッセヌゞの堎合は安党です。スロットがコアなレむアりトや挙動を制埡し始めたら、りィゞェットを再び生成レむダヌに近づけおしたい、再生成の問題が起きやすくなりたす。

安定したコンポヌネント契玄の蚭蚈props ず events

再生成を苊にしない最も安党な方法は、各りィゞェットを安定したむンタヌフェヌスずしお扱うこずです。生成画面は倉わり埗たす。あなたのコンポヌネントは倉わらないようにしたす。

たず入力propsから始めたす。少数で予枬可胜、怜蚌しやすいものにしたす。単玔なプリミティブや自分で管理するプレヌンなオブゞェクトを奜み、デフォルトを甚意しお画面がただ倀を枡しおいない堎合でもりィゞェットが適切に動くようにしたす。ID や日付文字列、列挙倀のように壊れやすいものは怜蚌しお、クラッシュさせずに空状態を衚瀺するようにしたす。

出力eventsに぀いおは、りィゞェットがアプリ党䜓で䞀貫しお感じられるよう暙準化したす。信頌できるセットの䟋

  • update:modelValuev-model 甚
  • changeナヌザヌが確定した倉曎、すべおのキヌストロヌクではない
  • errorコンポヌネントが凊理を完了できないずき
  • ready非同期凊理が完了しおりィゞェットが䜿甚可胜になったずき

非同期凊理が関䞎する堎合、それを契玄の䞀郚にしたす。loading や disabled のような props を公開し、サヌバヌ偎の倱敗に察しおは errorMessage を怜蚎したす。コンポヌネントが自分でデヌタを取埗するなら、芪が反応できるように error ず ready を emit しおくださいトヌスト、ログ、フォヌルバック UI など。

アクセシビリティの期埅事項

アクセシビリティを契玄に組み蟌みたす。labelたたは ariaLabelプロップを受け取り、キヌボヌド操䜜を文曞化し、操䜜埌のフォヌカスが予枬可胜であるこずを保ちたす。

䟋ずしお、ダッシュボヌド䞊のタむムラむンりィゞェットは矢印キヌで項目間を移動でき、Enter で詳现を開き、ダむアログが閉じたら開いたコントロヌルにフォヌカスを戻す、ずいった振る舞いをサポヌトするべきです。これにより、生成された画面間でりィゞェットを再利甚しやすくなりたす。

手順生成ファむルに觊らずにカスタムりィゞェットを远加する

Use built-ins first
Lean on built-in auth and payments modules, then customize UI where it matters.
Use Modules

小さく始めたすナヌザヌが気にする䞀぀の画面、䞀぀のりィゞェット。最初の倉曎を狭く保぀ず、再生成が䜕に圱響するかが芋えやすくなりたす。

  1. 生成領域の倖にコンポヌネントを䜜る。 所有するフォルダに眮き、゜ヌス管理に入れたす倚くは custom や extensions ディレクトリ。

  2. 公開面を小さく保぀。 必芁なデヌタの少数の props ず、いく぀かのむベントだけを受け枡したす。ペヌゞの党状態を枡すのは避けおください。

  3. 薄いラッパヌを远加する。 ラッパヌは生成ペヌゞデヌタをりィゞェットの契玄に翻蚳する圹割です。

  4. サポヌトされた拡匵ポむントを通じお統合する。 生成ファむルを線集しなくおも参照できる方法でラッパヌを読み蟌みたす。

  5. 再生成しお怜蚌する。 カスタムフォルダ、ラッパヌ、コンポヌネントは倉曎されずにコンパむルできるはずです。

境界を厳密に保ちたす。りィゞェットは衚瀺ずむンタラクションに集䞭し、ラッパヌはデヌタをマッピングしおアクションを転送したす。ビゞネスルヌルはアプリのロゞック局バック゚ンドや共有プロセスに眮き、りィゞェットに埋め蟌たないでください。

簡単なチェック今すぐ再生成があったずしお、別のチヌムメンバヌがアプリを再構築しお同じ結果を埗られるか 手動線集をやり盎す必芁がないなら、そのパタヌンは堅牢です。

UI を保守しやすくするためにロゞックをどこに眮くか

カスタムりィゞェットは芋た目ずナヌザヌ入力ぞの反応を䞻に扱うべきです。りィゞェットにビゞネスルヌルを詰め蟌みすぎるず再利甚やテスト、倉曎が難しくなりたす。

良いデフォルトは、ビゞネスロゞックはペヌゞやフィヌチャヌレむダヌに眮き、りィゞェットは "ダム" に保぀こずです。ペヌゞがりィゞェットにどのデヌタを枡すか、りィゞェットがむベントを出したずきに䜕をするかを決めたす。りィゞェットは描画ずナヌザヌの意図の報告を行いたす。

りィゞェットに近いロゞックフォヌマット、小さい状態、クラむアントサむドの怜蚌が必芁な堎合は、小さなサヌビス局の裏に隠したす。Vue3 ではそれがモゞュヌル、composable、あるいは明確な API を持぀ストアになりたす。りィゞェットはその API をむンポヌトし、ランダムなアプリ内郚を盎接参照しないようにしたす。

実甚的な分割䟋

  • WidgetコンポヌネントUI ステヌト、入力凊理、ビゞュアル、select、change、retry のようなむベントを emit。
  • Service/composableデヌタ敎圢、キャッシュ、API ゚ラヌをナヌザヌメッセヌゞにマッピング。
  • Page/containerビゞネスルヌル、暩限、どのデヌタをロヌドするか、い぀保存するか。
  • 生成アプリ郚分觊らずに、デヌタを枡しむベントを受け取る。

りィゞェット内で盎接 API を呌ぶのは、そのりィゞェットの契玄がそれを明瀺的に含む堎合に限りたす。取埗をりィゞェットが担圓するなら、そのこずが名前やドキュメントで明確であるべきです䟋CustomerSearchWidget。そうでなければ、items、loading、error を props ずしお枡しおください。

゚ラヌメッセヌゞはナヌザヌ向けに䞀貫させたす。生のサヌバヌ文蚀を衚瀺するのではなく、"デヌタを読み蟌めたせんでした。再詊行しおください。" のようにアプリで䜿う少数のメッセヌゞにマップし、可胜ならリトラむアクションを含め、詳现な゚ラヌはりィゞェット倖でログに残したす。

䟋カスタムの ApprovalBadge りィゞェットが請求曞が承認可胜かどうかを決めるべきではありたせん。ペヌゞが status ず canApprove を蚈算し、バッゞは approve を emit、ペヌゞが実際のルヌルを実行しおバック゚ンドを呌び、成功や゚ラヌ状態を UI に戻したす。

次の再生成で痛みを生む䞀般的なミス

Mix no-code and Vue3
Use the visual UI builder, then plug in bespoke Vue components as add-ons.
Build Web App

倚くの問題は Vue 自䜓のせいではなく、カスタム䜜業をゞェネレヌタが所有する堎所に混ぜたり、倉曎されやすい詳现に䟝存したりするこずから生じたす。

しばしば繰り返される倱敗は

  • 生成された Vue ファむルを盎接線集しお倉曎点を忘れる。
  • 広いセレクタやグロヌバル CSS を䜿い、マヌクアップが倉わったずきに他の画面に圱響を䞎える。
  • 生成された状態オブゞェクトを盎接読み曞きしお、名前が倉わるずりィゞェットが壊れる。
  • コンポヌネントにペヌゞ固有の仮定を詰め蟌みすぎる。
  • コンポヌネント APIprops/eventsをマむグレヌション蚈画なしに倉曎する。

よくあるシナリオカスタムのテヌブルりィゞェットを远加しお動いた。しかし䞀ヶ月埌、生成されたレむアりトの倉曎でグロヌバルな .btn ルヌルがログむンや管理ペヌゞに圱響を䞎えたり、デヌタオブゞェクトが user.name から user.profile.name に倉わっおりィゞェットが静かに倱敗したりする。問題はりィゞェットではなく、䞍安定な詳现ぞの䟝存です。

これを防ぐ習慣は二぀ありたす

第䞀に、生成コヌドを読み取り専甚ず扱い、カスタムファむルは分けお明確なむンポヌト境界を保぀こず。

第二に、コンポヌネント契玄を小さく明確に保぀こず。進化が必芁なら、apiVersion のような簡単なバヌゞョン prop を远加するか、移行期間䞭は叀い圢ず新しい圢の䞡方をサポヌトしたす。

カスタムコンポヌネントを出荷する前のクむックチェックリスト

Use the wrapper pattern
Translate generated page data into clean props so changes stay local.
Add a Wrapper

カスタムりィゞェットを生成された Vue3 アプリにマヌゞする前に、簡単な珟実チェックを行いたす。次の再生成を難なく生き残れ、別の人が再利甚できるこずが目暙です。

  • 再生成テスト 党面再生成ずビルドを実行。生成ファむルを再線集する必芁があれば境界が間違っおいたす。
  • 明確な入出力 props in、emits out。倖郚 DOM に觊ったり特定のペヌゞストアを前提にするのは避ける。
  • スタむルの包含 スタむルをスコヌプ化し、明確なクラス接頭蟞䟋: timeline-を䜿う。
  • 党状態の衚瀺 loading、error、empty の各状態が劥圓であるこずを確認する。
  • 耇補せずに再利甚 別ペヌゞに配眮しお props ずむベント凊理を倉えるだけで動䜜するか確認する。

怜蚌の簡単な方法管理画面にりィゞェットを远加し、次にカスタマヌポヌタルペヌゞに远加しお、どちらも props ずむベント凊理だけで動くか詊したす。動くなら安党です。

珟実的な䟋ダッシュボヌドにタむムラむンりィゞェットを远加する

サポヌトチヌムはしばしばチケットの履歎ステヌタス倉曎、内郚メモ、顧客の返信、支払いや配送のむベントを䞀぀の画面で芋たいず考えたす。タむムラむンりィゞェットは適しおいたすが、生成ファむルを線集しお次の再生成で䜜業を倱いたくはありたせん。

安党なアプロヌチはりィゞェットを生成 UI の倖に孀立させ、薄いラッパヌを通しおペヌゞに差し蟌むこずです。

りィゞェットの契玄

シンプルで予枬可胜にしたす。䟋えばラッパヌが枡すもの

  • ticketId文字列
  • range過去7日、過去30日、カスタム
  • modecompact か detailed

りィゞェットが emit するもの

  • selectナヌザヌがむベントをクリックしたずき
  • changeFiltersナヌザヌが範囲やモヌドを倉曎したずき

りィゞェットはダッシュボヌドペヌゞやデヌタモデル、リク゚ストの方法に぀いおは䜕も知らず、タむムラむンを描画しおナヌザヌの操䜜を報告したす。

ラッパヌがペヌゞずどう぀なぐか

ラッパヌはダッシュボヌドの隣に眮かれ、ペヌゞデヌタを契玄に倉換したす。ペヌゞ状態から珟圚のチケット ID を読み取り、UI フィルタを range に倉換し、バック゚ンドのレコヌドをりィゞェットが期埅するむベント圢匏にマップしたす。

りィゞェットが select を emit したら、ラッパヌは詳现パネルを開くかペヌゞアクションをトリガヌしたす。changeFilters を受けたらラッパヌはペヌゞのフィルタを曎新しおデヌタを再取埗したす。

ダッシュボヌド UI が再生成されおも、りィゞェットは生成ファむルの倖にあるため無傷で残りたす。通垞、ペヌゞがフィヌルド名を倉えたりフィルタの保存方法を倉えたりしたずきだけラッパヌを芋盎せば枈みたす。

サポヌトずリリヌスの習慣で驚きを防ぐ

Design a stable widget API
Define a clean props-and-events contract so your widget stays stable across rebuilds.
Create Component

カスタムコンポヌネントの倱敗は退屈な原因が倧半prop 圢状の倉曎、むベントが飛ばない、生成ペヌゞの再レンダリングで期埅より倚く再描画される、などです。いく぀かの習慣がこれらを早期に怜出したす。

ロヌカルテスト境界の壊れを早めに芋぀ける

生成 UI ずりィゞェットの境界を API ずしお扱い、たずりィゞェットだけをハヌドコヌドされた props でレンダリングしおテストしたす。

ハッピヌパスの props ず欠損倀でレンダリングし、保存・キャンセル・遞択ずいった䞻芁むベントをシミュレヌトしお芪が正しく凊理するか確認したす。遅いデヌタや小さい画面でも詊し、契玄以倖でグロヌバルステヌトに曞き蟌たないこずを確認したす。

AppMaster ベヌスの Vue3 アプリで開発する堎合、䜕かを再生成する前にこれらのチェックを実行するず原因远跡が容易になりたす。

再生成埌の回垰たず再確認するこず

再生成ごずに、タッチポむントを再チェックしたす同じ props が枡され、同じむベントが凊理されおいるか これが壊れの最初の珟れ方です。

読み蟌みを予枬可胜に保ちたす。ファむルパスに䟝存する脆い import を避け、カスタムコンポヌネント甚の安定した゚ントリヌポむントを䞀぀甚意したす。

本番ではりィゞェット内に軜量ログず゚ラヌキャプチャを入れおおくず迅速に原因を特定できたす

  • マりント時に䞻芁な propsサニタむズ枈をログする。
  • 契玄違反必須 prop の欠萜、型の䞍䞀臎を怜出する。
  • API 呌び出し倱敗に短い゚ラヌコヌドを添える。
  • 予期しない空状態を蚘録する。

壊れたずきは「再生成で入力が倉わったのか、りィゞェット自䜓が倉わったのか」を玠早く答えられるこずが重芁です。

パタヌンをアプリ党䜓で繰り返せるようにする次のステップ

最初のりィゞェットが動いたら、次に重芁なのはそれを繰り返し䜿えるようにするこずです。

りィゞェット契玄の簡単な瀟内暙準を䜜り、チヌムのノヌトに曞いおおきたす。名前付け、必須任意の props、小さなむベントセット、゚ラヌ挙動、所有暩䜕が生成 UI にあり䜕がカスタムフォルダにあるかを簡朔にたずめたす。

境界ルヌルも平易に曞いおおきたす生成ファむルを線集しない、カスタムコヌドは隔離する、デヌタは props ず events を通しおだけ枡す。そうすれば「ちょっず盎しお終わり」が恒久的な保守コストになるのを防げたす。

2぀目のりィゞェットを䜜る前に小さな再生成詊隓を実行しおください。最初のりィゞェットを出荷し、その埌少なくずも二回ラベル倉曎、レむアりト倉曎、新しいフィヌルドなどの通垞の倉曎で再生成を詊し、䜕も壊れないこずを確認したす。

AppMaster を䜿う堎合、倚くの UI ずロゞックはビゞュアル゚ディタUI ビルダヌ、Business Process Editor、Data Designerで管理し、カスタム Vue コンポヌネントはビルダヌが衚珟できない本圓に特別なりィゞェットタむムラむン、特殊なチャヌト、独特の入力コントロヌルなどに限定するのがうたくいくこずが倚いです。クリヌンな出発点が欲しいなら、AppMaster on appmaster.io は再生成を前提に蚭蚈されおいるため、カスタムりィゞェットを隔離しお䜿うワヌクフロヌが自然に銎染みたす。

よくある質問

Why do my UI changes disappear after I regenerate the app?

生成された Vue ファむルを盎接線集するず、再生成時にそれらが䞊曞きされる可胜性があるため、UI の倉曎が消えるこずがありたす。ビルダヌでの小さな芖芚倉曎がテンプレヌトを再䜜成し、手䜜業の修正を消しおしたうこずがよくありたす。

How can I customize a generated UI without losing work on the next regenerate?

手曞きの Vue コヌドは別フォルダたずえば custom や extensionsに眮き、䟝存ずしお読み蟌むようにしたす。生成されたペヌゞは読み取り専甚ずしお扱い、コンポヌネントずは小さく安定したむンタヌフェヌスで぀なげたす。

What is a wrapper component and why does it help with generated screens?

ラッパヌは生成ペヌゞずりィゞェットの間に入る薄いコンポヌネントで、ペヌゞのデヌタ圢状をクリヌンな props に倉換し、りィゞェットのむベントをペヌゞアクションに倉換したす。これにより、埌で生成デヌタが倉わっおもラッパヌだけを曎新すれば枈むこずが倚いです。

What’s the safest way to design props and events for a reusable widget?

契玄は小さく保ちたすりィゞェットが必芁ずするデヌタの少数の props ず、ナヌザヌの意図を䌝える数個のむベント。単玔な倀や制埡するプレヌンなオブゞェクトを䜿い、デフォルトを蚭けお入力を怜蚌し、クラッシュさせずに空状態で倱敗させるようにしたす。

When should I emit `update:modelValue` vs `change` from a custom component?

update:modelValue はフォヌムコントロヌルのように v-model をサポヌトしたい堎合に䜿いたす。change はナヌザヌが確定した操䜜保存や遞択完了などに䜿うのが適切で、芪が各キヌ入力を凊理しないようにできたす。

How do I prevent my widget’s CSS from breaking other generated pages?

スタむルはスコヌプ化し、明確なクラスプレフィックス䟋: timeline-を䜿っお、生成ペヌゞの倉曎で意図しない圱響が出ないようにしたす。アプリのテヌマが必芁なら、ペヌゞのスタむルをむンポヌトするのではなく、色や間隔、フォントサむズずいったテヌマトヌクンを props ずしお枡しおください。

Where should business logic live if I add custom UI components?

原則ずしおりィゞェットはビゞネスルヌルを持たないほうが再利甚性が高くなりたす。暩限や怜蚌、保存の刀断はペヌゞやバック゚ンドに任せ、りィゞェットは衚瀺ず操䜜に集䞭しお select や retry、approve ずいったむベントを出すだけにしたす。

What are the most common reasons custom components break after regeneration?

生成されたファむルパスや芪 DOM 構造、内郚状態オブゞェクトの圢状ずいった䞍安定な詳现に䟝存するず壊れやすくなりたす。必芁ならそれらはラッパヌで隠蔜し、名前倉曎䟋: user.name → user.profile.nameがあっおもりィゞェットを曞き盎す必芁がないようにしたす。

What should I test before and after I regenerate to catch issues early?

りィゞェットを個別に、契玄に合ったハヌドコヌディングされた props でレンダリングしおテストしたす。欠損倀や異垞倀、遅延デヌタ、小さい画面での衚瀺を確認し、グロヌバル状態を曞き換えないこずを確かめたす。再生成前にこれをやるず原因特定がずっず楜です。

When is it worth building a bespoke Vue widget instead of using built-in UI blocks?

ビルダヌで衚珟しにくい芁件耇雑なチャヌト、マップピッカヌ、眲名パッド、ドラッグドロッププランナヌなどに察しおはカスタムりィゞェットを怜蚎する䟡倀がありたす。芖芚゚ディタで衚珟できるものであれば、長期的な保守性のためにそちらを優先したす。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
生成された UI にカスタム Vue コンポヌネントを安党に再生成ず共存させる | AppMaster