@ywal123456/jskim 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,420 @@
1
+ # エラーとトラブルシュート
2
+
3
+ この章では、よくある問題の症状、原因、JSKim の動作、確認方法、解決の手がかりを整理します。
4
+ CLI の構文は [CLIリファレンス](05-cli-reference.md)、設定は [設定](06-configuration.md) も参照してください。
5
+
6
+ ## エラー処理の概要
7
+
8
+ | 状況 | `build` | `watch` | `serve` | `dev` |
9
+ | ---- | ------- | ------- | ------- | ----- |
10
+ | template / render エラー | 終了(失敗) | process 維持 | — | process 維持 + overlay 可 |
11
+ | config エラー(起動時) | 終了(失敗) | 終了(失敗) | 終了(失敗) | 終了(失敗) |
12
+ | config エラー(実行中の再読込) | — | last-known-good を維持 | — | 維持 + overlay 可 |
13
+ | port 衝突 | — | — | 起動失敗で終了 | 起動失敗で終了 |
14
+
15
+ `—` はその command では通常起きない、または直接関係しないことを表します。
16
+
17
+ ## 問題を調べる基本の順序
18
+
19
+ 1. terminal のメッセージを読む
20
+ 2. `dev` なら browser overlay も確認する
21
+ 3. 直前に編集した file を見直す
22
+ 4. `jskim.config.js` と path を確認する
23
+ 5. port / 別 process の占有を確認する
24
+ 6. restart-required の設定変更なら command を再起動する
25
+
26
+ いきなり依存関係の再インストールやキャッシュ削除から始めないでください。
27
+
28
+ ## Unknown command / option
29
+
30
+ ### 症状
31
+
32
+ コマンドや option が認識されない。
33
+
34
+ ### 原因
35
+
36
+ - 存在しない command 名
37
+ - その command で使えない option
38
+ - `--port=4000` のような `=` 付き記法
39
+ - `--` 単独トークン
40
+ - option の重複や値の欠落
41
+
42
+ ### JSKim の動作
43
+
44
+ 引数解析の段階で失敗し、process は終了します(exit code `1`)。
45
+
46
+ 代表メッセージ:
47
+
48
+ ```text
49
+ [JSKim] 不明なコマンドです: <command>
50
+ ```
51
+
52
+ ```text
53
+ [JSKim] 不明なoptionです: <token>
54
+ ```
55
+
56
+ ### 確認・解決
57
+
58
+ - `jskim --help` で使える command を確認する
59
+ - `serve` に `--open` は無い(`dev --open` を使う)
60
+ - `--port 4000` のようにスペース区切りで書く
61
+
62
+ ## Project 選択のエラー
63
+
64
+ ### 症状
65
+
66
+ どの project を対象にするか決められない。
67
+
68
+ ### 原因と動作
69
+
70
+ | 状況 | 結果 |
71
+ | ---- | ---- |
72
+ | `projects` が 0 件 | エラー |
73
+ | 1 件だけ | 名前省略可 |
74
+ | 2 件以上で省略 | エラー(候補一覧) |
75
+ | 存在しない名前 | エラー |
76
+ | project 名と `--all` の同時指定 | エラー |
77
+
78
+ 代表メッセージ:
79
+
80
+ ```text
81
+ [JSKim] projectを指定してください。
82
+ ```
83
+
84
+ ### 解決例
85
+
86
+ ```bash
87
+ jskim build sample
88
+ jskim build --all
89
+ ```
90
+
91
+ ## Config file の読み込みエラー
92
+
93
+ ### 症状
94
+
95
+ 起動直後に設定を読めない。
96
+
97
+ ### 原因の例
98
+
99
+ - ワークスペースに `jskim.config.js` が無い
100
+ - JavaScript の構文エラー
101
+ - `module.exports` がオブジェクトでない
102
+ - ESM(`export default`)形式を使っている
103
+ - require 時の例外
104
+
105
+ 代表メッセージ:
106
+
107
+ ```text
108
+ [JSKim] 設定ファイルが見つかりません: jskim.config.js
109
+ ```
110
+
111
+ ### 解決
112
+
113
+ - コマンドを project ルートで実行する
114
+ - CommonJS(`module.exports = { ... }`)で書く
115
+ - 構文エラーを修正する
116
+
117
+ ## Config 検証エラー
118
+
119
+ ### 症状
120
+
121
+ 設定は読めたが、値が不正。
122
+
123
+ ### よくある原因
124
+
125
+ - `projects` が無い / オブジェクトでない
126
+ - `sourceDir` / `outputDir` の欠落や未存在
127
+ - `files` と `render` / `copy` の同時設定
128
+ - `serve.port` / `watch.debounce` の型や範囲不正
129
+ - `data.rootPath`(予約語衝突)
130
+
131
+ > **Note**
132
+ >
133
+ > 認識していない余分な key は、必ずしもエラーになりません。
134
+ > 無視されることがあります。
135
+
136
+ ### 解決
137
+
138
+ [設定](06-configuration.md) の型と既定値を確認し、問題の key だけ直します。
139
+
140
+ ## Template / render エラー
141
+
142
+ ### 症状
143
+
144
+ Nunjucks の構文ミス、見つからない `extends` / `include`、filter 実行時エラーなど。
145
+
146
+ ### JSKim の動作
147
+
148
+ | command | 動作 |
149
+ | ------- | ---- |
150
+ | `build` | 失敗して終了(exit code `1`) |
151
+ | `watch` / `dev` | terminal に表示。process は維持。`dev` では overlay 可 |
152
+
153
+ 代表的な見出し:
154
+
155
+ ```text
156
+ [JSKim] プロジェクト "<name>" の Nunjucks レンダリングに失敗しました。
157
+ ```
158
+
159
+ ### 確認・解決
160
+
161
+ 1. 表示されたソース / テンプレート path を開く
162
+ 2. `extends` / `include` のパスが template root 基準か確認する
163
+ 3. 修正して保存する(`watch` / `dev` なら再 build)
164
+ 4. 成功すれば overlay は消える
165
+
166
+ 文法の基本は [Nunjucksの使い方](08-nunjucks.md) を参照してください。
167
+
168
+ ## Output パスの衝突
169
+
170
+ ### 症状
171
+
172
+ 同じ output を複数の source が生成しようとする。
173
+
174
+ ### 原因の例
175
+
176
+ - 複数の `files` entry が同じ出力先に重なる
177
+ - `main.js` と `main.js.njk` のように suffix 除去後に同名になる
178
+ - Windows で大文字小文字だけが違う path
179
+
180
+ ### JSKim の動作
181
+
182
+ 書き込み前の計画段階で検出し、build は失敗します。
183
+
184
+ ### 解決
185
+
186
+ - `from` / `to` / ファイル名を分ける
187
+ - どちらかを `exclude` する
188
+ - 命名規則を揃える
189
+
190
+ 詳細は [files pipeline](07-files-pipeline.md) を参照してください。
191
+
192
+ ## 複数 project の outputDir 衝突
193
+
194
+ ### 症状
195
+
196
+ `jskim build --all` が開始前に止まる。
197
+
198
+ ### 原因
199
+
200
+ - 同じ `outputDir`
201
+ - 入れ子(祖先 / 子孫)の `outputDir`
202
+
203
+ これは files 内の output 衝突とは別です。project 間の互換性検査です。
204
+
205
+ ### 解決
206
+
207
+ 各 project の `outputDir` を重ならない場所に分けます。
208
+
209
+ ```js
210
+ projects: {
211
+ siteA: { sourceDir: 'src/a', outputDir: 'dist/a' },
212
+ siteB: { sourceDir: 'src/b', outputDir: 'dist/b' },
213
+ }
214
+ ```
215
+
216
+ ## Port already in use
217
+
218
+ ### 症状
219
+
220
+ `serve` / `dev` が待ち受けできない。
221
+
222
+ ### 原因
223
+
224
+ 既定の `3000`(または指定 port)を他 process が使用中(`EADDRINUSE`)。
225
+
226
+ 代表メッセージ:
227
+
228
+ ```text
229
+ [JSKim] ポート <port> はすでに使用されています。
230
+ ```
231
+
232
+ ### JSKim の動作
233
+
234
+ 自動で次の空き port を探しません。起動に失敗した process は終了します。
235
+
236
+ ### 解決例
237
+
238
+ ```bash
239
+ jskim dev sample --port 3001
240
+ ```
241
+
242
+ または `jskim.config.js` の `serve.port` を変更します。
243
+ 占有している process を止める方法は OS によって異なります。
244
+
245
+ ## 不正な host / port
246
+
247
+ ### 症状
248
+
249
+ CLI または config の待ち受け設定が拒否される。
250
+
251
+ ### 原因の例
252
+
253
+ - `--port` の値欠落
254
+ - `0` / `65536` / 小数 / 非数値
255
+ - 空の host
256
+
257
+ 検出は CLI 解析または設定検証の段階です。
258
+
259
+ ### 正しい例
260
+
261
+ ```bash
262
+ jskim serve sample --host 127.0.0.1 --port 4000
263
+ ```
264
+
265
+ ## Browser open の失敗
266
+
267
+ ### 症状
268
+
269
+ `dev --open` でブラウザが開かない。
270
+
271
+ ### JSKim の動作
272
+
273
+ warning を出し、**開発サーバーは継続**します。process 失敗にはしません。
274
+
275
+ ### 解決
276
+
277
+ terminal に表示された URL を手動で開きます。
278
+
279
+ ```text
280
+ http://127.0.0.1:3000/
281
+ ```
282
+
283
+ ## CSS 変更が soft reload されない
284
+
285
+ ### 確認順
286
+
287
+ 1. `dev` で `liveReload: true` か
288
+ 2. 変更が `.css` / `.css.njk` の `change` だけか
289
+ 3. `templates[]` 配下の変更ではないか
290
+ 4. page の `<link rel="stylesheet">` が same-origin か
291
+ 5. href が実際の output を指しているか
292
+
293
+ よくある誤り(page-local):
294
+
295
+ ```nunjucks
296
+ {{ rootPath }}assets/css/crud.css
297
+ ```
298
+
299
+ 正しい例:
300
+
301
+ ```html
302
+ <link rel="stylesheet" href="assets/css/crud.css">
303
+ ```
304
+
305
+ 条件を満たさない、または読み込みに失敗すると full reload になります。
306
+ 詳細は [開発機能](09-development-features.md) を参照してください。
307
+
308
+ ## Browser overlay が表示されない
309
+
310
+ ### 確認
311
+
312
+ - `jskim dev`(または `npm run dev`)で起動しているか
313
+ - `dev.liveReload` が `true` か
314
+ - terminal にはエラーが出ているか
315
+ - ブラウザが live reload に接続できているか(接続再試行のログ)
316
+ - Strict CSP などで注入 script が遮断されていないか(環境依存)
317
+
318
+ `serve` だけでは overlay は出ません。
319
+
320
+ ## Config の修正が反映されない
321
+
322
+ ### 確認
323
+
324
+ 1. `watch` / `dev` で動かしているか(`build` / `serve` は監視しない)
325
+ 2. 構文エラーや検証エラーで last-known-good のままになっていないか
326
+ 3. restart-required(`outputDir` / `serve.host` / `serve.port` / `dev.liveReload`)ではないか
327
+ 4. CLI の `--host` / `--port` が config より優先されていないか
328
+ 5. terminal の warning を読んでいないか
329
+
330
+ 必要なら command を止めて再起動します。
331
+
332
+ ## build --all の一部失敗
333
+
334
+ ### 症状
335
+
336
+ ログでは成功と失敗が混在し、最終的に失敗終了する。
337
+
338
+ ### JSKim の動作
339
+
340
+ - 定義順に各 project を試す
341
+ - 途中失敗があっても次の project へ進む
342
+ - 1 件でも失敗があれば最終 exit code は `1`
343
+ - 成功した project の output は残ることがある
344
+
345
+ > **Warning**
346
+ >
347
+ > 途中の成功ログだけを見て、全体が成功したと誤解しないでください。
348
+
349
+ ## 削除した source が output に残る
350
+
351
+ ### 原因と動作
352
+
353
+ | `build.clean` | 削除した source の扱い |
354
+ | ------------- | ---------------------- |
355
+ | `true`(既定) | 再 build 前に `outputDir` を消すため、消えたファイルも output から無くなる |
356
+ | `false` | 上書き生成のみ。消えた source に対応する古い output が残ることがある |
357
+
358
+ `watch` / `dev` の再 build でも同様です。
359
+
360
+ ### 解決
361
+
362
+ - 通常は `build.clean: true` を維持する
363
+ - `false` にしている場合は、不要ファイルを手動で整理するか、一度 clean 付き build を行う
364
+
365
+ ## dist を直接編集したら消えた
366
+
367
+ ### 原因
368
+
369
+ `dist/` は build の output です。次の clean / build で上書き・削除されることがあります。
370
+
371
+ ### 解決
372
+
373
+ 編集するのは `src/`(source)側です。
374
+ 見た目の確認用に `dist` を一時的に開くことはできますが、恒久的な修正場所にはしません。
375
+
376
+ ## Internal link / asset が 404
377
+
378
+ ### 確認
379
+
380
+ - source → output の対応([files pipeline](07-files-pipeline.md))
381
+ - 共通 asset は `{{ rootPath }}assets/...`
382
+ - page-local は `assets/...`
383
+ - 先頭 `/` の絶対パスが意図どおりか(serve の root は `outputDir`)
384
+ - Windows 以外も含め、ファイル名の大文字小文字
385
+ - そもそも build 済みか
386
+
387
+ 公式 sample の例:
388
+
389
+ - 共通: `assets/css/common.css`
390
+ - CRUD: `crud/assets/css/crud.css`
391
+
392
+ ## Exit code と process 維持の要約
393
+
394
+ | 状況 | process | 結果 |
395
+ | ---- | ------- | ---- |
396
+ | `build` 成功 | 終了 | exit `0` |
397
+ | `build` 失敗 | 終了 | exit `1` |
398
+ | `build --all` で 1 件以上失敗 | 終了 | exit `1` |
399
+ | `watch` / `dev` の再 build 失敗 | 維持 | エラー表示(`dev` は overlay 可) |
400
+ | `serve` / `dev` の port 衝突 | 起動失敗側は終了 | exit `1` |
401
+ | `dev --open` の失敗 | 維持 | warning |
402
+ | `Ctrl+C` での停止 | 終了 | exit `0` |
403
+
404
+ ## 問い合わせ・報告に用意するとよい情報
405
+
406
+ - JSKim version(`jskim --version`)
407
+ - Node.js version
408
+ - package manager(npm / pnpm / yarn)
409
+ - OS
410
+ - 実行した command
411
+ - terminal のエラー全文(必要な範囲)
412
+ - `jskim.config.js` の関連部分
413
+ - 再現できる最小の directory 構成
414
+
415
+ > **Note**
416
+ >
417
+ > 報告前に、秘密情報、個人情報、社内専用 URL を取り除いてください。
418
+
419
+ 公式の issue 先は、パッケージ / repository の案内に従ってください。
420
+ (例: GitHub repository の Issues)
@@ -0,0 +1,188 @@
1
+ # Dashboard例
2
+
3
+ この章では、公式 Dashboard sample を通じて、共通 layout、component、template 内データ、共通 / page-local asset の使い方を確認します。
4
+
5
+ > **Note**
6
+ >
7
+ > 以下のコードは核心部分だけの抜粋です。
8
+ > 全体の source は各 link から確認できます。
9
+
10
+ ## Sample の目的
11
+
12
+ Dashboard は、管理画面でよく見かける構成を、1 画面にまとめた静的 UI sample です。
13
+
14
+ - 共通 layout / component / page の関係を確認できる
15
+ - summary card、table、notice などの見た目を確認できる
16
+ - 実際のデータ取得や chart 機能はない
17
+ - 表示値は template 内の静的値
18
+
19
+ Source:
20
+
21
+ - [`pages/dashboard/index.html.njk`](../../src/sample/pages/dashboard/index.html.njk)
22
+
23
+ ## 関連 file
24
+
25
+ ```text
26
+ src/sample/
27
+ ├─ layouts/base.njk
28
+ ├─ components/
29
+ │ ├─ header.njk
30
+ │ ├─ sidebar.njk
31
+ │ ├─ breadcrumb.njk
32
+ │ └─ footer.njk
33
+ └─ pages/
34
+ ├─ assets/css/common.css
35
+ └─ dashboard/
36
+ ├─ index.html.njk
37
+ └─ assets/css/dashboard.css
38
+ ```
39
+
40
+ 共通 layout の詳細は [プロジェクト構成](03-project-structure.md) と [Nunjucksの使い方](08-nunjucks.md) も参照してください。
41
+
42
+ ## Page 構成
43
+
44
+ 実際の Dashboard には次があります。
45
+
46
+ | 領域 | 内容 |
47
+ | ---- | ---- |
48
+ | page heading | 「Dashboard」と説明文 |
49
+ | breadcrumb | Portal → Dashboard |
50
+ | summary card | 4 枚(登録商品数 / 公開中 / 非公開 / 今月の更新) |
51
+ | 最近の更新 table | 5 行の静的データと status badge |
52
+ | お知らせ | notice リスト |
53
+ | 画面ナビ | Portal / CRUD / Wizard への移動 |
54
+
55
+ ## Layout 継承
56
+
57
+ ```nunjucks
58
+ {% extends "layouts/base.njk" %}
59
+ ```
60
+
61
+ - 共通の HTML document 構造を使う
62
+ - header / sidebar / footer は layout 側で include
63
+ - page は `title` / `pageCss` / `content` block を埋める
64
+ - layout 自体は直接 output されない
65
+
66
+ Layout:
67
+
68
+ - [`layouts/base.njk`](../../src/sample/layouts/base.njk)
69
+
70
+ ## Page 変数
71
+
72
+ ```nunjucks
73
+ {% set currentSection = "dashboard" %}
74
+ {% set breadcrumbs = [
75
+ { label: "Portal", href: rootPath + "index.html" },
76
+ { label: "Dashboard" }
77
+ ] %}
78
+ ```
79
+
80
+ | 変数 | 役割 |
81
+ | ---- | ---- |
82
+ | `currentSection` | sidebar の現在位置表示 |
83
+ | `breadcrumbs` | breadcrumb component の表示データ |
84
+ | `block title` | `<title>`(`Dashboard - {{ site.name }}`) |
85
+
86
+ ## Summary と table
87
+
88
+ summary と最近の更新は、template 内の配列です。
89
+
90
+ ```nunjucks
91
+ {% set summaryCards = [
92
+ { label: "登録商品数", value: "120" },
93
+ { label: "公開中", value: "98" },
94
+ { label: "非公開", value: "22" },
95
+ { label: "今月の更新", value: "15" }
96
+ ] %}
97
+
98
+ {% for card in summaryCards %}
99
+ <article class="summary-card">
100
+ <p class="summary-card__label">{{ card.label }}</p>
101
+ <p class="summary-card__value">{{ card.value }}</p>
102
+ </article>
103
+ {% endfor %}
104
+ ```
105
+
106
+ - 外部 API の応答ではない
107
+ - 繰り返す HTML を短く書く例
108
+ - 実際の application では、backend や build 前のデータ生成など、別の仕組みが必要
109
+
110
+ JSKim 自体は API を提供しません。
111
+
112
+ ## Status 分岐
113
+
114
+ ```nunjucks
115
+ {% if item.status == "公開" %}
116
+ <span class="badge badge--public">公開</span>
117
+ {% elif item.status == "非公開" %}
118
+ <span class="badge badge--private">非公開</span>
119
+ {% else %}
120
+ <span class="badge badge--draft">下書き</span>
121
+ {% endif %}
122
+ ```
123
+
124
+ class とテキストの両方で状態を示します。色だけに頼らない書き方です。
125
+
126
+ ## Asset
127
+
128
+ 共通 CSS(layout):
129
+
130
+ ```nunjucks
131
+ {{ rootPath }}assets/css/common.css
132
+ ```
133
+
134
+ Dashboard CSS(page):
135
+
136
+ ```html
137
+ <link rel="stylesheet" href="assets/css/dashboard.css">
138
+ ```
139
+
140
+ | source | 処理 | output |
141
+ | ------ | ---- | ------ |
142
+ | `pages/assets/css/common.css` | copy | `assets/css/common.css` |
143
+ | `pages/dashboard/assets/css/dashboard.css` | copy | `dashboard/assets/css/dashboard.css` |
144
+
145
+ `rootPath` の詳細は [files pipeline](07-files-pipeline.md) を参照してください。
146
+
147
+ ## Build output
148
+
149
+ ```text
150
+ dist/sample/dashboard/index.html
151
+ dist/sample/dashboard/assets/css/dashboard.css
152
+ dist/sample/assets/css/common.css
153
+ ```
154
+
155
+ ## 修正例
156
+
157
+ | 変えたいもの | 編集先 |
158
+ | ------------ | ------ |
159
+ | summary の label / value | `pages/dashboard/index.html.njk` の `summaryCards` |
160
+ | table の行 | 同 file の `recentUpdates` |
161
+ | お知らせ文 | 同 file の `notices` |
162
+ | Dashboard 専用の見た目 | `pages/dashboard/assets/css/dashboard.css` |
163
+
164
+ 保存後、`npm run dev` で確認できます。
165
+
166
+ ## 新しい Dashboard page への拡張
167
+
168
+ 最小の手順例:
169
+
170
+ 1. 新しい `.html.njk` を `pages/` 配下に作る(または既存 page を参考にする)
171
+ 2. `{% extends "layouts/base.njk" %}` する
172
+ 3. `currentSection` / `breadcrumbs` を設定する
173
+ 4. `content` block を書く
174
+ 5. 必要なら page-local CSS を置く
175
+ 6. `dev` または `build` で確認する
176
+
177
+ 自動 generator や専用のコピーコマンドはありません。
178
+
179
+ ## Sample の限界
180
+
181
+ - 実際の統計計算はない
182
+ - API / database はない
183
+ - chart library はない
184
+ - 認証はない
185
+ - 値は静的 sample
186
+
187
+ 製品としての制限は [制限事項](14-limitations.md) を参照してください。
188
+ 類似の画面構成として [CRUD例](12-crud-example.md) と [Wizard例](13-wizard-example.md) もあります。