OpenVessel

DOCUMENTATION

ドキュメント

OpenVessel を組み込む人と、中に手を入れる人のための、細かい技術仕様です。API のすべての引数と戻り値、カーネルのシステムコール、シェルとコマンドのオプション、npm の動き、Node.js の層の作りまで載せています。

OpenVessel 1.1.1 Node.js v22.23.4 英語版(GitHub)↗

はじめに

最初に読むページ。動くところまでの手順です。

  1. 01

    はじめに

    空の Web ページから、OpenVessel の中でプロジェクトを動かすところまでを順に説明します。パッケージを入れ、3 つのオリジンにファイルを置き、起動し、Node.js の層を選び、プロジェクトを書き込み、npm install・ビルド・開発サーバーとプレビュー・対話のターミナル・後片付けまでです。

組み込む

自分のアプリに OpenVessel を埋め込む人のための仕様です。

  1. 02

    ホスト API

    埋め込む側のページが使う API の、すべての仕様です。OpenVessel.boot() とそのオプション、ファイル、プロセス、通信の方針、イベント、許可の問い合わせと組み込みのダイアログ、プレビュー、後片付け、エラーを扱います。

  2. 03

    通信の方針

    OpenVessel の中からタブの外のホストへ届くものは、すべて 1 つの関所を通ります。その関所が何を通すかは、埋め込む側のページが決めます。

  3. 04

    配信

    OpenVessel を本番に置く方法です。dist/ の中身、どのディレクトリをどのオリジンに置くか、各オリジンに必要な HTTP ヘッダーとその理由、キャッシュ、ヘッダーを付けられないホスト、パスの下での配信、セッションごとのプレビューのオリジン、サーバーの設定例をまとめます。

  4. 05

    プレビュー

    OpenVessel の中で動くサーバーを iframe に表示するしくみです。中継の iframe とプレビューの Service Worker、 __ov/open の URL、HTTP の要求・応答と WebSocket を仮想ポートまで運んで戻す方法、差し込むスクリプトの役目、プレビューにできることとできないことをまとめます。

  5. 06

    通信の形式

    OpenVessel の部品どうしのやり取りの形です。ホスト ↔ ランタイムの手順と RPC、カーネルのイベント、プレビューの中継とプレビューの通り道、ランタイムの Service Worker の /__ov/… の窓口、カーネルとプロセスの Worker のメッセージ、同期のシステムコールの通り道をまとめます。

中のしくみ

カーネル・シェル・npm・Node.js の層を、ひとつずつ詳しく。

  1. 07

    カーネル

    カーネルは OpenVessel の「OS」です。Web Worker 1 つが、ファイルシステム・プロセスの表・パイプ・端末・ソケット・仮想ポート・ネットワークへの出口を受け持ちます。

  2. 08

    ファイルシステム

    OpenVessel には、カーネルの Worker の中にある、メモリ上の POSIX 風のファイルシステムが 1 つあります(src/kernel/vfs.ts)。

  3. 09

    プロセス

    このページでは、OpenVessel のカーネルのプロセスを定めます。始まりから終わりまでの流れ、プログラムの見つけ方と起動のしかた、ファイル記述子と標準入出力、パイプとソケット、シグナル、プロセスグループ、端末(TTY)です。

  4. 10

    シェルとコマンド

    このページは、シェル sh(bash と dash としても入っています)と、カーネルに組み込まれたコマンドラインのプログラムすべての仕様です。

  5. 11

    パッケージマネージャ

    OpenVessel は、カーネル向けに書いた自前のパッケージマネージャを持ち、npm・pnpm・yarn・bun をその入口にしています。

  6. 12

    ネイティブのモジュール

    ブラウザのタブは機械語を読み込めないので、OpenVessel はネイティブアドオン(.node ファイル)を決して動かしません。

  7. 13

    Node.js の層

    プロセスの Worker の中で Node.js がどう動くかの仕様です。ビルドに入っている 2 つのランタイムと選び方、移植版ランタイムの起動の順序、コマンドライン、環境、イベントループ、モジュールの読み込み、TypeScript、fetch、そして Node.js とわざと違えている所を扱います。

  8. 14

    バインディング

    Node の lib/ は internalBinding(name) を通して C++ の半分とやり取りします。このページは、移植版ランタイムが知っているバインディングの名前を全部挙げ、それぞれをどのファイルが実装しているか、どこまでできているか、どうまねているかを示します。

開発に加わる

OpenVessel そのものをビルドし、試験する人へ。

  1. 15

    ビルドと保守

    OpenVessel をソースからビルドし、新しく保つ方法です。要る道具、npm のスクリプト、ビルドのスクリプトがそれぞれ何を読んで何を書くか、Node.js の新しい版への追従、リリースの出し方を扱います。

  2. 16

    試験

    OpenVessel の試験には 4 つの層があります。Node.js で動かす単体の試験(バインディングを本物の Node と突き合わせる差分の試験を含む)、ヘッドレスの Chrome でプレイグラウンドを動かす端から端までの試験、OpenVessel の中で動かす Node.js 自身の試験、本物の Astro のサイトのコーパスです。

まず動きを見たいときはデモを、全体の考え方はアーキテクチャを見てください。ドキュメントの誤りは GitHub の issue で教えてください。