Color mode

Framework Development

このページは、Riebeckite 本体を開発する人向けのガイドです。

次のような変更を行う場合に、この monorepo を使用します。

  • Core の機能を追加・変更する
  • CLI を変更する
  • HonoX Integration を変更する
  • 公式 Plugin / Theme を開発する
  • Site scaffold や template を変更する
  • 公式ドキュメントや参照アプリを変更する

単に Riebeckite を使って自分の Site を作りたい場合は、この repository を clone する必要はありません。

Getting Started から Site を作成してください。

Diagram source
text
flowchart TD
    Q{"何をしたい?"}
 
    Q -->|"RiebeckiteでSiteを作りたい"| User["Getting Started"]
    Q -->|"Riebeckite本体を変更したい"| Dev["Framework Development"]
 
    User --> Site["自分のSite Repository"]
    Dev --> Repo["Riebeckite Monorepo"]

開発を始める

Riebeckite 本体を開発する場合は、repository を clone して依存関係をインストールします。

bash
git clone https://github.com/rerurate/riebeckite.git
cd riebeckite
pnpm install
pnpm build

これで workspace 内の package を開発できる状態になります。

開発サーバーを起動する

bash
pnpm dev

apps/web の参照アプリを使って、Riebeckite の変更を実際の Site として確認できます。

apps/web は単なるデモではなく、Framework 開発時に Core、Plugin、Theme、Integration が正しく組み合わさることを確認するための参照アプリでもあります。

Repository の構成

Riebeckite は pnpm workspace を使った monorepo です。

大きく次のように分かれています。

Diagram source
text
flowchart TD
    Repo["riebeckite/"]
 
    Repo --> Packages["packages/"]
    Repo --> Apps["apps/"]
    Repo --> Docs["docs/"]
    Repo --> Templates["templates/"]
 
    Packages --> Core["core<br/>共通基盤"]
    Packages --> CLI["cli<br/>CLI"]
    Packages --> Integration["integrations/honox<br/>HonoX接続"]
    Packages --> Create["create-riebeckite<br/>Site生成"]
    Packages --> Plugins["plugins/*<br/>公式Plugin"]
    Packages --> Themes["themes/*<br/>公式Theme"]
 
    Apps --> Web["web<br/>Docs / Reference App"]
    Docs --> DocSource["Documentation Source"]
    Templates --> Analytics["analytics-cloudflare<br/>Analytics Deployment Template"]
Path 役割
packages/core config、content、pipeline、Plugin、Theme、Diagnostics、Observability などの共通基盤
packages/cli riebeckite CLI
packages/integrations/honox HonoX / Vite Integration と scaffold generator
packages/create-riebeckite Site 作成用の公開 entrypoint
packages/plugins/* 公式 Plugin
packages/themes/* 公式 Theme
apps/web 公式ドキュメント Site兼、Framework 開発用の参照アプリ
docs/ 公式ドキュメントの source
templates/analytics-cloudflare Analytics Worker の Deployment template

各 package の詳しい責務については Architecture を参照してください。

よく使うコマンド

Framework 開発でよく使用するコマンドは次のとおりです。

コマンド 用途
pnpm dev 開発用 Site を起動する
pnpm build workspace を build する
pnpm check repository 全体を検査する
pnpm test test を実行する
pnpm typecheck TypeScript の型を検査する
pnpm check:docs Documentation を検査する
pnpm check:scaffold 生成される Site を検査する

Documentation を変更した場合

bash
pnpm check:docs

Markdown link や Documentation の構造を検査します。

ドキュメントを追加・移動・削除した場合は実行してください。

Scaffold を変更した場合

bash
pnpm check:scaffold

生成される Riebeckite Site が正しい構成になっているかを検査します。

たとえば、

  • scaffold generator
  • preset
  • template
  • 生成される package.json
  • Site の初期構成

などを変更した場合に重要です。

Package の型を確認する

bash
pnpm typecheck

TypeScript の型エラーを確認します。

特定 Package の Test

変更した package だけを確認したい場合は --filter を使用できます。

bash
pnpm --filter <package> test

たとえば特定の Plugin だけを変更した場合、最初から repository 全体の test を実行するのではなく、対象 package の test から確認できます。

変更するときの基本的な流れ

変更内容によって必要な検証は異なりますが、基本的には 小さい範囲から確認して、最後に広い範囲を確認する 形を推奨します。

Diagram source
text
flowchart TD
    Change["コードを変更"]
    Focus["対象PackageのTest / Typecheck"]
    Related["関連するIntegration / Appを確認"]
    Check["pnpm check"]
    Build["pnpm build"]
 
    Change --> Focus
    Focus --> Related
    Related --> Check
    Check --> Build

たとえば Plugin を変更した場合は、まずその Plugin の test を実行します。

bash
pnpm --filter <plugin-package> test

問題がなければ、必要に応じて型検査や参照アプリを確認し、最後に repository 全体の検証を行います。

変更のたびに最初から最も重い command を実行する必要はありません。

どこを変更するか

機能を追加するときは、まず責務に合った package を選びます。

Diagram source
text
flowchart TD
    Q{"何を変更する?"}
 
    Q -->|"共通のContent / Contract"| Core["packages/core"]
    Q -->|"CLI Command"| CLI["packages/cli"]
    Q -->|"再利用可能な機能"| Plugin["packages/plugins/*"]
    Q -->|"HonoX / Viteとの接続"| Integration["packages/integrations/honox"]
    Q -->|"見た目 / CSS"| Theme["packages/themes/*"]
    Q -->|"Route / Island / Site UI"| App["apps/web"]
    Q -->|"Site生成"| Scaffold["create-riebeckite / scaffold"]

判断に迷う場合は、Architecture の責務分離を基準にしてください。

Package の境界

Framework を変更するときは package 間の依存方向を維持してください。

大まかな依存関係は次のようになります。

Diagram source
text
flowchart BT
    App["Application"]
    Integration["Integration"]
    Plugin["Plugin"]
    Theme["Theme"]
    CLI["CLI"]
    Core["Core"]
 
    App --> Integration
    Integration --> Core
    Plugin --> Core
    Theme --> Core
    CLI --> Core
    CLI --> Integration

特に Core から外側への逆依存を作らないことが重要です。

たとえば Core から、

text
apps/web
packages/plugins/*
HonoX
Vite

などの具体的な実装へ依存させてはいけません。

Framework に依存しない contract は Core に置き、その contract を Integration や Plugin が利用します。

Public API を使う

外部 Plugin / Theme と同じ条件で利用できる API は、公開 export から参照してください。

たとえば、

ts
import { ... } from "@riebeckite/core";

のような公開 entrypoint を使用します。

次のように package 内部へ直接依存することは避けてください。

ts
import { ... } from "@riebeckite/core/src/...";

src/** は内部実装であり、安定した Public API ではありません。

公式 Plugin や Theme も可能な限り Public API の consumer として実装することで、外部 package から実際に利用できる contract になっていることを確認できます。

Scaffold は独立した Site として扱う

Scaffold は Riebeckite monorepo 内でしか動かない構成にしてはいけません。

生成された Site は、

text
create-riebeckite
       ↓
Generated Site
       ↓
npm packages
       ↓
build

という形で、monorepo の内部 source に依存せず動作する必要があります。

そのため scaffold を変更した場合は、workspace 内で動くだけではなく、外部 Site として成立することも確認してください。

check:scaffold や external-site E2E は、この境界を検証するためにあります。

Documentation の境界

一般ユーザー向け Documentation では、Riebeckite monorepo の clone や workspace setup を前提にしません。

Diagram source
text
flowchart LR
    User["Site User"]
    Getting["Getting Started"]
    Site["Generated Site"]
 
    Dev["Framework Developer"]
    Framework["Framework Development"]
    Repo["Riebeckite Monorepo"]
 
    User --> Getting --> Site
    Dev --> Framework --> Repo

Site を作るユーザーと Framework を開発するユーザーでは、必要な環境が異なるためです。

monorepo 固有の command、内部 package 構成、Framework の build 方法などは、この Framework Development セクションで扱います。

開発時に守る境界

Framework の変更では、特に次の点を維持してください。

  • Core から Application、Plugin 内部、Framework 固有実装へ逆依存しない
  • 外部 Plugin / Theme が src/** を import しなくても実装できる Public API を維持する
  • 一般ユーザー向け Documentation に monorepo setup を要求しない
  • Scaffold を monorepo から独立して動作できる Site として維持する
  • 変更した範囲から検証し、必要に応じて repository 全体へ検証範囲を広げる

Framework 全体の責務については Architecture、テスト方針については Testing、CLI については CLI、HonoX との接続については HonoX Integration を参照してください。

History

1 changesCollapseExpand
1 + # Framework Development
2 +
3 + このページは、**Riebeckite 本体を開発する人向け**のガイドです。
4 +
5 + 次のような変更を行う場合に、この monorepo を使用します。
6 +
7 + - Core の機能を追加・変更する
8 + - CLI を変更する
9 + - HonoX Integration を変更する
10 + - 公式 Plugin / Theme を開発する
11 + - Site scaffold や template を変更する
12 + - 公式ドキュメントや参照アプリを変更する
13 +
14 + 単に Riebeckite を使って自分の Site を作りたい場合は、**この repository を clone する必要はありません。**
15 +
16 + [Getting Started](../getting-started/README.ja.md) から Site を作成してください。
17 +
18 + ```mermaid id="9tptx1"
19 + flowchart TD
20 + Q{"何をしたい?"}
21 +
22 + Q -->|"RiebeckiteでSiteを作りたい"| User["Getting Started"]
23 + Q -->|"Riebeckite本体を変更したい"| Dev["Framework Development"]
24 +
25 + User --> Site["自分のSite Repository"]
26 + Dev --> Repo["Riebeckite Monorepo"]
27 + ```
28 +
29 + # 開発を始める
30 +
31 + Riebeckite 本体を開発する場合は、repository を clone して依存関係をインストールします。
32 +
33 + ```bash id="vmx4gu"
34 + git clone https://github.com/rerurate/riebeckite.git
35 + cd riebeckite
36 + pnpm install
37 + pnpm build
38 + ```
39 +
40 + これで workspace 内の package を開発できる状態になります。
41 +
42 + ## 開発サーバーを起動する
43 +
44 + ```bash id="kueg3z"
45 + pnpm dev
46 + ```
47 +
48 + `apps/web` の参照アプリを使って、Riebeckite の変更を実際の Site として確認できます。
49 +
50 + `apps/web` は単なるデモではなく、Framework 開発時に Core、Plugin、Theme、Integration が正しく組み合わさることを確認するための参照アプリでもあります。
51 +
52 + # Repository の構成
53 +
54 + Riebeckite は pnpm workspace を使った monorepo です。
55 +
56 + 大きく次のように分かれています。
57 +
58 + ```mermaid id="7xv9qn"
59 + flowchart TD
60 + Repo["riebeckite/"]
61 +
62 + Repo --> Packages["packages/"]
63 + Repo --> Apps["apps/"]
64 + Repo --> Docs["docs/"]
65 + Repo --> Templates["templates/"]
66 +
67 + Packages --> Core["core<br/>共通基盤"]
68 + Packages --> CLI["cli<br/>CLI"]
69 + Packages --> Integration["integrations/honox<br/>HonoX接続"]
70 + Packages --> Create["create-riebeckite<br/>Site生成"]
71 + Packages --> Plugins["plugins/*<br/>公式Plugin"]
72 + Packages --> Themes["themes/*<br/>公式Theme"]
73 +
74 + Apps --> Web["web<br/>Docs / Reference App"]
75 + Docs --> DocSource["Documentation Source"]
76 + Templates --> Analytics["analytics-cloudflare<br/>Analytics Deployment Template"]
77 + ```
78 +
79 + | Path | 役割 |
80 + | --- | --- |
81 + | `packages/core` | config、content、pipeline、Plugin、Theme、Diagnostics、Observability などの共通基盤 |
82 + | `packages/cli` | `riebeckite` CLI |
83 + | `packages/integrations/honox` | HonoX / Vite Integration と scaffold generator |
84 + | `packages/create-riebeckite` | Site 作成用の公開 entrypoint |
85 + | `packages/plugins/*` | 公式 Plugin |
86 + | `packages/themes/*` | 公式 Theme |
87 + | `apps/web` | 公式ドキュメント Site兼、Framework 開発用の参照アプリ |
88 + | `docs/` | 公式ドキュメントの source |
89 + | `templates/analytics-cloudflare` | Analytics Worker の Deployment template |
90 +
91 + 各 package の詳しい責務については [Architecture](./architecture.ja.md) を参照してください。
92 +
93 + # よく使うコマンド
94 +
95 + Framework 開発でよく使用するコマンドは次のとおりです。
96 +
97 + | コマンド | 用途 |
98 + | --- | --- |
99 + | `pnpm dev` | 開発用 Site を起動する |
100 + | `pnpm build` | workspace を build する |
101 + | `pnpm check` | repository 全体を検査する |
102 + | `pnpm test` | test を実行する |
103 + | `pnpm typecheck` | TypeScript の型を検査する |
104 + | `pnpm check:docs` | Documentation を検査する |
105 + | `pnpm check:scaffold` | 生成される Site を検査する |
106 +
107 + ## Documentation を変更した場合
108 +
109 + ```bash id="2wm0wz"
110 + pnpm check:docs
111 + ```
112 +
113 + Markdown link や Documentation の構造を検査します。
114 +
115 + ドキュメントを追加・移動・削除した場合は実行してください。
116 +
117 + ## Scaffold を変更した場合
118 +
119 + ```bash id="5xutky"
120 + pnpm check:scaffold
121 + ```
122 +
123 + 生成される Riebeckite Site が正しい構成になっているかを検査します。
124 +
125 + たとえば、
126 +
127 + - scaffold generator
128 + - preset
129 + - template
130 + - 生成される `package.json`
131 + - Site の初期構成
132 +
133 + などを変更した場合に重要です。
134 +
135 + ## Package の型を確認する
136 +
137 + ```bash id="hlsudn"
138 + pnpm typecheck
139 + ```
140 +
141 + TypeScript の型エラーを確認します。
142 +
143 + ## 特定 Package の Test
144 +
145 + 変更した package だけを確認したい場合は `--filter` を使用できます。
146 +
147 + ```bash id="6s8dyj"
148 + pnpm --filter <package> test
149 + ```
150 +
151 + たとえば特定の Plugin だけを変更した場合、最初から repository 全体の test を実行するのではなく、対象 package の test から確認できます。
152 +
153 + # 変更するときの基本的な流れ
154 +
155 + 変更内容によって必要な検証は異なりますが、基本的には **小さい範囲から確認して、最後に広い範囲を確認する** 形を推奨します。
156 +
157 + ```mermaid id="jyhjau"
158 + flowchart TD
159 + Change["コードを変更"]
160 + Focus["対象PackageのTest / Typecheck"]
161 + Related["関連するIntegration / Appを確認"]
162 + Check["pnpm check"]
163 + Build["pnpm build"]
164 +
165 + Change --> Focus
166 + Focus --> Related
167 + Related --> Check
168 + Check --> Build
169 + ```
170 +
171 + たとえば Plugin を変更した場合は、まずその Plugin の test を実行します。
172 +
173 + ```bash id="9dvfqe"
174 + pnpm --filter <plugin-package> test
175 + ```
176 +
177 + 問題がなければ、必要に応じて型検査や参照アプリを確認し、最後に repository 全体の検証を行います。
178 +
179 + 変更のたびに最初から最も重い command を実行する必要はありません。
180 +
181 + # どこを変更するか
182 +
183 + 機能を追加するときは、まず責務に合った package を選びます。
184 +
185 + ```mermaid id="ud3gdo"
186 + flowchart TD
187 + Q{"何を変更する?"}
188 +
189 + Q -->|"共通のContent / Contract"| Core["packages/core"]
190 + Q -->|"CLI Command"| CLI["packages/cli"]
191 + Q -->|"再利用可能な機能"| Plugin["packages/plugins/*"]
192 + Q -->|"HonoX / Viteとの接続"| Integration["packages/integrations/honox"]
193 + Q -->|"見た目 / CSS"| Theme["packages/themes/*"]
194 + Q -->|"Route / Island / Site UI"| App["apps/web"]
195 + Q -->|"Site生成"| Scaffold["create-riebeckite / scaffold"]
196 + ```
197 +
198 + 判断に迷う場合は、[Architecture](./architecture.ja.md) の責務分離を基準にしてください。
199 +
200 + # Package の境界
201 +
202 + Framework を変更するときは package 間の依存方向を維持してください。
203 +
204 + 大まかな依存関係は次のようになります。
205 +
206 + ```mermaid id="osmqrm"
207 + flowchart BT
208 + App["Application"]
209 + Integration["Integration"]
210 + Plugin["Plugin"]
211 + Theme["Theme"]
212 + CLI["CLI"]
213 + Core["Core"]
214 +
215 + App --> Integration
216 + Integration --> Core
217 + Plugin --> Core
218 + Theme --> Core
219 + CLI --> Core
220 + CLI --> Integration
221 + ```
222 +
223 + 特に Core から外側への逆依存を作らないことが重要です。
224 +
225 + たとえば Core から、
226 +
227 + ```text id="7nxphg"
228 + apps/web
229 + packages/plugins/*
230 + HonoX
231 + Vite
232 + ```
233 +
234 + などの具体的な実装へ依存させてはいけません。
235 +
236 + Framework に依存しない contract は Core に置き、その contract を Integration や Plugin が利用します。
237 +
238 + # Public API を使う
239 +
240 + 外部 Plugin / Theme と同じ条件で利用できる API は、公開 export から参照してください。
241 +
242 + たとえば、
243 +
244 + ```ts id="wj3a9t"
245 + import { ... } from "@riebeckite/core";
246 + ```
247 +
248 + のような公開 entrypoint を使用します。
249 +
250 + 次のように package 内部へ直接依存することは避けてください。
251 +
252 + ```ts id="njjmrh"
253 + import { ... } from "@riebeckite/core/src/...";
254 + ```
255 +
256 + `src/**` は内部実装であり、安定した Public API ではありません。
257 +
258 + 公式 Plugin や Theme も可能な限り Public API の consumer として実装することで、外部 package から実際に利用できる contract になっていることを確認できます。
259 +
260 + # Scaffold は独立した Site として扱う
261 +
262 + Scaffold は Riebeckite monorepo 内でしか動かない構成にしてはいけません。
263 +
264 + 生成された Site は、
265 +
266 + ```text id="o8ss84"
267 + create-riebeckite
268 + ↓
269 + Generated Site
270 + ↓
271 + npm packages
272 + ↓
273 + build
274 + ```
275 +
276 + という形で、monorepo の内部 source に依存せず動作する必要があります。
277 +
278 + そのため scaffold を変更した場合は、workspace 内で動くだけではなく、外部 Site として成立することも確認してください。
279 +
280 + `check:scaffold` や external-site E2E は、この境界を検証するためにあります。
281 +
282 + # Documentation の境界
283 +
284 + 一般ユーザー向け Documentation では、Riebeckite monorepo の clone や workspace setup を前提にしません。
285 +
286 + ```mermaid id="3iq2qx"
287 + flowchart LR
288 + User["Site User"]
289 + Getting["Getting Started"]
290 + Site["Generated Site"]
291 +
292 + Dev["Framework Developer"]
293 + Framework["Framework Development"]
294 + Repo["Riebeckite Monorepo"]
295 +
296 + User --> Getting --> Site
297 + Dev --> Framework --> Repo
298 + ```
299 +
300 + Site を作るユーザーと Framework を開発するユーザーでは、必要な環境が異なるためです。
301 +
302 + monorepo 固有の command、内部 package 構成、Framework の build 方法などは、この Framework Development セクションで扱います。
303 +
304 + # 開発時に守る境界
305 +
306 + Framework の変更では、特に次の点を維持してください。
307 +
308 + - Core から Application、Plugin 内部、Framework 固有実装へ逆依存しない
309 + - 外部 Plugin / Theme が `src/**` を import しなくても実装できる Public API を維持する
310 + - 一般ユーザー向け Documentation に monorepo setup を要求しない
311 + - Scaffold を monorepo から独立して動作できる Site として維持する
312 + - 変更した範囲から検証し、必要に応じて repository 全体へ検証範囲を広げる
313 +
314 + Framework 全体の責務については [Architecture](./architecture.ja.md)、テスト方針については [Testing](./testing.ja.md)、CLI については [CLI](../reference/cli.ja.md)、HonoX との接続については [HonoX Integration](./honox-integration.ja.md) を参照してください。
315 +