OpenPress

@open-press/core

Workspace

発見された Press フォルダを単一の workspace マニフェストにグループ化するための OpenPress 内部コンポーネント。

<Workspace> は、システムが生成する最上位の論理グループ化コンポーネントであり、自動検出された <Press> インスタンスを単一の環境設定ファイルおよび出力構造に集約します。

設計契約: 開発者が直接 <Workspace> 宣言を記述することはありません。システムがフォルダ構造(press/*/press.tsx)を解析することで、このノードを自動的に作成します。

Component Impl

# <Workspace>

エンジン内部で構築されるグループノード。複数のドキュメントの操作設定、ルーティングテーブル、およびデプロイパラメータを一元管理します。

import { Workspace } from "@open-press/core";
<Workspace name? children />

内部プロパティ (Props)

Name Type Default Description
name string プロジェクトのグローバル識別名。出力ギャラリーおよび PDF メタデータに表示されます。
children required Press[] 解析されたドキュメントインスタンスのリスト。各インスタンスは一意の `slug` を持ちます。

フォルダとルーティング構造

Workspace アーキテクチャは、単一のリポジトリとパッケージ層に依存して、関連する複数の独立したドキュメントを生成することをサポートしています。

構造の例:マルチドキュメント構成

my-launch/
├── package.json                # グローバルな依存関係とデプロイコマンド
└── press/
    ├── shared/                 # 任意の共有 source: assets, facts, components
    ├── proposal/
    │   ├── press.tsx           # <Press slug="proposal">
    │   ├── theme/              # proposal tokens and fonts
    │   └── chapters/           # proposal 専用の MDX
    └── pitch-deck/
        ├── press.tsx           # <Press slug="pitch-deck">
        ├── theme/              # deck tokens and fonts
        └── layouts/            # pitch-deck 専用のコンポーネント

Workspace のシステムへの影響

ビルドと操作環境 (Build & CLI)

Name Type Default Description
パス解決 ルーティング インデックスページ `/` および対応する子ドキュメントのパス `/proposal`、`/pitch-deck` を自動生成します。
Per-Press style binding テーマ 各 Press は自身の `press//theme/` source を読み取り、自身の CSS chunks を出力します。`press/shared/` は意図的な shared source に限って使います。
出力成果物の構造 ビルド 個別に `public/openpress//document.json` を生成し、ルートディレクトリの `workspace.json` マニフェストに統合します。
ビルドの連動 コマンド `npm run build` はすべての子ドキュメントを強制的に検証し、単一ポイントの構造エラーでも Workspace 全体の出力を中断します。

分離境界のガイドライン

以下の条件に該当するドキュメントは、共有 Workspace の子ドキュメントとして設定するのではなく、独立したエンティティの Workspace(別のリポジトリまたは monorepo の別のパッケージ)に分割する必要があります。

  • 共通のコンテキスト、ブランド資産、またはコード共有のシナリオが不足している場合。
  • 時間の経過とともに生成される同じドキュメントのコンテンツのバージョン管理スナップショット(Git ブランチ管理に委ねるべきです)。
  • 異なるデプロイターゲットまたは独立したアダプターへのルーティングを要求するプロジェクト。

ドキュメント間の状態管理

データの共有は ES モジュール宣言パターンを採用し、専用のグローバル状態管理ライブラリは導入しません。

// press/shared/data.ts
export const RAISE = { amount: "$8M", round: "Series A" };

// press/proposal/chapters/01-overview.mdx
import { RAISE } from "../../../data";
目標:{RAISE.round} フェーズ。