mdjournal 1.0.15 → 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 +287 -164
- package/docs/api-reference.html +2295 -0
- package/docs/config-spec.md +322 -0
- package/docs/extension-spec.md +676 -0
- package/docs/index.md +261 -0
- package/docs/integration-spec.md +518 -0
- package/docs/markdown-format-spec.md +779 -0
- package/docs/openapi.yaml +1009 -0
- package/docs/requirements.md +837 -0
- package/docs/screenshot.png +0 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -1,209 +1,332 @@
|
|
|
1
|
-
# mdJournal
|
|
1
|
+
# mdJournal
|
|
2
2
|
|
|
3
|
-
Markdown
|
|
3
|
+
**Markdown日報を視覚的に管理するダッシュボードアプリケーション**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/mdjournal)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
19
|
-
|
|
14
|
+
- 📅 **カレンダービュー** - 月表示で稼働時間を可視化
|
|
15
|
+
- ⏱️ **タイムライン** - 計画と実績を並べて表示、ドラッグ&ドロップで編集
|
|
16
|
+
- ✅ **TODO管理** - プロジェクト別・ステータス別のタスク管理
|
|
17
|
+
- 📝 **Markdown編集** - 慣れ親しんだMarkdown形式でデータを管理
|
|
18
|
+
- 🔗 **外部連携** - Git commit/push、Slack投稿
|
|
20
19
|
|
|
21
|
-
|
|
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
|
-
|
|
43
|
-
|
|
42
|
+
mkdir my-journal
|
|
43
|
+
cd my-journal
|
|
44
|
+
```
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
npx mdjournal validate ./data/2020
|
|
46
|
+
### 2. 設定ファイルを作成
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
```yaml
|
|
49
|
+
# mdjournal.config.yaml
|
|
50
|
+
projects: ./config/projects.yaml
|
|
51
|
+
routines: ./config/routines.yaml
|
|
52
|
+
reports: ./data
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
timeline:
|
|
55
|
+
snapMinutes: 15 # ドラッグ時のスナップ単位(分)
|
|
56
|
+
defaultStartHour: 8 # 表示開始時刻
|
|
57
|
+
defaultEndHour: 20 # 表示終了時刻
|
|
53
58
|
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
72
|
+
- code: P02
|
|
73
|
+
name: プロジェクトA
|
|
74
|
+
color: "#1890ff"
|
|
59
75
|
|
|
60
|
-
|
|
61
|
-
|
|
76
|
+
- code: P03
|
|
77
|
+
name: プロジェクトB
|
|
78
|
+
color: "#722ed1"
|
|
62
79
|
```
|
|
63
80
|
|
|
64
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
70
|
-
|
|
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
|
-
|
|
129
|
+
|
|
130
|
+
## 📝 日報の書き方
|
|
131
|
+
|
|
132
|
+
日報は以下のようなMarkdown形式です。ダッシュボードで編集できますが、テキストエディタで直接編集することもできます。
|
|
133
|
+
|
|
134
|
+
```markdown
|
|
135
|
+
# [日報] 山田太郎 2025-01-06
|
|
180
136
|
|
|
181
137
|
## [PLAN]
|
|
182
|
-
|
|
183
|
-
*
|
|
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
|
-
|
|
187
|
-
*
|
|
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
|
-
###
|
|
192
|
-
- [ ] @2025-
|
|
193
|
-
- [*] !!
|
|
194
|
-
|
|
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
|
-
#
|
|
205
|
-
npx
|
|
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
|
-
|
|
208
|
-
|
|
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で日報をもっと便利に
|