メインコンテンツまでスキップ

Node サイドカー

NeoTavern のバックエンドは Fastify サーバーで、デスクトップアプリでは組み込み Node.js サイドカーとして実行されます: シェルの隣にパッケージ化された自己完結型 Node.js 24 バイナリです。

なぜサイドカーなのか

バックエンドを別プロセスとしてバンドルすることで、シェルは薄く、バックエンドは本物に保たれます:

  • バックエンドはセルフホストインストールが実行するのと同じ Fastify 5 アプリケーションであるため、デスクトップとサーバーの動作は同一のままです。
  • Node.js と SQLite がディストリビューションにコンパイルされているため、初回起動に npm インストールもターミナルも不要です。
  • プロセス境界により、バックエンドのクラッシュやハングがシェルのイベントループを倒すことはできず、シェルはライフサイクルの保証を強制できます。

起動

起動時にシェルはサイドカー実行ファイルをスパウンし、ウェブビューを開く前に準備完了を待ちます。バックエンドは:

  • 127.0.0.1 のランダムな空きポートのみでリッスンします;
  • SQLite データベースを作成し、保留中のスキーママイグレーションをデータディレクトリで実行します。保留中のマイグレーションの前にバックアップを取ります;
  • 本番 Web アセットと API を提供します。

初回起動は完全に自動です: データディレクトリ、データベース、同梱テーマ、スターターキャラクターがユーザーの操作なしでセットアップされます。

正常なシャットダウン

シャットダウンは協調的で順序付けられています:

  1. シェルが閉じるイベントを受け取り、バックエンドに停止を伝えます。
  2. バックエンドは新しい接続の受け入れを停止し、デッドライン内で進行中の作業を完了し、データベースをきれいに閉じます。
  3. サイドカーが終了し、シェルが終了します。

予期しないバックエンドの終了はシェルによって検出され、エラー終了として報告され、バックエンドプロセスが静かに孤児化されることはありません。したがって、アプリはウィンドウを閉じた後に迷子の neotavern-server プロセスを残すことはありません。

バンドルと検証

サイドカーはターゲットプラットフォームごとにビルドされます。ネイティブアドオン(better-sqlite3、Sharp)と本番 Web アセットは同じターゲットランナーで準備され、実行ファイルとともにパッケージ化されます。OS 間での準備済みリソースの移動はサポートされません。スモークゲートは各プラットフォームの CI でパッケージ化されたサイドカーをヘッドレスで実行し、実際の Node 実行ファイル、SQLite、Sharp、パッケージ化された SPA、診断、残留プロセスの不在を検証します。

ポータブルバリアント

Windows ポータブルビルドは同じサイドカーレイアウトを実行します: メイン実行ファイル、サイドカー実行ファイル、portable.flag マーカー、resources/ フォルダです。フラグはデータルートをアプリケーションの隣のローカル data/ フォルダに切り替えます。シェルはパッケージ化された Node バイナリに渡す前に Windows リソースパスを正規化します。

フォーマットと初回起動の体験はパッケージング を、このプロセスを管理するシェルはTauri シェル を参照してください。