zfb
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

最初のサイト

zfb プロジェクトをおよそ 5 分でスキャフォールド・実行・ビルドする。

最短のワークフロー

インストール済み CLI で node-free テンプレートを明示して始めます。dev は Ctrl+C で停止してから次へ進んでください。

zfb new my-site --template node-free
cd my-site
zfb dev
# Stop with Ctrl+C
zfb check --skip-tsc
zfb build
zfb preview

--skip-tsc は非 TypeScript チェックのみです。完全な型チェックには Node.js と TypeScript を用意し、zfb check を実行します。npm 版でも同じコマンドを pnpm exec zfb または npx zfb で実行できます。

Basic blog は npm / pnpm を使うブログ、Node-free は Node やパッケージのインストールなしで動くスターターです。インストールで選んだ方法に合わせて、どちらかのタブで作成・実行・ビルドを進めてください。

新しいプロジェクトをスキャフォールドする

pnpm create zfb@latest my-site
# または
npm create zfb@latest my-site

実行する前に出力を見る

create-zfb.takazudomodular.com では、 このコマンドが生成するものをそのまま公開しています。basic-blog テンプレートをmain への push ごとにビルドしてデプロイしたものです。サイトの内容は一切手書き していません。すべてのプルリクエストを通すのと同じクリーンルーム実行によって CI で生成されるため、これから手元に入るテンプレートとずれることがありません。

pnpm 11 に関する注意

pnpm 11 の minimumReleaseAge により、新しいリリースから約 48 時間以内はcreate-zfb の一つ前のリリースがインストールされることがあります。create-zfb が起動時に古いインストールについて警告する場合は、pnpm create zfb@latest --config.minimumReleaseAge=0 で再実行するか、 代わりに npm create zfb@latest を使ってください。

これは create-zfb イニシャライザを実行します。内部では zfb new を呼び出し、同梱の basic-blog テンプレートを my-site/ にコピーします。PATH 上に pnpm があれば、zfb はテンプレートのコピー直後に pnpm install を自動実行します。なければ、自分で実行するよう促す短いメッセージを表示します。

cd my-site

zfb CLI をすでにグローバルインストールしている場合(Installation を参照)、zfb new を直接呼び出しても同じ結果が得られます。

zfb new my-site --template basic-blog

--template basic-blog はデフォルトなので、省略できます。Node.js 依存を一切必要としないプロジェクト向けに node-free テンプレートも利用できます。package.json を同梱せず、.tsx に加えて .md/.html のページエントリを使います。このページの書き方については Markdown and HTML Pages を参照してください。

basic-blog がスキャフォールドするのは、zfb.config.ts(JSON ではありません)、3 つのシード記事を持つ blog コンテンツコレクション、4 つのルート、そして 1 つのクライアント島です。同梱の README.md がツリーの案内になっており、プロジェクト構造 が同じ範囲をより詳しく扱います。

インポート指定子について

ベアの zfb 系指定子(zfb、zfb/content、zfb/paginate、zfb/zudo-react などの対応サブパス)は、SSR、島のスキャナー、クライアントバンドル、JSX pragma の判定、zudo-wind のクラス抽出で、それぞれ対応する @takazudo/zfb の公開エントリへ解決されます。パッケージを参照するエントリでは、どちらの書き方も同じパッケージを指します。このドキュメントでは短い zfb 形式を使います。設定ローダーは zfb/config を別扱いし、内部のランタイム専用スタブへエイリアスします。

このビルド時のエイリアスは TypeScript の設定には反映されません。zfb check の動作も変わらず、プロジェクトの設定で TypeScript を実行し、compilerOptions.paths を注入しません。TypeScript とエディタは components/zfb-shim.d.ts の ambient 宣言を使ってベア指定子を解決します。シム全体と既存のシムを拡張する方法はベアの zfb インポートの型付けを参照してください。

開発サーバーを起動する

pnpm zfb dev
# または
npx zfb dev

ホストとポートを示す「ready」バナーが表示されます(デフォルトは http://localhost:3000)。zfb は固定された一連のプロジェクトルートを監視します。pages/・content/・components/・layouts/・styles/・data/・src/ と、2 つの設定ファイル(zfb.config.json、zfb.config.ts)です。これに加えて、設定でコレクションの path 値や絶対パスの extraWatchPaths エントリとして宣言された任意のパスも監視します。デフォルトの public/ ディレクトリは監視されません。これらのファイルはディスクから直接配信されます。監視対象のファイルを保存すると、接続中のブラウザにライブリロードがブロードキャストされます。

ホストとポートは CLI から上書きできます。これらは常に zfb.config.ts より優先されます。

pnpm zfb dev --port 4000 --host 0.0.0.0
# または
npx zfb dev --port 4000 --host 0.0.0.0

ビルドとプレビュー

サイトの静的ビルドを生成するには:

pnpm zfb build
pnpm zfb preview
# または
npx zfb build
npx zfb preview

zfb build は CLI の --outdir → config の outDir → 組み込みデフォルトの dist/ という順で選んだディレクトリへ書き出し、ファイルシステムルーターでルートを列挙し、静的ルートごとに 1 つの HTML ファイルを書き出します。build コマンドはサーバーを起動しないため、--port フラグはありません。

zfb preview も同じ出力ディレクトリの優先順位を使い、選択されたディレクトリを HTTP で配信します。preview の --port フラグは設定の port より優先されます。どちらも設定されていない場合、preview は組み込みデフォルトの 4321 を使います。

3 つのコマンドはすべて zfb.config.* の outDir を尊重します。build と preview では、明示的な --outdir が常に設定値より優先されます。

プロジェクトを型チェックする

pnpm typecheck
# または
npx zfb check

zfb check は 1 回の実行で 2 つのことを行います。TypeScript でプロジェクトを型チェックすることと、各コレクションエントリのフロントマターを、zfb.config.ts でそのコレクションに宣言された JSON Schema に対して検証することです。ビルド自体はフロントマターを検証しないため、title や date の欠けた記事はここで捕まります。CLI リファレンス を参照してください。

動作するサンプル

zfb-example-blog は、読んでそのままデプロイできるスタンドアロンのサンプルサイトです(ライブビルド)。同梱テンプレートのコピーではなく独立したリポジトリとして保守されているため、ファイル構成は zfb new がスキャフォールドするものとは異なります。手元のプロジェクトの写しではなく、作り込まれた実例として読んでください。この例の詳しい解説は Blog にあり、その他のサンプルは サンプル にまとまっています。

最初のデザインを自分のものにする

同梱の両スターターは Everyday デザインから始まります。用途別の色、独立した 横方向と縦方向の余白、読みやすい文字組み、共通の角丸ルールを持つ、編集可能な プロジェクトの選択です。zudo-wind エンジンの暗黙のデフォルトではありません。

  • 色・余白・文字組み・読み幅・角丸の値は styles/design-system.css で変更します。

  • 使い分けは DESIGN-NOTES.md を参照してください。ホームに表示する短いルールは components/design-rules.ts にあります。デザインを変えたら説明も更新してください。

  • Basic blog では zfb.config.ts が design-tokens.json と既存の Markdown 用 トークンをマージします。styles/global.css のダーク用の値はテーマ切り替えに 連動します。既存記事 How this site is styled がそのつながりを説明します。

  • Node-free でトークン名を変える場合は zfb.config.json と design-tokens.json を揃えてください。明示的な Wind スタイルシートはバイナリ内で生成され、Node・ パッケージのインストール・クライアント島は不要です。

デザインシステム Playground でルールを試し、 編集可能なファイルを書き出せます。既存ページの値を保持しながら、カテゴリと名前ごとに トークンをマージしてください。現在のイニシャライザが選ぶのはサイトテンプレートです。 デザインシードの選択機能やシード用の CLI フラグはまだありません。

次に読むもの

  • Project structure — テンプレートが作成した各ディレクトリが実際に何をするのか。

  • Routing — pages/ がどのように URL になるか。動的ルートやキャッチオールルートも含みます。

  • Islands — 個々のコンポーネントをクライアントサイドのハイドレーションにオプトインする方法。

  • Build engine — Rust クレートが内部でどう組み合わさっているか。

Revision History

作成更新