blob: 1cffd4aaa9bc0204aa1e3fdfd2134adcf404e1c4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
|
# Specifications.md
# たかしの記録 — 要求仕様書
## 1. 文書目的
本書は、個人Webサイト「たかしの記録」の利用者視点・コンテンツ視点での要求仕様を定義する。
本書では「何を提供するサイトか」「誰がどのように読むか」「どの情報をどのように見せるか」を定義し、具体的なZola/Tera/SCSS実装方法は `Design.md` に委ねる。
---
## 2. サイト概要
### 2.1 サイト名
**たかしの記録**
### 2.2 サイトの目的
本サイトは、運営者が日頃考えたこと・感じたこと・調べたことを記録し、作成したソフトウェアとともに長期的に保存・公開する個人アーカイブである。
主な用途は次のとおり。
- 日々考えたことや感じたことの記録
- 読書を通じて考えたことの記録
- 技術調査・技術メモの公開
- 長文記事・考察の公開
- 作成したソフトウェアの紹介
- ソフトウェア制作の背景・過程・設計意図の記録
- ソフトウェアに関連する技術記事との相互参照
### 2.3 主な対象分野
Notesでは特定分野に限定せず、少なくとも以下を扱う。
- 情報工学・ソフトウェア
- 論理学
- マルクス・資本論・政治経済
- 地球環境
- 読書を通じた考察
- 上記にまたがる複合的なテーマ
分類は固定カテゴリではなくタグを基本とし、分野横断の記事を許容する。
### 2.4 想定読者
- 運営者本人
- ソフトウェアエンジニア
- 技術分野に関心のある一般読者
- 学生
- 個々の記事テーマに関心のある一般人
専門読者だけに限定せず、記事冒頭で主題を把握できることを重視する。
### 2.5 更新頻度
通常は **2〜3か月に1〜2回程度** を想定する。
更新頻度を競うニュースサイトやSNSではなく、長期間残るアーカイブとして設計する。
---
## 3. サイトの基本コンセプト
### 3.1 中心コンテンツ
サイトの主役は以下の2つとする。
1. **Notes**
2. **Software**
HomeとAboutは、この2つへの入口・補助情報として扱う。
### 3.2 デザインコンセプト
デザインは **Minimal Editorial Archive** を基本とする。
方向性は以下。
- 文章とリンクを主役にする
- 装飾を抑える
- 罫線・余白・タイポグラフィで情報階層を表現する
- カードUIを乱用しない
- 画像を主役にしない
- 技術者向けダッシュボード風・SaaSランディングページ風にしない
- 長文を落ち着いて読める
- 更新間隔が長くても「止まったサイト」に見えにくい
- Gwern.netの長文アーカイブ性とSimon Willison's Weblogの実用的な情報構造を参考にする
### 3.3 基本画面構造
全画面の基本構造は以下。
- 小さなHeader
- Main content
- 小さなFooter
Header/Footerは本文より目立たせず、高さも必要以上に取らない。
Sidebarは使用しない。
---
## 4. 情報アーキテクチャ
### 4.1 グローバル構成
トップレベルは以下を基本とする。
- `/` — Home
- `/notes/` — Notes一覧
- `/software/` — Software一覧
- `/about/` — About
- `/tags/` — タグ一覧
- `/tags/<tag>/` — タグ別Notes等の一覧
### 4.2 グローバルナビゲーション
Headerに以下を表示する。
- Home
- Notes
- Software
- About
Source/cgitへのリンクはグローバルナビゲーションには常設せず、Software内で案内する。
---
## 5. Home仕様
### 5.1 役割
Homeはサイト全体の入口・索引として機能する。
ポートフォリオ用の大きなHero、自己宣伝CTA、プロフィール写真などは必須としない。
### 5.2 表示内容
以下の順序を基本とする。
1. 短い説明文
2. 最近のNotes
3. Software
4. サイトについての短い説明
5. Aboutへの導線
サイト名はHeaderに表示されるため、Home本文では重複表示しない。
### 5.3 トップ説明文
初期文言:
> 日々考えたこととか思ったことを記録します
将来文言を修正できること。
### 5.4 最近のNotes
初期表示件数は **5件** とする。
各項目には以下を表示する。
- 公開日
- タイトル
- 必要に応じ短いdescription
Homeでは情報量を抑え、本文を直接大量表示しない。
### 5.5 Software
初期表示件数は **4件** とする。
Homeでは原則としてSoftware名を中心に表示する。
---
## 6. Notes仕様
### 6.1 Notesの定義
文章として残したい内容は原則としてNotesとして扱う。
技術メモ、読書記録、調査、考察、論考を別々のコンテンツ型へ過度に分割しない。
### 6.2 Notes一覧
Notes一覧は **年別アーカイブ** とする。
例:
- 2026
- 08-21 記事タイトル
- 05-03 記事タイトル
- 2025
- ...
年は新しい順、各年内も原則として公開日の新しい順に表示する。
### 6.3 Notes一覧に表示する情報
- 公開日
- タイトル
- タグ
- 必要に応じdescription
タグはNotes一覧およびタグ一覧で表示する。
### 6.4 Note詳細
Note詳細では以下を表示する。
- タイトル
- 公開日
- 更新日(存在する場合)
- 目次
- 本文
- 脚注
- 参考文献
- 関連Software(設定されている場合)
- 前後の記事導線は必須としない
タグはNote詳細の主要表示項目にしない。
### 6.5 目次
Note詳細では **目次を常時表示**する。
Sidebarは使わないため、本文冒頭付近にインラインで配置する。
見出しが存在しない場合は空の目次領域を表示しない。
### 6.6 脚注
Markdown/Zola標準機能による脚注を日常的に利用できること。
脚注の見た目を本文と一貫させる。
### 6.7 参考文献
長文記事の末尾にReferences/参考文献セクションを設けられること。
参考文献は通常のMarkdownで記述可能とし、共通の見た目を持つ。
### 6.8 公開日と更新日
- 公開日は必須
- 更新日は任意
- 更新日が存在する場合は公開日とともに表示する
### 6.9 記事の成熟度
Draft / Note / Essay 等の成熟度・状態ラベルは導入しない。
Zola内部のdraft機能は公開制御に使用してよいが、利用者向けの成熟度表示は行わない。
---
## 7. Tags仕様
### 7.1 分類方針
初期実装ではカテゴリを設けず、**tagsのみ**を使用する。
### 7.2 タグの目的
- 分野横断の記事を柔軟に分類する
- 同じテーマの記事を探せるようにする
- 固定カテゴリ階層を避ける
### 7.3 想定タグ例
- 情報工学
- 論理学
- 資本論
- 政治経済
- 地球環境
- AI
- LLM
- 読書
- Windows
- Git
タグ語彙はコンテンツ追加に応じて増やす。
---
## 8. Software仕様
### 8.1 役割
Softwareは作成したソフトウェアを人間向けに説明する場所とする。
ソースコードそのものの閲覧・履歴表示はcgitへ委ねる。
### 8.2 Software一覧
一覧では情報量を抑え、**Software名を主表示**とする。
必要に応じ短いdescriptionを添えてよいが、画像や大量のmetadataは表示しない。
### 8.3 Software詳細
以下の情報を扱えること。
- Software名
- 概要
- 作成した背景・目的
- 開発・制作の過程
- 特徴
- 使用言語
- ライセンス
- Source(自前cgit)
- GitHub mirror(存在する場合)
- 関連Notes
- スクリーンショット(必要な場合のみ)
Implementation detailsは本文中で必要な範囲だけ記述し、固定項目として過剰に構造化しない。
### 8.4 Sourceの優先順位
ソースコードの正本は **自前cgit** とする。
Software詳細では以下の順で扱う。
1. Source — cgit
2. GitHub mirror — 当面維持
### 8.5 スクリーンショット
- Software一覧では表示しない
- Software詳細で必要な場合のみ表示する
- 画像が多くなり本文の可読性を損なわないようにする
---
## 9. NotesとSoftwareの関連付け
NotesとSoftwareは相互に関連付けられること。
例:
- Softwareから関連Notesへ
- Noteから関連Softwareへ
関連付けは明示的に管理し、単なるタグ一致だけで自動的に関連付けない。
---
## 10. About仕様
Aboutには以下を掲載する。
- 名前
- 一言プロフィール
- このサイトの目的
- 主な関心分野
- 連絡先
職務経歴書・詳細な履歴書としては設計しない。
---
## 11. Header仕様
### 11.1 表示内容
- サイト名「たかしの記録」
- Home
- Notes
- Software
- About
- Dark/Light theme切替(提供する場合)
### 11.2 レイアウト
- 高さを抑える
- サイト本文より主張しない
- DesktopとMobileの双方で簡潔に表示
- 必要でなければHamburger menuは使用しない
---
## 12. Footer仕様
Footerには最低限以下を表示する。
- Copyright
- RSS
- Mail
cgitリンクはSoftware側で扱う。
---
## 13. Typography仕様
### 13.1 本文
Sans-serifを使用する。
Web fontは外部取得せず、system font stackを使用する。
### 13.2 UI
Sans-serif + Monospaceを役割分担して使用する。
Monospaceは以下のような補助情報に使用できる。
- 日付
- metadata
- ラベル
- コード
- 技術的な短い補助情報
### 13.3 コード
system monospaceを使用する。
---
## 14. 色・テーマ仕様
### 14.1 Light theme
- 紙に近い暖かみのある明るい背景
- ほぼ黒の本文
- muted gray
- 薄い罫線
- 青をaccent/link色として使用
### 14.2 Dark theme
Dark modeに対応する。
- 真っ黒ではなく濃いgrayを基本
- 明るい本文
- muted gray
- dark border
- light themeと対応する青系accent
### 14.3 Accent
Accentは青系1色を基本とする。
具体的な色値はDesignで定義する。
---
## 15. リンク仕様
- 通常リンクは青
- 原則として下線を付け、リンクであることを明確にする
- Hoverでは色等を軽く変える
- 大きなアニメーションを付けない
- 外部リンクには `↗` 等の簡潔な外部リンク記号を表示する
- 外部アイコンライブラリは使用しない
---
## 16. Layout仕様
- Sidebarなし
- Main contentを中央付近に配置
- 長文は左右に十分な余白を確保
- 最大本文幅はDesign段階で具体値を定義
- Desktopでは広すぎない
- Mobileでは横スクロールを発生させない
- コードブロック等、必要な要素のみ内部横スクロールを許容
---
## 17. Motion仕様
Animationは原則使用しない。
以下も初期実装では不要。
- View Transition
- Parallax
- Scroll animation
- Fade-in animation
- Decorative motion
---
## 18. 画像仕様
- 画像は最小限
- Homeに装飾目的の大量画像を置かない
- Notesでは説明に必要な画像のみ
- Softwareでは詳細ページのみ
- 外部画像hotlinkを原則避ける
- 代替テキストを付与する
---
## 19. Feed仕様
以下を提供する。
- Atom
- RSS
HeaderまたはFooterから購読導線を用意する。
Feed autodiscoveryに対応する。
---
## 20. Search仕様
初期リリースではSearchを提供しない。
将来の記事数増加に応じて、Zolaの検索インデックス機能を第一候補として追加検討する。
---
## 21. Comments仕様
初期リリースではコメント機能を提供しない。
理由:
- 完全静的構成では保存先が存在しない
- 自前backendを追加すると現行セキュリティ境界が変化する
- 外部コメントサービスは外部依存・プライバシーの再検討が必要
将来機能として、以下を別途評価する。
- 自前軽量コメントbackend
- Gitベース方式
- 外部コメントサービス
- Mailによる感想受付
---
## 22. SNS共有仕様
初期リリースでは大きなSNS共有ボタン群を必須としない。
外部dependencyを追加せず、簡潔なテキストリンクまたはWeb Share API等だけで実現できる場合に追加を検討する。
サイトのEditorialデザインを損なわないことを優先する。
---
## 23. Analytics仕様
アクセス解析は導入しない。
- 外部Analytics scriptなし
- Tracking cookieなし
- Marketing trackerなし
Webサーバの運用ログはサーバ運用上のログであり、サイト機能としてのアクセス解析とは扱わない。
---
## 24. URL仕様
### 24.1 URL構造
- `/notes/<slug>/`
- `/software/<slug>/`
- `/tags/<slug>/`
- `/about/`
### 24.2 Slug
Content filename / slugは **英語ASCIIを基本**とする。
記事本文や表示タイトルは日本語でよい。
URLの安定性を優先し、公開後のslug変更は原則避ける。
---
## 25. 日本語・多言語仕様
- 表示言語は日本語のみ
- UI文言も日本語
- 初期設計では多言語対応を実装しない
- 多言語化のための不要なUIやselectorは設けない
---
## 26. Accessibility要求
最低限以下を満たす。
- Semantic HTML
- 適切なheading hierarchy
- Keyboard navigation
- Visible focus
- 十分な色contrast
- 画像alt
- Linkが色だけで判別不能にならない
- HTML/主要navigationはJavaScriptなしでも利用可能
- Theme切替機能がなくてもOS themeで十分読めること
- prefers-reduced-motionを尊重(原則motion自体を使用しない)
---
## 27. Performance要求
サイトは静的HTML/CSS/最小JSのみで成立すること。
- Backend runtime不要
- DB不要
- npm/Node.js不要
- 外部CDN不要
- Web font不要
- 大きなfrontend framework不要
- 初期表示に不要な画像を読み込まない
- JavaScriptが無効でも主要本文が読める
---
## 28. Security / Privacy要求
- npm package dependencyを使用しない
- Node.js runtimeを使用しない
- 外部themeを原則使用しない
- 外部JavaScript CDNを使用しない
- Inline JavaScriptを避ける
- `eval()` を使用しない
- 外部trackingを使用しない
- CSP `default-src 'self'` を中心とした厳格な設定と互換性を持つ
- Static Siteとして本番にserver-side codeを置かない
- Caddyは生成済み成果物のみを配信する
---
## 29. 技術基盤に関する制約
以下はDesignに委ねるが、要求上の前提とする。
- SSG: Zola
- Template: Tera
- Content: Markdown
- Style: SCSS
- Client JS: minimal vanilla JavaScript
- Production: Caddy static file server
- Build: Client PC
- Deployment: `public/` build artifactをVPSへ転送
- Git source管理とDeployは独立
- cgitをソースコード正本とする
---
## 30. 初期リリースの非目標
以下は初期リリースで実装しない。
- コメント
- Search
- CMS
- User login
- Database
- SSR
- SPA
- API backend
- WebSocket
- Analytics
- Frontend framework
- htmx
- Tailwind CSS
- npm/Node.js
- External theme
- Heavy animation
- Large image gallery
- Multilingual UI
---
## 31. 受入条件
初期リリースは以下を満たすこと。
- [ ] 「たかしの記録」というサイト名が表示される
- [ ] Home / Notes / Software / Aboutへ到達可能
- [ ] Homeに最近のNotes最大5件を表示
- [ ] HomeにSoftware最大4件を表示
- [ ] Notesが年別に表示される
- [ ] Notes一覧にタグが表示される
- [ ] Note詳細に公開日・更新日・目次・本文を表示できる
- [ ] 脚注を利用できる
- [ ] 参考文献を自然に表示できる
- [ ] Software一覧を画像なしの簡潔な一覧として表示
- [ ] Software詳細に背景・過程・言語・ライセンス・Source等を記載できる
- [ ] cgitをSource正本として案内できる
- [ ] GitHub mirrorを任意表示できる
- [ ] NoteとSoftwareを明示的に相互関連付けできる
- [ ] Aboutに名前・一言プロフィール・目的・関心分野・連絡先を表示できる
- [ ] Light/Dark双方で読める
- [ ] 外部リンクを視覚的に判別できる
- [ ] RSSとAtomを提供
- [ ] 404ページを提供
- [ ] Mobile/Desktop双方で利用可能
- [ ] JavaScriptなしでも主要コンテンツを閲覧可能
- [ ] 外部CDN・npm・Node.js・frontend frameworkを必要としない
- [ ] サイト全体が静的ファイルとして生成可能
---
## 32. 将来拡張
要件変更時に別途設計する。
- Search
- Comments
- SNS共有
- より高度な関連コンテンツ表示
- タグ数増加へのUI改善
- Page pagination
- 多言語
- 画像処理の高度化
初期実装で将来拡張のための複雑な抽象化を先行導入しない。
|