Skip to content

エアギャップ環境とオフライン配備

すべてのスタイルシート、スクリプト、フォント、アイコンが自分のインストールから配信されます。ログインとサインアップを含む 14 テンプレート全体で、実測 62 リクエスト・外部ゼロを検証済みです。

Potato はすべてのスタイルシート、スクリプト、フォント、アイコンを自身のインストールから配信します。 インターネットへの経路がないマシンでも、高速回線のマシンとまったく同じインターフェースが表示されます。実際にレンダリングしたアノテーションページで検証した結果は 62 リクエスト、外部ゼロ。ログインページとサインアップページも含みます。

これはセキュアな研究環境、臨床現場、フィールド配備、そして厳格なプロキシの内側にあるあらゆるマシンで意味を持ちます。可用性の性質であると同時に、プライバシーの性質でもあります。

インストールから配信されるアセット

Fabric.js(画像キャンバス)、jQuery、Bootstrap、Font Awesome、インターフェース書体の Outfit、three.js(点群)、OpenSeadragon(ディープズーム)、d3、Peaks.js(音声波形)、PDF.js、そして Potato 自身の CSS と JavaScript のすべてです。

このうち二つは装飾ではなく必須です。jQuery がなければスパンアノテーションはまったく動作しません。Fabric.js がなければ画像キャンバスが初期化されず、描画ツールは表示されるのに何も描けません。

フォントはプライバシー漏洩だった

styles.css は Google Fonts の @import で始まっていました。オフラインで壊れるだけでなく、これはページ読み込みのたびに全アノテーターの IP アドレスと User-Agent を第三者へ送っていたことになります。しかも、データを自分たちのインフラから出さないためにこそ自前でホストしているツールから、です。

これは過去三回のエアギャップ監査を生き延びていました。どの検査もテンプレート内の <script src><link href> を見ており、スタイルシート内部の @import はそのどちらでもないからです。書体は現在 SIL Open Font License のもとで同梱されています。

ログインページとサインアップページにあった第三者の favicon も同じ理由で削除しました。ユーザーが認証情報を入力するページから、他社のサーバーへリクエストが飛ぶという状況だったためです。

14 テンプレート全体をカバー

カバー範囲にはログイン、サインアップ、パスワードリセット、エラーページも含まれます。これらはエアギャップ監査でもっとも見落とされやすく、しかしもっとも影響の大きいページです。

同梱ファイルはチェックサムで検証

同梱物はすべて、その CDN が公開しているハッシュと照合され、一致しなければ拒否されます。同梱ファイルはコミットされるため、検証されていないダウンロードはそのリリースの全ユーザーに届いてしまうからです。

二つのガードの許可リストはどちらも空であり、エントリが何にも一致しなくなるとガードは失敗します。したがって例外が黙って恒久化することはありません。

「エアギャップ」の正確な意味

アプリケーション自体はネットワークを必要としません。モデルは一度きりの転送です。接続されたマシンで potato download-models を実行し、ディレクトリをコピーしてください。OpenAI、Anthropic、Gemini など、設定したホスト型 AI エンドポイントは当然ながら外部への経路を必要とします。

したがって正確な言い方は「セットアップ不要でエアギャップ」ではなく、**「重みがマシン上にあればエアギャップ」**です。

関連ページ