CLI リファレンス
zfb コマンドラインインターフェースの完全なリファレンス — サブコマンド、フラグ、環境変数。
概要
zfb バイナリは、開発ライフサイクル全体をカバーする 5 つのサブコマンドを提供します。
zfb new — テンプレートから新しいプロジェクトをスキャフォールドする
zfb dev — ライブリロード付きのローカル開発サーバー
zfb build — プロダクションビルド
zfb preview — ビルド済みサイトを配信する
zfb check — 型チェックとコンテンツコレクションのスキーマ検証zfb --help または zfb <subcommand> --help を実行すると、生成されたヘルプテキストを直接確認できます。
zfb new
組み込みテンプレートから新しいプロジェクトをスキャフォールドします。
zfb new <name> [--template <template>]引数
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
name | 位置引数 | はい | 新しいプロジェクトの名前。作成先ディレクトリとして使われます。 |
--template | string | いいえ | スキャフォールド元となるテンプレート。デフォルト: basic-blog。 |
テンプレート
v0 は 2 つのテンプレートを同梱しており、どちらもコンパイル時に crates/ からバイナリに焼き込まれています。
basic-blog(デフォルト)—package.jsonを備えたフル機能のブログスキャフォールド。pnpm がPATHにある場合、zfb newは自動的にpnpm installを実行します。node-free—package.jsonを同梱せず、スキャフォールド後のpnpm installステップも完全にスキップします。PATHに Node / pnpm がない環境で実行するプロジェクト向けです。.md/.htmlによるページ作成については Markdown と HTML ページ を、Node なしでzfbバイナリ自体をインストールする方法については Node なしでインストール を参照してください。
例
zfb new my-site
zfb new my-site --template basic-blog
zfb new my-site --template node-freezfb dev
ライブリロード付きのローカル開発サーバーを起動します。
zfb dev [--port <port>] [--host [<host>]]フラグ
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
--port | u16 | 3000* | dev サーバーがバインドするポート。 |
--host | string | localhost* | バインドするホストインターフェース。値なしの --host は 0.0.0.0 のショートカットです。 |
* 次の順にフォールバックします: CLI フラグ → zfb.config.json の port/host → 組み込みのデフォルト。
遅延レンダリング
dev サーバーはデフォルトで 遅延レンダリング を行います: 変更されたルートは stale とマークされ、すべてのファイル変更時に即座にではなく、最初のリクエスト時に再レンダリングされます。これにより、大規模サイトでも開発のインナーループを高速に保ちます。
遅延以前の挙動に戻し、各ファイル変更時に影響を受けるすべてのルートを即座に再レンダリングするには、ZFB_DEV_EAGER=1 を設定します。
環境変数
| 変数 | 値 | 説明 |
|---|---|---|
ZFB_DEV_EAGER | 1 | dev の遅延レンダリングを無効化します。各ファイル変更時に影響を受けるすべてのルートを即座に再レンダリングします。 |
ZFB_LAZY_DEV_RENDER | 0 または 1 | 遅延 dev レンダリングスイッチの厳密なオーバーライド。1 は遅延を強制し、0 は即時を強制します。両方が設定されている場合は ZFB_DEV_EAGER より優先されます。 |
ZFB_DEV_BOOT_LAZY | 1 | 高速起動のオプトイン: 有効なビルド済み dist/ が存在する場合、それを即座に配信し、起動時にすべてのルートをレンダリングする代わりに、ルートごとのレンダリングを最初のリクエストまで遅延します。遅延レンダリングが必要です(ZFB_DEV_EAGER が設定されている場合は無効)。配信可能な dist/ が存在しない場合は、警告を出したうえで(cold を促すヒント付きで)即時起動レンダリングにフォールバックします。デフォルトでは無効です。 |
ZFB_DEV_BOOT_LAZY | cold | シードなしの boot-lazy: 同様にルートごとのレンダリングを最初のリクエストまで遅延しますが、ビルド済み dist/ を一切必要としません。ディスク上にフォールバック用の成果物がないルートは、最初のリクエストで再レンダリングされるまで(ライブリロード付きの)dev 用 404 ページを返します — このウィンドウ中に開いたままのタブも、各ルートが解決し次第ライブリロードで自己修復します。ただし、無関係な過去のビルドが残した dist/ が存在する場合(ここではその有無や鮮度はチェックされません)、そのルートでは 404 ページより先に(古い可能性のある)その内容が配信されます — Auto のチェック済みシードと同じ挙動です。dist/ がまだ存在しない場合に使用してください。1 を指定した場合、この状況では警告を出したうえで即時起動レンダリングにフォールバックします。 |
ZFB_DEV_DEFER_BUNDLE | 0 | boot-lazy のバンドル遅延をオプトアウトします(どちらのバリアントでも): 最初の accept が遅くなる代わりに、bind 前にレンダラーをビルドします(SSR のみの 404 ウィンドウが発生しません)。boot-lazy が有効なときはデフォルトで有効です。 |
ZFB_DEV_TIMING | 1 または true | dev モードのプロファイリング用に、tick ごとのタイミング行を出力します。デフォルトでは無効です。 |
例
# デフォルト — localhost:3000 にバインドします
zfb dev
# カスタムポート
zfb dev --port 8080
# LAN に公開する(0.0.0.0)
zfb dev --host
# ホストを明示的に指定
zfb dev --host 192.168.1.10 --port 4321zfb build
プロジェクトをプロダクション向けにビルドします。静的 HTML(およびアダプタが設定されている場合はサーバーエントリ)を出力ディレクトリに出力します。
zfb build [--outdir <dir>] [--minify-html | --no-minify-html]
[--strict-broken | --no-strict-broken]フラグ
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
--outdir | path | config / dist | プロダクションビルドの出力ディレクトリ。config の outDir より優先され、どちらもない場合は dist を使います。 |
--minify-html | boolean flag | config/default | このビルドでプロダクション HTML ミニファイを有効にします。minifyHtml: false または設定の省略より優先されます。 |
--no-minify-html | boolean flag | config/default | このビルドでプロダクション HTML ミニファイを無効にします。config や preset の minifyHtml: true より優先されます。 |
--strict-broken | boolean flag | config/default | マークダウンのリンク検証が壊れたリンクを見つけたとき、このビルドを失敗させます(非ゼロ終了)。strictBrokenLinks: false または設定の省略より優先されます。linkValidation の設定がまったくないプロジェクトでは、何もしないのではなく、デフォルト設定でリンク検証を強制的に有効化します。 |
--no-strict-broken | boolean flag | config/default | このビルドを壊れたリンクで失敗させません。config や preset の strictBrokenLinks: true より優先されます。無効にするのはトップレベルの strict オーバーレイだけで、failOnBroken: true を明示的に設定した linkValidation ブロックは有効なままです。 |
HTML ミニファイは、minifyHtml: true を設定するか --minify-html を渡さない限りデフォルトでオフです。zfb の Rust 側の後処理パイプライン内で実行され、Node.js のミニファイ subprocess は起動しません。初回バージョンは保守的で、レンダリングされた HTML ページだけを対象候補にし、ソースが .html の passthrough ページはそのまま残し、HTML 以外の出力はスキップします。
壊れたリンクによる strict なゲートも同様にデフォルトではオフです。--strict-broken と --no-strict-broken は排他で、同時に渡すとエラーになります。どちらも strictBrokenLinks 設定フィールドより優先され、その設定フィールドがデフォルトの false より優先されます。どちらのフラグも zfb build にのみ影響します。zfb dev が strict オーバーレイを見ることはなく、自分で書いた linkValidation 設定どおりのリンク検証の挙動をそのまま保ちます。resolveMarkdownLinks.onBrokenLinks との違いを含む挙動の全体はリンク検証 — strict モードを参照してください。
例
zfb build
zfb build --outdir public
zfb build --minify-html
zfb build --no-minify-html
zfb build --strict-broken
zfb build --no-strict-brokenzfb preview
ビルド済みのサイトをローカルで配信します。先に zfb build を実行してください。
zfb preview [--port <port>] [--host [<host>]] [--outdir <dir>]静的モード(アダプタなし、または adapter: "none")では、zfb preview は zfb dev と同じ2つのリクエスト時レイヤーを、通常の静的ファイル配信より前段で実行します: プラグインの previewMiddleware 登録、続いて public/_redirects(Static Assets — _redirects を参照)。同じ URL に対してプラグインが _redirects のルールより常に優先されます。
_redirects のマッチャーに到達するのは GET/HEAD リクエストのみです — これは実際の Workers Static Assets がアセット層(したがって _redirects)をこの2つのメソッドに対してしかプローブしない挙動を反映しています。それ以外のメソッドはプラグインハンドラ(すべてのメソッドを受け付けます)に到達するか、405 になります。GET /old-page に対して発火するはずのルールが POST /old-page では決して発火しません。
_redirects とカスタム `base`
静的 preview は選択された出力ディレクトリの下に zfb build が出力したものをそのまま配信し、プロジェクトの base プレフィックスについては関知しません — preview 自身にはプレフィックスを取り除くレイヤーがありません。そのため _redirects のルールの source は、ファイルに書かれたとおり リクエストパス全体 に対してマッチングされます — base プレフィックスを付加したり取り除いたりする書き換えは一切行われません。zfb.config.ts で base: "/pj/site/" を設定している場合、/ をリダイレクトしたいルールはプレフィックスを含めて書く必要があります(/)。/ のようには書けません。
これは静的 preview に固有の話です。zfb dev のルーターは base の 下に マウントされる(issue #229)ため、プレフィックスを 取り除いた パスに対して _redirects の source をマッチングします — 同じルールを dev で発火させるにはプレフィックスなしで書く必要があります(/)。今日の時点で base と _redirects を組み合わせるプロジェクトはモードごとに異なるルール source を用意する必要があります。これは意図的な設計ではなく、既知のギャップです(#1562)。
zfb.config.json の adapter フィールドがサポート対象のアダプタ(例: @takazudo/zfb-adapter-cloudflare)を指定している場合、zfb preview は zfb 自身の静的サーバーではなく wrangler dev に処理を引き渡します。この場合、--outdir または config の outDir から選ばれた出力ディレクトリは、存在するかを事前確認するだけになります。実際に何を配信するかは wrangler 自身の設定が制御するためです。SSR と Cloudflare バインディング を参照してください。
アダプタの preview は、処理を引き渡す前に pnpm exec wrangler --version の事前チェックを実行し、zfb がテスト済みのベースラインを 最小サポートバージョン として扱います。それより古い wrangler はアップグレード案内とともに中断しますが、同じかそれより新しいものは続行します(新しいバージョンでは情報行を、未テストのメジャーバージョンでは警告を出力します)。ZFB_SKIP_WRANGLER_VERSION_CHECK=1 は、一時的な escape hatch としてのみ設定してください(例: wrangler のバージョン出力形式が変わった場合)。
アダプタモード: zfb は何も配信しない
アダプタモードでは wrangler dev がサイト全体を配信します — zfb は自身のルーターを一切起動せず、previewMiddleware の有無を確認するためのプラグインホストも起動しません。_redirects はそこでも機能しますが、それは zfb の _redirects エンジンではなく wrangler/Workers Static Assets がネイティブにファイルを尊重しているだけです。previewMiddleware の登録には wrangler 側に対応する仕組みがなく、アダプタモードの preview では単に実行されません — プロジェクトにプラグインが設定されている場合、zfb preview は処理を引き渡す前にその旨を一度だけ警告として出力します。
フラグ
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
--port | u16 | 4321* | preview サーバーがバインドするポート。 |
--host | string | localhost* | バインドするホストインターフェース。値なしの --host は 0.0.0.0 のショートカットです。 |
--outdir | path | config / dist | ビルド済み成果物を配信するディレクトリ。config の outDir より優先され、どちらもない場合は dist を使います。 |
* 次の順にフォールバックします: CLI フラグ → zfb.config.json の port/host → 組み込みのデフォルト。
出力ディレクトリも同様に、CLI の --outdir → config の outDir → 組み込みの dist の順でフォールバックします。
例
zfb build && zfb preview
zfb preview --port 8080
zfb preview --host --outdir publiczfb check
プロジェクトの型チェックを行い、コンテンツコレクションのフロントマターをスキーマに対して検証します。
zfb check [--skip-tsc]このコマンドは 2 つのチェックを実行します。
TypeScript —
tsc --noEmitをサブプロセスとして呼び出します。zfb.config.ts、コレクションスキーマ、src/の型エラーを捕捉します。コレクションスキーマの検証 — 各コレクションエントリのフロントマターを、
zfb.config.json/zfb.config.tsの各コレクションのschemaフィールドで宣言された JSON Schema に対して検証します。ビルド自体はフロントマターを検証しないため、これが強制の関門となります。
いずれの失敗モードも非ゼロのコードで終了します。
フラグ
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
--skip-tsc | bool | false | tsc --noEmit サブプロセスをスキップします。スキーマ検証は引き続き実行されます。TypeScript がインストールされていない場合や、スキーマのみの CI レーンで便利です。 |
例
# フルチェック — tsc + スキーマ検証
zfb check
# スキーマのみ(tsc をスキップ)
zfb check --skip-tscTip
zfb check は CI でコンテンツコレクションを検証する推奨手段です。zfb build の後に配置して、ビルドが黙って見逃すフロントマター違反を捕捉してください。
環境変数
以下の環境変数は zfb 全体に影響します(特定のサブコマンドに固有のものではありません)。
| 変数 | デフォルト | 説明 |
|---|---|---|
ZFB_DEV_EAGER | 未設定 | 1 を設定すると zfb dev の遅延 dev レンダリングを無効化します。各ファイル変更時に影響を受けるすべてのルートを即座に再レンダリングします。 |
ZFB_LAZY_DEV_RENDER | 未設定 | 0 または 1 を設定して、遅延 dev レンダリングスイッチを厳密に制御します。両方が設定されている場合は ZFB_DEV_EAGER より優先されます。 |
ZFB_DEV_BOOT_LAZY | 未設定 | 1 を設定すると dev サーバーの高速起動をオプトインします: 有効なビルド済み dist/ を即座に配信し、各ルートのレンダリングを最初のリクエストまで遅延します(配信可能な dist/ が存在しない場合は、警告を出したうえで即時起動レンダリングにフォールバックします)。あるいは cold を設定するとシードなしのバリアントになります: 同様に遅延しますが dist/ は一切不要です。フォールバック用の成果物がないルートは最初のリクエストまで dev 用 404 ページを返しますが、無関係な過去のビルドが残した dist/ があれば、そのルートでは 404 より先に古いバイトが配信されます。遅延レンダリングが必要で、ZFB_DEV_EAGER が設定されている場合は無効です。 |
ZFB_DEV_DEFER_BUNDLE | 未設定 | 0 を設定すると boot-lazy のバンドル遅延をオプトアウトします(どちらのバリアントでも。最初のリクエスト後ではなく bind 前にレンダラーをビルドします)。boot-lazy が有効なときはデフォルトで有効です。 |
ZFB_DEV_TIMING | 未設定 | 1 または true を設定すると、ファイル変更 tick ごとの dev モードのフェーズタイミングを出力します。 |
ZFB_PLUGIN_HOOK_TIMEOUT | 120(秒) | 単一のプラグインフックの応答を待つ最大時間(秒)。これを超えるとプラグインホストが強制終了され、ビルドが失敗します。優先順位: 設定の pluginHookTimeoutSecs > この環境変数 > 組み込みのデフォルト 120 秒。 |
ZFB_ESBUILD_BIN | 未設定 | esbuild バイナリへの絶対パス。埋め込み / staged 済みの esbuild バイナリが利用できない、または上書きしたい場合に、バンドラ、islands コンパイラ、テスト、TypeScript 設定ロード(zfb.config.ts)で使用されます。 |
ZFB_TAILWIND_BIN | 未設定 | Tailwind CSS v4 バイナリへの絶対パス。CSS エンジンが使用する埋め込み / staged 済みの Tailwind バイナリを上書きします。空文字列は未設定と同じ扱いになります(上記の ZFB_ESBUILD_BIN と同じ契約)。 |
ZFB_DEBUG_SNAPSHOT | 未設定 | 1 または true を設定すると、zfb build 実行時にコンテンツスナップショットのエントリ数とシリアライズ後のバイト数を stderr に出力します。大規模サイトでの V8 メモリ負荷の監視に使えます。インクリメンタルリビルド を参照してください。 |
ZFB_SKIP_WRANGLER_VERSION_CHECK | 未設定 | 1、true、または yes を設定すると、zfb preview のアダプタモードにおける wrangler 最小バージョンゲートを迂回します。一時的なリリースエンジニアリング用途を意図しています。 |
Note
ZFB_PLUGIN_HOOK_TIMEOUT は defineConfig の pluginHookTimeoutSecs からも設定できます。設定フィールドは環境変数より優先されます。