マイクロフロントエンドアプリ (view.page)
view.page エントリは、Web Hostがiframe内に読み込む完全なシングルページアプリケーションを記述します。各ページエントリはホストのルーターでURLパスを確保し、独自の分離されたブラウジングコンテキストを得て、プロキシレイヤーを通じてホストから注入されるCSSと設定を受け取ります。
フロントエンドのフィールド(package.json の wippy ブロック)
これらのフィールドは、FE開発者が package.json の wippy ブロックに記述します。viteプラグインがビルド時にそれらを wippy-meta.json に焼き込み、wippy/views がそこからデフォルトとして読み取ります。
このセクションのすべてのフィールドは、運用者が
_index.yamlでオーバーライドできます。YAMLが常に優先されます。
表示とナビゲーション
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
title |
string | — | ナビゲーションサイドバーとブラウザのタブに表示されるラベル |
icon |
string | — | Iconifyのアイコン参照。例: tabler:layout-dashboard |
type |
string | — | "page" でなければならない |
path |
string | — | バンドル出力ディレクトリ内の、ビルド済みHTMLエントリファイルへのパス |
レンダリングエンジン
renderEngine は、このページのページレンダリングエンジンを選択します(view.page のみ)。エンジンはアプリコードから透過的で、同じページはどちらでも同一にレンダリングされます。したがって、ページをフラグメントエンジンから離脱させる、または参加させる場合にのみ設定してください。
| 値 | 効果 |
|---|---|
"auto" (デフォルト、または省略時) |
デプロイのグローバルスイッチ(ファサードの render_engine パラメータが設定する hostConfig.renderEngine)に従う。 |
"iframe" |
スイッチに関わらず常にsrcdoc iframeとしてレンダリングする。reframedと非互換の技術を使うページに使用します。ポインタのヒットテスト(elementFromPoint)、ビューポート単位(vh/vw、matchMedia)のレイアウト、position: fixed など。 |
"fragment" |
Web Fragmentエンジンを優先する。グローバルが fragment のデプロイでは常に使用。グローバルが iframe のデプロイでは、ランタイムのケーパビリティプローブが /@fragment ゲートウェイとプロキシの存在を確認した場合のみ使用(それ以外はiframeにフェイルセーフ)。 |
{
"wippy": {
"type": "page",
"renderEngine": "auto"
}
}
エンジンモデル全体とフラグメントの制限については、レンダリングエンジンを参照してください。
プロキシの設定
プロキシの注入には2つの面があります。FE開発者は、フロントエンドの package.json の
wippy ブロックに、小文字始まりのcamelCaseのキー(themeConfig、primevue、customCss)で
デフォルトを記述します。Viteプラグインがそれらを wippy-meta.json に焼き込みます。運用者は、
レジストリYAMLの meta: の下に置いた proxy: ブロックでそれらをオーバーライドします。
レジストリのフィールドは、普遍的なケーシング規則ではなく、それぞれのドキュメント化された
スキーマに従います。ネストされたプロキシのキーは定義された小文字始まりのcamelCaseの名前を保ち、
ホストはキーを変換せずにそのYAMLを焼き込み済みのフロントエンドデフォルトの上に深くマージします。
{
"wippy": {
"type": "page",
"proxy": {
"enabled": true,
"injections": {
"css": {
"themeConfig": true,
"iframe": true,
"primevue": true,
"markdown": false,
"customCss": true,
"customVariables": true
},
"tailwindConfig": false,
"resizeObserver": false,
"preventLinkClicks": false,
"iconifyIcons": false,
"errorCapture": true
}
}
}
}
proxy.enabled: true は、Web Hostがページを自身のプロキシiframeハーネスで包むことを意味します。このハーネスは、ページのバンドルが評価される前に window.__WIPPY_APP_CONFIG__ と関連するグローバルを書き込みます。
proxy.injections が省略された場合、iframeプロキシは寛容なランタイムデフォルトを使い、ほとんどの注入を有効にします。以下の一覧は、典型的なViteマイクロフロントエンドアプリで推奨される明示的な値であり、ランタイムのデフォルトではありません。これにより、パッケージのレビュアーがページの意図を把握できます。
推奨される明示的な注入値
これらは、マイクロフロントエンドアプリが通常宣言するフラグと、典型的なVite SPAで設定すべき値です。ランタイムのデフォルトではありません。
css.themeConfig(true) — アクティブなテーマのCSSカスタムプロパティcss.iframe(true) — 必須のデフォルトのテーマ付きスクロールバースタイル。iframeは歴史的な名前であり、現在のシートはレイアウトのリセットを提供しませんcss.primevue(true) — PrimeVueコンポーネントのベーススタイルcss.markdown(false) — markdownレンダリングのスタイルcss.customCss(true) — 子に投影されるカスタムCSScss.customVariables(true) — 子に投影されるCSS変数のオーバーライドtailwindConfig(false) — ホストのTailwind設定オブジェクト(CDN Tailwindのみ)resizeObserver(フルSPAではfalse) — 子のbodyサイズをホストに更新するpreventLinkClicks(ページではfalse) —<a>のクリックをclassifyLinkを通してルーティングするiconifyIcons(false) — ホストのIconifyコレクションを事前読み込みするerrorCapture(true) — iframe内の未捕捉エラーをホストへ転送する
ほとんどのフルSPAページは、自身でレイアウトとルーティングを管理するため、resizeObserver: false と preventLinkClicks: false を設定します。テンプレートの main アプリは、開発中に未捕捉エラーを表面化するため errorCapture: true を設定しています。
Webフォント専用の注入フラグはありません。Google Fontsは theming.global.customCSS(テーマのカスタムCSS内の @import)を通じて配信され、既存の css.customCss フラグによって注入されます。
フラグの完全なリファレンスとランタイムのデフォルト: CSS注入。
運用者の設定(_index.yaml)
これらのフィールドは、運用者が _index.yaml のレジストリエントリの meta ブロックに設定します。その多く(announced、secure、url、base_path、mountRoute、auto_register、inline)は、デプロイ時にのみ意味を持ち package.json に記述面を持たない、デプロイポリシー(ルーティング、アクセス制御、配信)を表します。唯一の例外は entry_point です。これはFE側で記述され(viteプラグインは package.json の wippy.path を必須とし、それを wippy-meta.json に焼き込みます)、meta.entry_point フィールドはその焼き込み済みデフォルトに対する任意のデプロイごとのオーバーライドにすぎません。
必須のYAMLの形: ページエントリは
kind: registry.entryでmeta.type: view.pageです。kind: view.pageと書いてはいけません。
- name: main
kind: registry.entry
meta:
type: view.page
name: main
デプロイポリシーのフィールド(
announced、secure、url、base_path、mountRoute、auto_register、inline)はpackage.jsonでは設定できません。これらは環境ごとに運用者が設定します。entry_pointは異なり、package.jsonのwippy.pathとして記述され、YAMLの値はそのデフォルトをオーバーライドするだけです。
URLとファイル配信
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
url |
string | — | バンドルがマウントされるベースURLプレフィックス(CDNオリジンまたはローカルの http.static パス)。YAML専用 — package.json に記述面はない |
base_path |
string | — | 静的マウント内のサブディレクトリ。YAML専用 — package.json に記述面はない |
entry_point |
string | index.html |
読み込むHTMLファイル。url と base_path と組み合わされる。package.json の wippy.path としてFE側で記述される(wippy-meta.json に焼き込まれる)。YAMLの値は任意のデプロイごとのオーバーライド |
解決されるエントリURLは <url>/<base_path>/<entry_point> です。運用者は、複数の _index.yaml エントリを同じ base_path に向け、異なる entry_point や config_overrides の値を与えることで、同じバンドルを複数のエントリの下にデプロイできます。
url や base_path とは異なり、entry_point はデプロイ専用のフィールドではありません。これはFE開発者が package.json の wippy ブロックに wippy.path として記述し、viteプラグインが wippy-meta.json に焼き込みます。プラグインはこれを必須とし、省略された場合は wippy.path is required for a page package をスローします。_index.yaml の meta.entry_point フィールドは、その焼き込み済みデフォルトをデプロイごとにオーバーライドするだけです。解決順序は YAMLの entry_point → バンドルされた wippy.path → index.html です。
可視性とアクセス
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
announced |
boolean | — | true → ページが GET /api/public/pages/list とナビゲーションサイドバーに現れる |
secure |
boolean | false |
true → 認証が必要。未認証のリクエストは401になる |
inline |
boolean | false |
true → ページがすべての一覧(サイドバー、API)から隠される。埋め込みのアーティファクトビューアや補助的なルートに使用 |
announced: false はページをナビゲーションから隠しますが、読み込みを妨げません。iframeや直接のURLは依然として機能します。inline: true はより厳格で、公開向けのすべての一覧からページを抑制します。
マウントルート
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
mountRoute |
string | — | ホストのルーターでURLパスを確保する。ブラウザが一致するパスに遷移すると、ホストはこのページをレンダリングする |
一時的な互換性のための綴り:
meta.mountRouteは現在のバックエンドの ケーシングのバグです。意図されているバックエンドのフィールドはmeta.mount_routeで、 将来のバックエンドリリースで変更される見込みです。そのバックエンドの変更が出荷されるまではmeta.mountRouteを使用してください。アップグレード時には対象のWippyバージョンを再確認してください。
mountRoute はv1のcatch-all形式のみを受け付けます。/:part(.*)*(ルート)または /<literal-prefix>/:part(.*)* で、プレフィックスは小文字英数字とハイフンからなる1つ以上のセグメントであり、必須のワイルドカード :part(.*)* で終わります。任意のVue Routerのパターン(名前付きパラメータ、カスタム正規表現、異なるパラメータ名。例: /home/:id、/users/:userId(\d+))は拒否されます。ホストは syntax のマウントルート衝突を発生させ、GET /api/public/pages/routes はHTTP 500を返し、致命的な全画面エラーとして表示されます。:part(.*)* ワイルドカードにより、ホストがトップレベルのパスの所有権を保ったまま、子アプリケーションが自身のサブルートを管理できます。
mountRoute: /home/:part(.*)*
Web Hostは起動時に GET /api/public/pages/routes を取得し、mountRoute を持つ各エントリについて router.addRoute() を呼び出します。同期メカニズム全体については動的ルーティングを参照してください。
ページごとの設定オーバーライド
| フィールド | 型 | 説明 |
|---|---|---|
config_overrides |
object | Web Hostがiframeに注入するAppConfigの値の上に深くマージされる |
config_overrides はレジストリ側のラッパー名です。そのネストされたオブジェクトは
既にフロントエンドスキーマの小文字始まりcamelCaseのキー、例えば
customization.customCSS や customization.cssVariables を使用します。Web Hostは
wippy-meta.json からバンドルされた wippy.configOverrides の上に、それらの正確なキーを
深くマージします。ネストされたキーごとにYAMLの値が優先されます。
config_overrides はページに注入されるAppConfigを変更します。プロキシの注入フラグは変更しません。特に、config_overrides が proxy.injections、wippy.proxy.injections、CSS/スクリプト注入のランタイムデフォルトに影響することはありません。デプロイに対してプロキシの注入フラグをオーバーライドするには、運用者によるプロキシのオーバーライドで説明されている meta.proxy を使用してください。
典型的な用途は、同じバンドルをカスタムのカラーパレットで実行することです:
- name: iframe-demo-themed
kind: registry.entry
meta:
type: view.page
name: iframe-demo-themed
title: Iframe Demo (Custom Palette)
icon: tabler:paint
order: 4
announced: false
secure: false
url: /app
base_path: app/iframe-demo
entry_point: app.html
mountRoute: /demo-themed/:part(.*)*
config_overrides:
customization:
cssVariables:
"--p-primary": "#7c9ed9"
"--p-primary-color": "#7c9ed9"
"--p-danger": "#e8a0a0"
customCSS: |
/* ここでのパレット値は意図的なページテーマの定義であり、モジュールCSSではありません。 */
:root { font-family: var(--wippy-brand-font, sans-serif); }
announced: false は view.page エントリで有効であることに注意してください。ページは mountRoute 経由で到達可能ですが、サイドバーには現れません。
運用者によるプロキシのオーバーライド(_index.yaml)
wippy-meta.json に(package.json の wippy ブロックから)焼き込まれたプロキシ注入の
デフォルトは、レジストリエントリの meta: の下に置いた proxy: ブロックで、
デプロイごとにオーバーライドできます。ファサードのrequirement名は、ドキュメント化された
スネークケースの名前を使用します。レジストリのフィールドには現在、一時的なバックエンドの
ケーシングのバグが1つ含まれています。ラッパーは config_overrides ですが、ルートの
フィールドは mount_route に修正されるまで mountRoute として読まれます。
ネストされたproxy/configのオブジェクトはそのまま渡され、定義された小文字始まりcamelCaseの
キーを保持します。ホストは meta.proxy をバンドルされた wippy.proxy の上に深くマージします。
短い答え: data.proxy ではなく meta.proxy を使用すること。config_overrides のような
トップレベルのバックエンドフィールドはスネークケースのままにし、themeConfig や
customCss のようなネストされたproxy/configのキーは保持すること。injections の
ラッパーは残すこと。meta.config や meta.configOverrides を発明してはいけません。
ページごとのオーバーライドの正確なラッパーは meta.config_overrides です。
2つのフロントエンドの綴りを明確に区別してください:
- バックエンドの
meta.proxy.injections.css.customCssはwippy.proxy.injections.css.customCssのままです。 - バックエンドの
meta.config_overrides.customization.customCSSは、フロントエンドのwippy.configOverrides.customization.customCSSおよびランタイムのconfig.theming.global.customCSSに投影されます。 - どちらのフロントエンドの形についても、
appConfigというラッパーを発明してはいけません。
- name: dashboard
kind: registry.entry
meta:
type: view.page
name: dashboard
url: /app
base_path: app/dashboard
entry_point: app.html
proxy:
enabled: true
injections:
css:
themeConfig: true
iframe: true
primevue: true
customCss: true
customVariables: true
tailwindConfig: false
iconifyIcons: false
オーバーライドされるのは設定したキーだけで、それ以外は wippy-meta.json に焼き込まれた値を保ちます。フラグの完全なリファレンスとランタイムのデフォルト: CSS注入。