@tenjuu99/blog 0.2.55 → 0.2.57

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,165 @@
1
+ # @tenjuu99/blog チュートリアル
2
+
3
+ このチュートリアルでは、`@tenjuu99/blog` を使って静的ブログサイトを作成する方法を学びます。
4
+
5
+ ## 目次
6
+
7
+ - [セットアップ](#セットアップ)
8
+ - [記事を書く](#記事を書く)
9
+ - [タイトルとURL](#タイトルとurl)
10
+ - [テンプレート](#テンプレート)
11
+ - [設定ファイル](#設定ファイル)
12
+ - [次のステップ](#次のステップ)
13
+
14
+ ## セットアップ
15
+
16
+ ### インストール
17
+
18
+ まず、`@tenjuu99/blog` をインストールします。
19
+
20
+ ```bash
21
+ npm i @tenjuu99/blog
22
+ ```
23
+
24
+ ### プロジェクトの初期化
25
+
26
+ 新しいブログプロジェクトを作成し、開発サーバーを起動します。
27
+
28
+ ```bash
29
+ npx create-blog
30
+ npx server
31
+ ```
32
+
33
+ ブラウザで `http://localhost:8000` にアクセスすると、サイトが表示されます。
34
+
35
+ ## 記事を書く
36
+
37
+ ### 最初の記事を作成
38
+
39
+ 記事は `./src/pages/` ディレクトリ以下にMarkdownファイルとして配置します。
40
+
41
+ まず、空のファイルでも構わないので `src/pages/test.md` を作成してみましょう。
42
+
43
+ ```bash
44
+ touch src/pages/test.md
45
+ ```
46
+
47
+ `src/pages/test.md` を保存したら、`http://localhost:8000/test` にアクセスして表示できることを確認します。
48
+
49
+ ### 内容を記述
50
+
51
+ 次に、記事の内容を記述します。`src/pages/test.md` を以下のような内容で保存します。
52
+
53
+ ```markdown
54
+ # 第一章 人情の碗
55
+
56
+ 茶は薬用として始まり後飲料となる。シナにおいては八世紀に高雅な遊びの一つとして詩歌の域に達した。十五世紀に至り日本はこれを高めて一種の審美的宗教、すなわち茶道にまで進めた。茶道は日常生活の俗事の中に存する美しきものを崇拝することに基づく一種の儀式であって、純粋と調和、相互愛の神秘、社会秩序のローマン主義を諄々と教えるものである。茶道の要義は「不完全なもの」を崇拝するにある。いわゆる人生というこの不可解なもののうちに、何か可能なものを成就しようとするやさしい企てであるから。
57
+ ```
58
+
59
+ 保存したら、`http://localhost:8000/test` をリロードして表示を確認しましょう。
60
+
61
+ ## タイトルとURL
62
+
63
+ ### フロントマターで変数を定義
64
+
65
+ ファイル冒頭を `---` で囲むと、ページのメタデータや変数を定義できます。
66
+
67
+ `src/pages/test.md` の冒頭に以下のような変数を設定してみましょう。
68
+
69
+ ```markdown
70
+ ---
71
+ title: 第一章 人情の碗
72
+ url: /the_book_of_tea/section_one
73
+ ---
74
+ ```
75
+
76
+ 保存すると、`http://localhost:8000/test` ではアクセスできなくなり、`http://localhost:8000/the_book_of_tea/section_one` でアクセスできるようになります。
77
+
78
+ ### 変数をテンプレート内で利用
79
+
80
+ ここで定義した変数は、テンプレート内で `{{変数名}}` という形式で利用できます。
81
+
82
+ `src/pages/test.md` を次のように書き換えてみます。
83
+
84
+ ```markdown
85
+ ---
86
+ title: 第一章 人情の碗
87
+ url: /the_book_of_tea/section_one
88
+ ---
89
+
90
+ # {{title}}
91
+
92
+ 茶は薬用として始まり後飲料となる。シナにおいては八世紀に高雅な遊びの一つとして詩歌の域に達した。十五世紀に至り日本はこれを高めて一種の審美的宗教、すなわち茶道にまで進めた。茶道は日常生活の俗事の中に存する美しきものを崇拝することに基づく一種の儀式であって、純粋と調和、相互愛の神秘、社会秩序のローマン主義を諄々と教えるものである。茶道の要義は「不完全なもの」を崇拝するにある。いわゆる人生というこの不可解なもののうちに、何か可能なものを成就しようとするやさしい企てであるから。
93
+ ```
94
+
95
+ ページをリロードすると、`# {{title}}` が `# 第一章 人情の碗` として表示されます。
96
+
97
+ ### ファイル配置によるURL設定
98
+
99
+ URLの設定は、フロントマター変数ではなく、ファイルの配置場所でも制御できます。
100
+
101
+ `src/pages/test.md` を `src/pages/the_book_of_tea/section_one.md` に移動すれば、`url` 変数を定義しなくても同じURLでアクセスできるようになります。
102
+
103
+ ```bash
104
+ mkdir -p src/pages/the_book_of_tea
105
+ mv src/pages/test.md src/pages/the_book_of_tea/section_one.md
106
+ ```
107
+
108
+ ## テンプレート
109
+
110
+ ### テンプレートの編集
111
+
112
+ タイトルが重複して表示されて鬱陶しい場合は、テンプレートを編集します。
113
+
114
+ `src/template/default.html` を開き、`<h1>{{TITLE}}</h1>` の行を削除しましょう。
115
+
116
+ ```diff
117
+ <article class="container">
118
+ - <h1>{{TITLE}}</h1>
119
+ {{CONTENT}}
120
+ </article>
121
+ ```
122
+
123
+ 開発サーバーを再起動すると、変更が反映されます。
124
+
125
+ ## 設定ファイル
126
+
127
+ ### サイト名の変更
128
+
129
+ サイト全体の名称を変更するには、`blog.json` を編集します。
130
+
131
+ `blog.json` を開いて、`site_name` を変更します。
132
+
133
+ ```json
134
+ {
135
+ "site_name": "茶の本",
136
+ "url_base": "http://localhost:8000",
137
+ "src_dir": "src",
138
+ "dist_dir": "dist",
139
+ "distribute_raw": "image",
140
+ "helper": "index.js"
141
+ }
142
+ ```
143
+
144
+ 設定ファイルを変更したら、一旦 `CTRL+C` で `npx server` を停止して、再度 `npx server` を実行します。
145
+
146
+ ヘッダーが「茶の本」になっていたら、設定更新が完了です。
147
+
148
+ ## 次のステップ
149
+
150
+ 基本的な使い方を学びました。次は以下のドキュメントを参照して、より高度な機能を活用しましょう。
151
+
152
+ ### さらに学ぶ
153
+
154
+ - **[技術仕様書 (spec.md)](spec.md)** - フロントマター、テンプレート構文、Hook機構など詳細な仕様
155
+ - **[開発ガイド (develop.md)](develop.md)** - ライブラリ開発、カスタムパッケージ作成、デバッグ方法
156
+ - **[README.md](../README.md)** - プロジェクト概要とドキュメント索引
157
+
158
+ ### よく使う機能
159
+
160
+ - **条件分岐とスクリプト実行**: テンプレート内で `{%if%}...{%endif%}` や `{%script%}...{%endscript%}` を使用
161
+ - **ヘルパー関数**: カスタム関数を作成して再利用可能な処理を定義
162
+ - **カテゴリー・タグ**: フロントマターで `category` や `tags` を定義して記事を分類
163
+ - **パッケージシステム**: 再利用可能な機能を独立したパッケージとして作成
164
+
165
+ 詳細は各ドキュメントをご覧ください。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tenjuu99/blog",
3
- "version": "0.2.55",
3
+ "version": "0.2.57",
4
4
  "description": "blog template",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -36,7 +36,9 @@
36
36
  "lib",
37
37
  "bin",
38
38
  "src-sample",
39
- "packages"
39
+ "packages",
40
+ "docs",
41
+ "README.md"
40
42
  ],
41
43
  "publishConfig": {
42
44
  "access": "public"
@@ -11,6 +11,11 @@ let categoryTreeCache = null
11
11
  export function buildCategoryTree(data = allData, conf = config) {
12
12
  const tree = {}
13
13
  const urlCase = conf.category?.url_case || 'lower'
14
+ const urlSeparator = conf.category?.url_separator || '-'
15
+ const rawUrlPrefix = conf.category?.url_prefix || ''
16
+ const urlPrefix = rawUrlPrefix
17
+ ? '/' + rawUrlPrefix.replace(/^\/+|\/+$/g, '')
18
+ : ''
14
19
  const maxDepth = conf.category?.max_depth || 3
15
20
 
16
21
  for (const [name, page] of Object.entries(data)) {
@@ -19,11 +24,12 @@ export function buildCategoryTree(data = allData, conf = config) {
19
24
  }
20
25
 
21
26
  const categoryPath = page.category.slice(0, maxDepth)
22
- let currentPath = ''
27
+ let currentPath = urlPrefix
23
28
 
24
29
  for (let i = 0; i < categoryPath.length; i++) {
25
30
  const category = categoryPath[i]
26
- const categoryUrl = urlCase === 'lower' ? category.toLowerCase() : category
31
+ let categoryUrl = urlCase === 'lower' ? category.toLowerCase() : category
32
+ categoryUrl = categoryUrl.replace(/\s+/g, urlSeparator)
27
33
  currentPath += `/${categoryUrl}`
28
34
 
29
35
  if (!tree[currentPath]) {