mdjournal 1.0.14 → 1.0.16

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.
package/README.md CHANGED
@@ -1,209 +1,332 @@
1
- # mdJournal サーバー
1
+ # mdJournal
2
2
 
3
- Markdown形式の日報データを管理するREST APIサーバーです。
3
+ **Markdown日報を視覚的に管理するダッシュボードアプリケーション**
4
4
 
5
- ## 起動方法
5
+ [![npm version](https://img.shields.io/npm/v/mdjournal.svg)](https://www.npmjs.com/package/mdjournal)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
7
 
7
- ```bash
8
- # 依存関係のインストール
9
- npm install
10
-
11
- # 開発モードで起動(ホットリロード有効)
12
- npm run dev
8
+ <p align="center">
9
+ <img src="docs/screenshot.png" alt="mdJournal Screenshot" width="800">
10
+ </p>
13
11
 
14
- # ビルド
15
- npm run build
12
+ ## ✨ 特徴
16
13
 
17
- # 本番モードで起動
18
- npm start
19
- ```
14
+ - 📅 **カレンダービュー** - 月表示で稼働時間を可視化
15
+ - ⏱️ **タイムライン** - 計画と実績を並べて表示、ドラッグ&ドロップで編集
16
+ - ✅ **TODO管理** - プロジェクト別・ステータス別のタスク管理
17
+ - 📝 **Markdown編集** - 慣れ親しんだMarkdown形式でデータを管理
18
+ - 🔗 **外部連携** - Git commit/push、Slack投稿
20
19
 
21
- ## CLI コマンド
20
+ ---
22
21
 
23
- ### サーバー起動
22
+ ## 🚀 まずは試してみる
24
23
 
25
24
  ```bash
26
- # サンプルデータで起動
25
+ # サンプルデータで起動(インストール不要)
27
26
  npx mdjournal
28
27
 
29
- # 設定ファイルを指定して起動
30
- npx mdjournal ./mdjournal.config.yaml
31
- npx mdjournal -c ./mdjournal.config.yaml
32
-
33
- # ポートを指定して起動
34
- npx mdjournal -p 8080
28
+ # ブラウザが自動で開きます(http://localhost:3001)
35
29
  ```
36
30
 
37
- ### バリデーション(フォーマット検証)
31
+ これだけでサンプル日報を使ってダッシュボードを体験できます。
38
32
 
39
- 日報ファイルが仕様に準拠しているか検証します。
33
+ ---
34
+
35
+ ## 📦 セットアップ
36
+
37
+ 自分の日報を管理するためのセットアップ手順です。
38
+
39
+ ### 1. 日報用ディレクトリを作成
40
40
 
41
41
  ```bash
42
- # ディレクトリ内の全.mdファイルを検証
43
- npx mdjournal validate ./data
42
+ mkdir my-journal
43
+ cd my-journal
44
+ ```
44
45
 
45
- # 特定の年度のみ検証
46
- npx mdjournal validate ./data/2020
46
+ ### 2. 設定ファイルを作成
47
47
 
48
- # 厳格モード(警告もエラーとして扱う)
49
- npx mdjournal validate ./data --strict
48
+ ```yaml
49
+ # mdjournal.config.yaml
50
+ projects: ./config/projects.yaml
51
+ routines: ./config/routines.yaml
52
+ reports: ./data
50
53
 
51
- # 詳細出力(修正提案を含む)
52
- npx mdjournal validate ./data --verbose
54
+ timeline:
55
+ snapMinutes: 15 # ドラッグ時のスナップ単位(分)
56
+ defaultStartHour: 8 # 表示開始時刻
57
+ defaultEndHour: 20 # 表示終了時刻
53
58
 
54
- # JSON形式で出力(CI/CD連携用)
55
- npx mdjournal validate ./data --json
59
+ server:
60
+ port: 3001
61
+ ```
62
+
63
+ ### 3. プロジェクト定義を作成
64
+
65
+ ```yaml
66
+ # config/projects.yaml
67
+ projects:
68
+ - code: P01
69
+ name: 社内業務
70
+ color: "#52c41a"
56
71
 
57
- # 利用可能なルール一覧を表示
58
- npx mdjournal validate --rules
72
+ - code: P02
73
+ name: プロジェクトA
74
+ color: "#1890ff"
59
75
 
60
- # 特定のルールをスキップ
61
- npx mdjournal validate ./data --skip separator-line,location-subsection
76
+ - code: P03
77
+ name: プロジェクトB
78
+ color: "#722ed1"
62
79
  ```
63
80
 
64
- ### 統計情報(frontmatter)再集計
81
+ ### 4. ルーチン定義を作成(オプション)
82
+
83
+ 毎週決まった予定がある場合、ルーチンとして登録しておくと便利です。
84
+
85
+ ```yaml
86
+ # config/routines.yaml
87
+ routines:
88
+ weekly:
89
+ monday:
90
+ - time: "09:00"
91
+ project: P01
92
+ task: 週次定例会議
93
+ - time: "10:00"
94
+ project: P02
95
+ task: プロジェクトA 朝会
96
+
97
+ friday:
98
+ - time: "17:00"
99
+ project: P01
100
+ task: 週報作成
101
+ ```
102
+
103
+ ### 5. ディレクトリ構成
65
104
 
66
- 日報ファイルにfrontmatter(統計情報)を付与または再集計します。
105
+ 最終的にこのような構成になります:
106
+
107
+ ```
108
+ my-journal/
109
+ ├── mdjournal.config.yaml # メイン設定ファイル
110
+ ├── config/
111
+ │ ├── projects.yaml # プロジェクト定義
112
+ │ └── routines.yaml # ルーチン定義
113
+ └── data/ # 日報が保存される場所
114
+ └── 2025/
115
+ └── 01/
116
+ ├── 2025-01-06.md
117
+ └── 2025-01-07.md
118
+ ```
119
+
120
+ ### 6. 起動
67
121
 
68
122
  ```bash
69
- # ディレクトリ内の全.mdファイルにfrontmatterを付与・更新
70
- npx mdjournal stats ./data
123
+ npx mdjournal ./mdjournal.config.yaml
124
+ ```
71
125
 
72
- # 変更内容のプレビュー(実際には更新しない)
73
- npx mdjournal stats ./data --dry-run
74
-
75
- # 詳細出力
76
- npx mdjournal stats ./data --verbose
77
-
78
- # バリデーションを事前実行(エラーがあるファイルはスキップ)
79
- npx mdjournal stats ./data --validate
80
-
81
- # JSON形式で出力
82
- npx mdjournal stats ./data --json
83
- ```
84
-
85
- #### frontmatterフィールド
86
-
87
- | フィールド | 型 | 説明 |
88
- |-----------|-----|------|
89
- | `planHours` | number | 計画時間の合計(時間) |
90
- | `resultHours` | number | 実績時間の合計(時間) |
91
- | `todoCount` | integer | TODO総数 |
92
- | `todoCompleted` | integer | 完了TODO数 |
93
- | `todoInProgress` | integer | 進行中TODO数 |
94
- | `projectHours` | object | プロジェクト別実績時間(時間) |
95
- | `updatedAt` | string | 最終更新日時(ISO 8601形式) |
96
-
97
- #### バリデーションルール
98
-
99
- | ルールコード | 説明 |
100
- |------------|------|
101
- | `header-format` | 日報ヘッダーの形式チェック |
102
- | `separator-line` | セクション区切り線(=====)の検出 |
103
- | `location-subsection` | 場所サブセクション(### [home])の検出 |
104
- | `schedule-item-format` | PLAN/RESULT項目の形式チェック |
105
- | `time-format` | 時刻形式のチェック |
106
- | `todo-list-marker` | TODOリストマーカーの統一チェック |
107
- | `todo-inline-project` | TODO行内のプロジェクトコード検出 |
108
- | `todo-deadline-format` | 期限の括弧形式検出 |
109
- | `nested-todo` | ネストされたTODO検出 |
110
- | `required-sections` | 必須セクションの存在チェック |
111
-
112
- ## 環境変数
113
-
114
- | 変数名 | 説明 | デフォルト値 |
115
- |--------|------|-------------|
116
- | `PORT` | サーバーポート | `3001` |
117
- | `CONFIG_REPORTS` | 日報ディレクトリのパス | `./sample/reports` |
118
- | `CONFIG_PROJECTS` | プロジェクト設定ファイルのパス | `./sample/config/projects.yaml` |
119
- | `CONFIG_ROUTINES` | ルーチン設定ファイルのパス | `./sample/config/routines.yaml` |
120
- | `CORS_ORIGIN` | CORSで許可するオリジン | `http://localhost:5173` |
121
- | `GOOGLE_CLIENT_ID` | Google OAuth Client ID | - |
122
- | `GOOGLE_CLIENT_SECRET` | Google OAuth Client Secret | - |
123
-
124
- ## API エンドポイント
125
-
126
- | メソッド | エンドポイント | 説明 |
127
- |---------|---------------|------|
128
- | GET | `/api/reports/:date` | 日報取得 |
129
- | PUT | `/api/reports/:date` | 日報保存 |
130
- | DELETE | `/api/reports/:date` | 日報削除 |
131
- | GET | `/api/calendar` | カレンダー用集計データ取得 |
132
- | GET | `/api/calendar/months` | 日報が存在する年月リスト取得 |
133
- | GET | `/api/config` | 設定取得 |
134
- | PUT | `/api/config` | 設定更新 |
135
- | GET | `/api/gcal/events` | Googleカレンダー予定取得 |
136
- | GET | `/api/health` | ヘルスチェック |
137
-
138
- ## ディレクトリ構造
139
-
140
- ```
141
- server/
142
- ├── src/
143
- │ ├── index.ts # エントリーポイント
144
- │ ├── cli.ts # CLIエントリーポイント
145
- │ ├── routes/ # APIルーター
146
- │ │ ├── reports.ts # 日報API
147
- │ │ ├── calendar.ts # カレンダーAPI
148
- │ │ ├── config.ts # 設定API
149
- │ │ └── gcal.ts # Googleカレンダー連携API
150
- │ ├── types/ # 型定義
151
- │ │ └── index.ts
152
- │ └── utils/ # ユーティリティ
153
- │ ├── markdown.ts # Markdownパーサー
154
- │ ├── fileManager.ts # ファイル管理
155
- │ ├── validator.ts # フォーマットバリデーター
156
- │ └── git.ts # Git連携
157
- ├── package.json
158
- ├── tsconfig.json
159
- └── README.md
160
- ```
161
-
162
- ## 日報ファイル形式
163
-
164
- 日報ファイルはYAML frontmatter + Markdown形式で保存されます。
165
- 詳細は [markdown-format-spec.md](../docs/markdown-format-spec.md) を参照してください。
126
+ 日報ファイルはダッシュボードから自動的に作成されます。
166
127
 
167
- ```markdown
168
- ---
169
- planHours: 8.0
170
- resultHours: 7.5
171
- todoCount: 5
172
- todoCompleted: 2
173
- todoInProgress: 1
174
- projectHours:
175
- P99: 2.5
176
- P34: 3.0
177
- updatedAt: 2025-12-18T17:30:00+09:00
178
128
  ---
179
- # [日報] サンプル太郎 2025-12-18
129
+
130
+ ## 📝 日報の書き方
131
+
132
+ 日報は以下のようなMarkdown形式です。ダッシュボードで編集できますが、テキストエディタで直接編集することもできます。
133
+
134
+ ```markdown
135
+ # [日報] 山田太郎 2025-01-06
180
136
 
181
137
  ## [PLAN]
182
- * 08:30 [P99] タスク確認
183
- * 09:00
138
+
139
+ * 08:30 [P01] タスク確認・朝会
140
+ * 09:00 [P02] プロジェクトA 開発
141
+ * 12:00
142
+ * 13:00 [P03] プロジェクトB MTG
143
+ * 15:00 [P02] プロジェクトA 開発
144
+ * 18:00
184
145
 
185
146
  ## [RESULT]
186
- * 08:30 [P99] タスク確認
187
- * 09:00
147
+
148
+ * 08:30 [P01] タスク確認・朝会
149
+ * 09:00 [P02] プロジェクトA 開発
150
+ * 12:00
151
+ * 13:00 [P03] プロジェクトB MTG(延長)
152
+ * 16:00 [P02] プロジェクトA 開発
153
+ * 19:00
188
154
 
189
155
  ## [TODO]
190
156
 
191
- ### P99
192
- - [ ] @2025-12-20 !!! 重要タスク
193
- - [*] !! 進行中タスク
194
- - [x] 完了タスク
195
- - [-] 保留タスク
157
+ ### P01
158
+ - [ ] @2025-01-10 !!! 重要なタスク
159
+ - [*] !! 進行中のタスク
160
+
161
+ ### P02
162
+ - [x] 完了したタスク
163
+ - [-] 保留中のタスク
196
164
 
197
165
  ## [NOTE]
198
- 自由記述メモ
166
+
167
+ 本日のメモや振り返りをここに記載。
199
168
  ```
200
169
 
201
- ## 開発
170
+ ### タイムライン記法
171
+
172
+ ```
173
+ * HH:MM [プロジェクトコード] タスク内容
174
+ * HH:MM ← 終了時刻のみ(空き時間の終わり)
175
+ ```
176
+
177
+ - `[PLAN]` セクション: 予定
178
+ - `[RESULT]` セクション: 実績
179
+
180
+ ### TODOの書き方
181
+
182
+ ```markdown
183
+ - [ ] 未着手のタスク
184
+ - [*] 進行中のタスク
185
+ - [x] 完了したタスク
186
+ - [-] 保留中のタスク
187
+ ```
188
+
189
+ #### 期日と優先度
190
+
191
+ ```markdown
192
+ - [ ] @2025-01-10 期日付きタスク
193
+ - [ ] !!! 優先度:高
194
+ - [ ] !! 優先度:中
195
+ - [ ] ! 優先度:低
196
+ - [ ] @2025-01-10 !!! 期日+優先度の組み合わせ
197
+ ```
198
+
199
+ ---
200
+
201
+ ## 🔗 外部連携
202
+
203
+ ### Git連携
204
+
205
+ 日報ディレクトリがGitリポジトリの場合、ダッシュボードの保存ボタンから直接commit/pushできます。
206
+
207
+ ```bash
208
+ # 日報ディレクトリをGitリポジトリ化
209
+ cd my-journal
210
+ git init
211
+ git remote add origin <your-repo-url>
212
+ ```
213
+
214
+ ### Slack連携
215
+
216
+ 日報をSlackチャンネルに投稿できます。
217
+
218
+ ```yaml
219
+ # mdjournal.config.yaml に追加
220
+ slack:
221
+ enabled: true
222
+ webhookUrl: ${SLACK_WEBHOOK_URL} # 環境変数から取得
223
+ channel: "#daily_report"
224
+ ```
225
+
226
+ 環境変数の設定:
227
+
228
+ ```bash
229
+ export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."
230
+ ```
231
+
232
+ ### 保存ダイアログ
233
+
234
+ 保存ボタンから開くダイアログで、保存範囲を選択できます:
235
+
236
+ 1. **保存のみ** - ローカルファイルに保存
237
+ 2. **Commitまで** - 保存 + Git commit
238
+ 3. **Pushまで** - 保存 + commit + push
239
+ 4. **Slack投稿** - 上記 + Slackに投稿(Slack連携が有効な場合)
240
+
241
+ ---
242
+
243
+ ## 🛠️ CLIコマンド
202
244
 
203
245
  ```bash
204
- # TypeScriptの型チェック
205
- npx tsc --noEmit
246
+ # サーバー起動
247
+ npx mdjournal [config.yaml]
248
+
249
+ # 日報ファイルのバリデーション
250
+ npx mdjournal validate ./data
251
+ npx mdjournal validate ./data --verbose # 詳細表示
252
+ npx mdjournal validate ./data --strict # 厳格モード
253
+
254
+ # 統計情報の再集計(frontmatter更新)
255
+ npx mdjournal stats ./data
256
+ npx mdjournal stats ./data --dry-run # プレビューのみ
257
+
258
+ # 設定ファイルの検証
259
+ npx mdjournal config ./mdjournal.config.yaml
260
+ ```
261
+
262
+ ---
263
+
264
+ ## ⚙️ 設定リファレンス
265
+
266
+ ### タイムライン設定
206
267
 
207
- # ESLint
208
- npm run lint
268
+ ```yaml
269
+ timeline:
270
+ hourHeight: 60 # 1時間あたりの高さ(px)
271
+ maxHours: 36 # 最大表示時間
272
+ defaultStartHour: 8 # デフォルト開始時刻
273
+ defaultEndHour: 20 # デフォルト終了時刻
274
+ snapMinutes: 15 # スナップ単位(分)
209
275
  ```
276
+
277
+ ### プロジェクト定義
278
+
279
+ ```yaml
280
+ # config/projects.yaml
281
+ projects:
282
+ - code: P01 # タイムラインで使用するコード
283
+ name: 社内業務 # 表示名
284
+ fullName: 社内管理・雑務 # フルネーム(オプション)
285
+ color: "#52c41a" # 表示色
286
+ category: internal # カテゴリID(オプション)
287
+ active: true # アクティブフラグ(デフォルト: true)
288
+
289
+ categories: # カテゴリ定義(オプション)
290
+ - id: internal
291
+ name: 社内業務
292
+ color: "#52c41a"
293
+ ```
294
+
295
+ ### ルーチン定義
296
+
297
+ ```yaml
298
+ # config/routines.yaml
299
+ routines:
300
+ # 週次ルーチン
301
+ weekly:
302
+ monday:
303
+ - time: "09:00"
304
+ project: P01
305
+ task: 週次定例
306
+
307
+ # 月次ルーチン
308
+ monthly:
309
+ start_of_month: # 月初
310
+ - project: P01
311
+ task: 経費精算
312
+ end_of_month: # 月末
313
+ - project: P01
314
+ task: 月次レポート
315
+
316
+ # 四半期ルーチン
317
+ quarterly:
318
+ - months: [3, 6, 9, 12]
319
+ tasks:
320
+ - project: P01
321
+ task: 四半期レビュー
322
+ ```
323
+
324
+ ---
325
+
326
+ ## 📄 ライセンス
327
+
328
+ MIT License
329
+
330
+ ---
331
+
332
+ **mdJournal** - Markdownで日報をもっと便利に