Skip to content

Tuvix.jsとは? ​

Tuvix.jsは、ブラウザ向けのマイクロフロントエンドツールキットです。ホストページ(シェル)がマイクロアプリを登録すると、Tuvix.jsは各アプリのコードを読み込み、コンテナにマウントし、プロパティを渡し、URLやコードの指示に応じてアンマウントします。各マイクロアプリはReact、Vue、Svelte、Angularのいずれか、またはフレームワークなしで作成でき、各チームはそれぞれのスケジュールでアプリをビルドしてデプロイできます。

できること ​

  • マイクロアプリをオーケストレーションします。 createOrchestrator()はアプリのレジストリを保持します。アプリごとに現在のパスからマウントすべきかどうかを判断し、リコンサイルを一度に1つずつ実行するため、コンテナを共有する2つのアプリが重なることはありません。
  • コードを必要なときに読み込みます。 アプリのentryには、スクリプトURL、スクリプトとスタイルシートのリスト、または() => import('./dashboard')のような関数を指定できます。ローダーは失敗した読み込みを再試行し、遅い読み込みを中断します。
  • URLでルーティングします。 activeWhen: '/dashboard/*'は、/dashboardとその配下のすべてのパスでアプリをマウントします。組み込みのルーターを使うことも、connectRouter()でTanStack RouterやReact Routerに追従することもできます。
  • フレームワークに適応します。 createReactMicroApp、createVueMicroApp、createSvelteMicroApp、createAngularMicroAppは、ルートコンポーネントをmount、update、unmountを持つモジュールに変換します。
  • Reactページ内でアイランドをホストします。 TuvixIslandは、サーバーレンダリングされたReactツリー内にVue、Svelte、Angular、Reactのマイクロアプリをマウントし、サーバーHTMLを二重に送信することなくハイドレートします。SSRアイランドを参照してください。
  • ライフサイクルを通知します。 アダプターとdefineMicroAppはtuvix:mounted、tuvix:unmounted、tuvix:errorのDOMイベントをディスパッチし、whenMounted(name)はアプリがページに表示されると解決します。ライフサイクルイベントを参照してください。
  • アプリ同士をつなぎます。 各アプリが@tuvix.js/event-busの独自のコピーをバンドルしている場合でも、ページ上のすべてのアプリはgetGlobalBus()を通じて1つのイベントバスを共有します。
  • 必要に応じてCSSを分離します。 sandbox: trueはアプリをShadow Root内にレンダリングするため、ページのCSSとアプリのCSSが分離されたままになります。

使うべき場面 ​

複数のチームが1つのページの各部分を提供し、それぞれ個別にデプロイする必要がある場合や、レガシーアプリを別のフレームワークで書き直したアプリと並行して動かし続けたい場合に、Tuvix.jsを使ってください。サーバーレンダリングを行うReactサイト内にVueやSvelteのウィジェットを組み込みたい単一チームにも適しています。

使うべきでない場面 ​

  • 1つのチーム、1つのフレームワーク、1つのデプロイ:通常のシングルページアプリのほうがシンプルです。
  • アプリ間に厳密なセキュリティ分離が必要な場合。Tuvix.jsはすべてのアプリを同じJavaScriptレルムで実行します。@tuvix.js/sandboxのJsSandboxはプロキシ経由で行われたグローバルへの書き込みを隠しますが、アプリがwindowにアクセスすることは防げません。信頼できないコードには<iframe>を使ってください。
  • すべてのアプリで状態を共有する単一のバンドルが必要な場合。マイクロアプリは設計上、イベントとプロパティを通じて通信します。

パッケージ ​

パッケージ用途
tuvix.jscore、router、event bus、loader、sandboxを1回のインストールで導入
@tuvix.js/corecreateOrchestrator、defineMicroApp
@tuvix.js/routercreateRouter、matchPath、interceptLinks
@tuvix.js/loaderエントリーの読み込みとライフサイクルランタイム(whenMounted、onLifecycle)
@tuvix.js/event-buscreateEventBus、getGlobalBus
@tuvix.js/sandboxCssSandbox、JsSandbox
@tuvix.js/react、vue、svelte、angularフレームワークアダプター、TuvixIsland(React)
@tuvix.js/viteサーバーレンダリングされる<head>向けのアイランドのスタイルシートリンク
@tuvix.js/serverHTMLフラグメントのサーバーサイドでの合成
@tuvix.js/module-federationwebpack Module Federationのリモートから読み込むエントリー
@tuvix.js/devtoolsページ内デバッグパネル
create-tuvix-appプロジェクトのスキャフォールディング

主要な概念 ​

用語意味
シェルオーケストレーターを作成し、レイアウトを管理するホストページ
マイクロアプリmountとunmount(およびオプションのbootstrap、update)を持つモジュール
エントリーローダーがマイクロアプリを取得する場所:URL、{ scripts, styles }、またはローダー関数
コンテナマイクロアプリのレンダリング先となる要素
アイランドホストがサーバーレンダリングし、クライアントがその場でハイドレートするマイクロアプリ
イベントバスページ上のすべてのアプリが共有するpub/subチャネル

次のステップ ​

  • はじめにでは、シェルと2つのマイクロアプリを構築します。
  • アーキテクチャでは、ナビゲーションがどのようにマウントにつながるかを説明します。
  • 0.4から移行する場合は、0.5への移行をお読みください。