本文へスキップ

デプロイポリシー

Vifu は、ビルド済み出力をレビュー対象の実行成果物として扱います。

つまり、ゲームを実行する JavaScript はデプロイ成果物の中に入っている必要があります。Vifu deploy は CDN スクリプトをダウンロードしたり、HTML を書き換えたり、依存関係を同梱化したり、デプロイ用ロックファイルを作ったりしません。

短いまとめ

許可:

  • ビルド出力内の同梱済み JavaScript
  • ビルド出力内のローカルアセット
  • Google Fonts
  • 承認済みパッケージ CDN からの、バージョン固定された静的 CSS、フォント、画像、メディア
  • 通常の外部リンク
  • @vifu/sdk または window.Vifu 経由の AI / バックエンドアクセス

ブロック:

  • CDN JavaScript
  • リモート import(...)importScripts(...)、Worker スクリプト
  • リモート .js.mjs.wasm URL
  • ゲーム JavaScript からの外部 AI / バックエンド API 直接呼び出し
  • デプロイ成果物に残った LM Studio / Ollama などのローカル専用プロバイダー

なぜリモート JavaScript をブロックするか

Vifu 上で動くゲームはマネージド iframe で実行され、AI、セーブ状態、リソース、AI パートナーの操作などのプラットフォーム機能にアクセスできます。リモート JavaScript を実行できると、レビューした成果物とは別のコードが実際に動いてしまいます。

CSS、フォント、画像、メディアはゲームロジックを定義しないため、種類ごとの CSP で承認済みの静的リソースとして扱います。

良い例

html
<link
  rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/[email protected]/dist/theme.css"
>
ts
const result = await Vifu.ai.generateText({
  model: "basic",
  messages: [{ role: "user", content: "Give a short hint." }]
});

ブロックされる例

html
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/phaser.min.js"></script>
ts
await import("https://cdn.jsdelivr.net/npm/@mediapipe/[email protected]/+esm");
fetch("https://api.openai.com/v1/chat/completions");
fetch("http://localhost:1234/v1/chat/completions");

CLI エラーの読み方

vifu deploy は、失敗したビルド済みファイル、行、ルール、URL、理由、修正方法を表示します。

text
Vifu deploy blocked this runtime artifact.

1. Remote JavaScript import
   Built file: chunk.js:2
   Rule: remote code import
   URL: https://cdn.jsdelivr.net/npm/@mediapipe/[email protected]/+esm
   Why blocked: Remote JavaScript/WASM would execute outside the reviewed deploy artifact.
   Fix: Bundle the dependency locally, remove the unused provider/import, or lazy-load it only in a non-deployed build profile.

ランタイム CSP

  • script-src に CDN JavaScript ホストは入りません。
  • connect-src は Vifu platform API に制限されます。
  • style-srcfont-srcimg-srcmedia-src は種類ごとに承認済みの静的リソースホストを許可できます。
  • Worker / eval の扱いは内部ランタイムルールであり、公開マニフェストで切り替えるものではありません。