evmtools-node 0.0.18 → 0.0.24

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,306 +1,308 @@
1
- <h1 align="center">Welcome to evmtools-node</h1>
2
- <p>
3
- <a href="#" target="_blank">
4
- <img alt="License: ISC" src="https://img.shields.io/badge/License-ISC-yellow.svg" />
5
- </a>
6
- <a href="https://twitter.com/masatomix" target="_blank">
7
- <img alt="Twitter: masatomix" src="https://img.shields.io/twitter/follow/masatomix.svg?style=social" />
8
- </a>
9
- </p>
10
-
11
- ## evmtools-node
12
-
13
- このライブラリは、プライムブレインズ社で利用している「進捗管理ツール(Excel)」ファイルを読み込み、 プロジェクトの進捗状況や要員別の作業量を可視化するためのライブラリです。
14
-
15
- ### [サンプルサイト](https://masatomix.github.io/copy-utils-generator-webui/#/gamen3)
16
-
17
-
18
- WEBアプリ等で先のExcelファイルを読み書きできるように開発していますが、下記の通りコマンドラインから呼び出せるようにもしてあります。
19
-
20
-
21
- ## インストール
22
-
23
- ```bash
24
- npm install evmtools-node
25
- ```
26
-
27
- インストール後、以下のコマンドが使用可能になります。
28
-
29
- > **注記**: `npm install evmtools-node` せずに直接実行する場合は、`npx -p evmtools-node <command>` の形式で実行できます。
30
- > 例: `npx -p evmtools-node pbevm-show-project --path ./now.xlsm`
31
-
32
-
33
- ## コマンド
34
-
35
-
36
- ### プロジェクトの情報を表示・Excel出力する
37
-
38
- ```console
39
- $ npx pbevm-show-project --help
40
- Usage: npx pbevm-show-project [options]
41
-
42
- Options:
43
- --version Show version number [boolean]
44
- --path Excel file Path [string] [default: "./now.xlsm"]
45
- --help Show help [boolean]
46
-
47
- Examples:
48
- npx pbevm-show-project --path ./now.xlsm
49
- ```
50
-
51
- 例:
52
-
53
- ```console
54
- $ npx pbevm-show-project --path ./now.xlsm
55
- プロジェクト名: now
56
- 開始日: 2025/07/01
57
- 終了日: 2025/08/26
58
- 基準日: 2025/07/25
59
- タスク数:19件
60
- 先頭19行データ:
61
- ┌─────────┬───────┬────┬───────┬──────────────┬───────────┬──────────┬──────────────┬───────────────────┬─────┬─────┬─────┬───────────┬───────────┬───────────┬────────┬──────────────┬──────────────┬──────────────┬──────────────┬──────────────┐
62
- │ (index) │ sharp │ id │ level │ name │ assignee │ workload │ progressRate │ scheduledWorkDays │ pv │ ev │ spi │ delayDays │ remarks │ parentId │ isLeaf │ 予定開始日 │ 予定終了日 │ 実績開始日 │ 実績終了日 │ 進捗応当日 │
63
- ├─────────┼───────┼────┼───────┼──────────────┼───────────┼──────────┼──────────────┼───────────────────┼─────┼─────┼─────┼───────────┼───────────┼───────────┼────────┼──────────────┼──────────────┼──────────────┼──────────────┼──────────────┤
64
- │ 0 │ 1 │ 1 │ 1 │ '要件定義' │ undefined │ 4 │ 1 │ 4 │ 4 │ 4 │ 1 │ undefined │ undefined │ undefined │ false │ '2025/07/01' │ '2025/07/04' │ '2025/07/01' │ '2025/07/04' │ '' │
65
- │ 1 │ 2 │ 2 │ 2 │ '機能全体' │ '要員A' │ 4 │ 1 │ 4 │ 4 │ 4 │ 1 │ undefined │ undefined │ 1 │ true │ '2025/07/01' │ '2025/07/04' │ '2025/07/01' │ '2025/07/04' │ '' │
66
- │ 2 │ 3 │ 3 │ 1 │ '設計' │ undefined │ 15 │ 1 │ 12 │ 15 │ 15 │ 1 │ undefined │ undefined │ undefined │ false │ '2025/07/07' │ '2025/07/18' │ '2025/07/04' │ '2025/07/16' │ '' │
67
- │ 3 │ 4 │ 4 │ 2 │ '機能1' │ '要員A' │ 3 │ 1 │ 5 │ 3 │ 3 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/07' │ '2025/07/11' │ '' │
68
- │ 4 │ 5 │ 5 │ 2 │ '機能2' │ '要員A' │ 2 │ 1 │ 5 │ 2 │ 2 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/04' │ '2025/07/10' │ '' │
69
- │ 5 │ 6 │ 6 │ 2 │ '機能3' │ '要員B' │ 5 │ 1 │ 5 │ 5 │ 5 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/14' │ '2025/07/18' │ '2025/07/04' │ '2025/07/10' │ '' │
70
- │ 6 │ 7 │ 7 │ 2 │ '機能4' │ '要員A' │ 5 │ 1 │ 5 │ 5 │ 5 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/14' │ '2025/07/18' │ '2025/07/14' │ '2025/07/16' │ '' │
71
- │ 7 │ 8 │ 8 │ 1 │ '開発' │ undefined │ 30 │ 0.25 │ 12 │ 15 │ 7.5 │ 0.5 │ -2 │ undefined │ undefined │ false │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/27' │
72
- │ 8 │ 9 │ 9 │ 2 │ '機能1' │ '要員A' │ 10 │ 0.1 │ 10 │ 5 │ 1 │ 0.2 │ 3 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/22' │
73
- │ 9 │ 10 │ 10 │ 2 │ '機能2' │ '要員B' │ 5 │ 0.2 │ 10 │ 2.5 │ 1 │ 0.4 │ 2 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/23' │
74
- │ 10 │ 11 │ 11 │ 2 │ '機能3' │ '要員B' │ 5 │ 0.3 │ 10 │ 2.5 │ 1.5 │ 0.6 │ 1 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/24' │
75
- │ 11 │ 12 │ 12 │ 2 │ '機能4' │ '要員C' │ 10 │ 0.4 │ 10 │ 5 │ 4 │ 0.8 │ 0 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/25' │
76
- │ 12 │ 13 │ 13 │ 1 │ 'テスト' │ undefined │ 15 │ 0 │ 19 │ 0 │ 0 │ 0 │ undefined │ undefined │ undefined │ false │ '2025/08/04' │ '2025/08/22' │ '' │ '' │ '' │
77
- │ 13 │ 14 │ 14 │ 2 │ '単体テスト' │ '要員A' │ 5 │ undefined │ 5 │ 0 │ 0 │ 0 │ undefined │ undefined │ 13 │ true │ '2025/08/04' │ '2025/08/08' │ '' │ '' │ '' │
78
- │ 14 │ 15 │ 15 │ 2 │ '連結テスト' │ '要員A' │ 5 │ undefined │ 5 │ 0 │ 0 │ 0 │ undefined │ undefined │ 13 │ true │ '2025/08/11' │ '2025/08/15' │ '' │ '' │ '' │
79
- │ 15 │ 16 │ 16 │ 2 │ '総合テスト' │ '要員A' │ 5 │ undefined │ 5 │ 0 │ 0 │ 0 │ undefined │ undefined │ 13 │ true │ '2025/08/18' │ '2025/08/22' │ '' │ '' │ '' │
80
- │ 16 │ 17 │ 17 │ 1 │ 'リリース' │ undefined │ 2 │ 0 │ 2 │ 0 │ 0 │ 0 │ undefined │ undefined │ undefined │ false │ '2025/08/25' │ '2025/08/26' │ '' │ '' │ '' │
81
- │ 17 │ 18 │ 18 │ 2 │ '準備' │ '要員C' │ 1 │ undefined │ 1 │ 0 │ 0 │ 0 │ undefined │ undefined │ 17 │ true │ '2025/08/25' │ '2025/08/25' │ '' │ '' │ '' │
82
- │ 18 │ 19 │ 19 │ 2 │ '作業' │ '要員C' │ 1 │ undefined │ 1 │ 0 │ 0 │ 0 │ undefined │ undefined │ 17 │ true │ '2025/08/26' │ '2025/08/26' │ '' │ '' │ '' │
83
- └─────────┴───────┴────┴───────┴──────────────┴───────────┴──────────┴──────────────┴───────────────────┴─────┴─────┴─────┴───────────┴───────────┴───────────┴────────┴──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘
84
- プロジェクト情報
85
- ┌─────────┬─────────────┬──────────────┬──────────────┬─────────────────┬────────────────────┬─────────────────────────┬─────────────────┬──────────────┬──────────────┬───────────────────┬─────────┬────────────────────┐
86
- │ (index) │ projectName │ startDate │ endDate │ totalTasksCount │ totalWorkloadExcel │ totalWorkloadCalculated │ averageWorkload │ baseDate │ totalPvExcel │ totalPvCalculated │ totalEv │ spi │
87
- ├─────────┼─────────────┼──────────────┼──────────────┼─────────────────┼────────────────────┼─────────────────────────┼─────────────────┼──────────────┼──────────────┼───────────────────┼─────────┼────────────────────┤
88
- │ 0 │ 'now' │ '2025/07/01' │ '2025/08/26' │ 14 │ 66 │ 66 │ 4.714 │ '2025/07/25' │ 34 │ 34 │ 26.5 │ 0.7794117647058824 │
89
- └─────────┴─────────────┴──────────────┴──────────────┴─────────────────┴────────────────────┴─────────────────────────┴─────────────────┴──────────────┴──────────────┴───────────────────┴─────────┴────────────────────┘
90
- 要員ごと統計
91
- ┌─────────┬──────────┬─────────────────┬────────────────────┬─────────────────────────┬─────────────────┬──────────────┬──────────────┬───────────────────┬─────────┬────────────────────┐
92
- │ (index) │ assignee │ totalTasksCount │ totalWorkloadExcel │ totalWorkloadCalculated │ averageWorkload │ baseDate │ totalPvExcel │ totalPvCalculated │ totalEv │ spi │
93
- ├─────────┼──────────┼─────────────────┼────────────────────┼─────────────────────────┼─────────────────┼──────────────┼──────────────┼───────────────────┼─────────┼────────────────────┤
94
- │ 0 │ '要員A' │ 8 │ 39 │ 39 │ 4.875 │ '2025/07/25' │ 19 │ 19 │ 15 │ 0.7894736842105263 │
95
- │ 1 │ '要員B' │ 3 │ 15 │ 15 │ 5 │ '2025/07/25' │ 10 │ 10 │ 7.5 │ 0.75 │
96
- │ 2 │ '要員C' │ 3 │ 12 │ 12 │ 4 │ '2025/07/25' │ 5 │ 5 │ 4 │ 0.8 │
97
- └─────────┴──────────┴─────────────────┴────────────────────┴─────────────────────────┴─────────────────┴──────────────┴──────────────┴───────────────────┴─────────┴────────────────────┘
98
-
99
-
100
- $ ls -lrt
101
- -rw-r--r-- 1 sysmgr sysmgr 468256 Jul 9 15:24 now.xlsm
102
- -rw-r--r-- 1 sysmgr sysmgr 50950 Jul 11 16:00 now-summary.xlsx <-上記情報
103
- $
104
- ```
105
-
106
- ### 指定した期間における、指定した担当者のタスクを表示する
107
-
108
-
109
- ```console
110
- $ npx pbevm-show-pv --help
111
- Usage: npx pbevm-show-pv [options]
112
-
113
- Options:
114
- --version Show version number [boolean]
115
- --path Excel file Path [string] [default: "./now.xlsm"]
116
- --fromDate From Date [string] [default: "2025-07-01"]
117
- --toDate To Date [string]
118
- --assignee Assignee [string]
119
- --help Show help [boolean]
120
-
121
- Examples:
122
- npx pbevm-show-pv --path now.xlsm --fromDate 2025-07-07 --toDate 2025-07-11
123
- --assignee '要員A'
124
- ```
125
-
126
-
127
- 例:
128
-
129
- ```
130
- $ npx pbevm-show-pv --path now.xlsm \
131
- --fromDate 2025-07-07 \
132
- --toDate 2025-07-11 \
133
- --assignee '要員A'
134
- (toDate未指定時はfromDateの日のみ、assignee未指定時は全員)
135
- ┌─────────┬───────┬────┬───────┬─────────┬──────────┬──────────┬──────────────┬───────────────────┬────┬────┬─────┬───────────┬───────────┬──────────┬────────┬──────────────┬──────────────┬──────────────┬──────────────┬────────────┐
136
- │ (index) │ sharp │ id │ level │ name │ assignee │ workload │ progressRate │ scheduledWorkDays │ pv │ ev │ spi │ delayDays │ remarks │ parentId │ isLeaf │ 予定開始日 │ 予定終了日 │ 実績開始日 │ 実績終了日 │ 進捗応当日 │
137
- ├─────────┼───────┼────┼───────┼─────────┼──────────┼──────────┼──────────────┼───────────────────┼────┼────┼─────┼───────────┼───────────┼──────────┼────────┼──────────────┼──────────────┼──────────────┼──────────────┼────────────┤
138
- │ 0 │ 4 │ 4 │ 2 │ '機能1' │ '要員A' │ 3 │ 1 │ 5 │ 3 │ 3 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/07' │ '2025/07/11' │ '' │
139
- │ 1 │ 5 │ 5 │ 2 │ '機能2' │ '要員A' │ 2 │ 1 │ 5 │ 2 │ 2 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/04' │ '2025/07/10' │ '' │
140
- └─────────┴───────┴────┴───────┴─────────┴──────────┴──────────┴──────────────┴───────────────────┴────┴────┴─────┴───────────┴───────────┴──────────┴────────┴──────────────┴──────────────┴──────────────┴──────────────┴────────────┘
141
-
142
- $ ls -lrt
143
- -rw-r--r-- 1 sysmgr sysmgr 468256 Jul 9 15:24 now.xlsm
144
- -rw-r--r-- 1 sysmgr sysmgr 7183 Jul 11 16:07 now-pv.xlsx
145
- $
146
- ```
147
-
148
- ### 指定したファイル間のDIFFをとる
149
-
150
-
151
- ```
152
- $ npx pbevm-diff --help
153
- Usage: npx pbevm-diff [options]
154
-
155
- Options:
156
- --version Show version number [boolean]
157
- --path Excel file Path [string] [default: "./now.xlsm"]
158
- --prevPath Excel file Path [string] [default: "./prev.xlsm"]
159
- --help Show help [boolean]
160
-
161
- Examples:
162
- npx pbevm-diff --path now.xlsm --prevPath prev.xlsm
163
- ```
164
-
165
-
166
- 例:
167
-
168
- ```
169
- $ npx pbevm-diff \
170
- --path now.xlsm \
171
- --prevPath prev.xlsm
172
- プロジェクトDiff
173
- ┌─────────┬─────────┬─────────┬────────┬────────┬───────────┬───────────┬───────────────┬────────────┬──────────────┬─────────┬──────────┐
174
- │ (index) │ deltaPV │ deltaEV │ prevPV │ prevEV │ currentPV │ currentEV │ modifiedCount │ addedCount │ removedCount │ hasDiff │ finished │
175
- ├─────────┼─────────┼─────────┼────────┼────────┼───────────┼───────────┼───────────────┼────────────┼──────────────┼─────────┼──────────┤
176
- │ 0 │ 30 │ 19.6 │ 0 │ 2.9 │ 30 │ 22.5 │ 8 │ 0 │ 0 │ true │ false │
177
- └─────────┴─────────┴─────────┴────────┴────────┴───────────┴───────────┴───────────────┴────────────┴──────────────┴─────────┴──────────┘
178
- 担当Diff
179
- ┌─────────┬──────────┬─────────┬─────────┬────────┬────────┬───────────┬───────────┬───────────────┬────────────┬──────────────┬─────────┬──────────┐
180
- │ (index) │ assignee │ deltaPV │ deltaEV │ prevPV │ prevEV │ currentPV │ currentEV │ modifiedCount │ addedCount │ removedCount │ hasDiff │ finished │
181
- ├─────────┼──────────┼─────────┼─────────┼────────┼────────┼───────────┼───────────┼───────────────┼────────────┼──────────────┼─────────┼──────────┤
182
- │ 0 │ '要員A' │ 15 │ 10.6 │ 0 │ 0.4 │ 15 │ 11 │ 4 │ 0 │ 0 │ true │ false │
183
- │ 1 │ '要員B' │ 10 │ 5 │ 0 │ 2.5 │ 10 │ 7.5 │ 3 │ 0 │ 0 │ true │ false │
184
- │ 2 │ '要員C' │ 5 │ 4 │ 0 │ 0 │ 5 │ 4 │ 1 │ 0 │ 0 │ true │ false │
185
- └─────────┴──────────┴─────────┴─────────┴────────┴────────┴───────────┴───────────┴───────────────┴────────────┴──────────────┴─────────┴──────────┘
186
- タスクDiff
187
- ┌─────────┬────┬─────────┬──────────────┬──────────┬──────────┬───────────────────┬─────────┬─────────┬────────┬────────┬───────────┬───────────┬──────────────────┬─────────────────────┬─────────┬─────────────────────┬───────────┬───────────┬────────────┬──────────┬─────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬───────────────┬──────────────────┬─────────────┬───────────┐
188
- │ (index) │ id │ name │ fullName │ assignee │ parentId │ deltaProgressRate │ deltaPV │ deltaEV │ prevPV │ prevEV │ currentPV │ currentEV │ prevProgressRate │ currentProgressRate │ hasDiff │ hasProgressRateDiff │ hasPvDiff │ hasEvDiff │ diffType │ finished │ isOverdueAt │ prevBaseDate │ currentBaseDate │ baseDate │ daysOverdueAt │ daysStrOverdueAt │ currentTask │ prevTask │
189
- ├─────────┼────┼─────────┼──────────────┼──────────┼──────────┼───────────────────┼─────────┼─────────┼────────┼────────┼───────────┼───────────┼──────────────────┼─────────────────────┼─────────┼─────────────────────┼───────────┼───────────┼────────────┼──────────┼─────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼───────────────┼──────────────────┼─────────────┼───────────┤
190
- │ 0 │ 4 │ '機能1' │ '設計/機能1' │ '要員A' │ 3 │ 1 │ 3 │ 3 │ 0 │ 0 │ 3 │ 3 │ undefined │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -14 │ '14 日前' │ [TaskRow] │ [TaskRow] │
191
- │ 1 │ 5 │ '機能2' │ '設計/機能2' │ '要員A' │ 3 │ 0.8 │ 2 │ 1.6 │ 0 │ 0.4 │ 2 │ 2 │ 0.2 │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -14 │ '14 日前' │ [TaskRow] │ [TaskRow] │
192
- │ 2 │ 6 │ '機能3' │ '設計/機能3' │ '要員B' │ 3 │ 0.5 │ 5 │ 2.5 │ 0 │ 2.5 │ 5 │ 5 │ 0.5 │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -7 │ '7 日前' │ [TaskRow] │ [TaskRow] │
193
- │ 3 │ 7 │ '機能4' │ '設計/機能4' │ '要員A' │ 3 │ 1 │ 5 │ 5 │ 0 │ 0 │ 5 │ 5 │ undefined │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -7 │ '7 日前' │ [TaskRow] │ [TaskRow] │
194
- │ 4 │ 9 │ '機能1' │ '開発/機能1' │ '要員A' │ 8 │ 0.1 │ 5 │ 1 │ 0 │ 0 │ 5 │ 1 │ undefined │ 0.1 │ true │ true │ true │ true │ 'modified' │ false │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │ [TaskRow] │ [TaskRow] │
195
- │ 5 │ 10 │ '機能2' │ '開発/機能2' │ '要員B' │ 8 │ 0.2 │ 2.5 │ 1 │ 0 │ 0 │ 2.5 │ 1 │ undefined │ 0.2 │ true │ true │ true │ true │ 'modified' │ false │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │ [TaskRow] │ [TaskRow] │
196
- │ 6 │ 11 │ '機能3' │ '開発/機能3' │ '要員B' │ 8 │ 0.3 │ 2.5 │ 1.5 │ 0 │ 0 │ 2.5 │ 1.5 │ undefined │ 0.3 │ true │ true │ true │ true │ 'modified' │ false │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │ [TaskRow] │ [TaskRow] │
197
- │ 7 │ 12 │ '機能4' │ '開発/機能4' │ '要員C' │ 8 │ 0.4 │ 5 │ 4 │ 0 │ 0 │ 5 │ 4 │ undefined │ 0.4 │ true │ true │ true │ true │ 'modified' │ false │ false │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │ [TaskRow] │ [TaskRow] │
198
- └─────────┴────┴─────────┴──────────────┴──────────┴──────────┴───────────────────┴─────────┴─────────┴────────┴────────┴───────────┴───────────┴──────────────────┴─────────────────────┴─────────┴─────────────────────┴───────────┴───────────┴────────────┴──────────┴─────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴───────────────┴──────────────────┴─────────────┴───────────┘
199
-
200
- $ ls -lrt
201
- -rw-r--r-- 1 sysmgr sysmgr 463539 Jul 9 15:24 prev.xlsm
202
- -rw-r--r-- 1 sysmgr sysmgr 468256 Jul 9 15:24 now.xlsm
203
- -rw-r--r-- 1 sysmgr sysmgr 15937 Jul 11 16:14 now-diff.xlsx
204
- ```
205
-
206
-
207
-
208
-
209
-
210
- ## Author
211
-
212
- 👤 **Masatomi KINO**
213
-
214
- <!-- * Twitter: [@masatomix](https://twitter.com/masatomix) -->
215
- * Github: [@masatomix](https://github.com/masatomix)
216
-
217
- ## 🤝 Contributing
218
-
219
- Contributions, issues and feature requests are welcome!<br />Feel free to check [issues page](https://github.com/masatomix/evmtools-node/issues).
220
-
221
- ## Show your support
222
-
223
- Give a ⭐️ if this project helped you!
224
-
225
-
226
- ## 開発者向け
227
-
228
- ### ドキュメント
229
-
230
- 詳細なドキュメントは [docs/README.md](docs/README.md) を参照してください。
231
-
232
- - 開発ワークフロー
233
- - 仕様書(要件定義・設計書)
234
- - コーディング標準
235
- - トレーサビリティの事例
236
-
237
- ### テスト実行
238
-
239
- ```bash
240
- npm test # 全テストを実行
241
- npm test -- --watch # ウォッチモードで実行
242
- npm run test:coverage # カバレッジレポート付きで実行
243
- ```
244
-
245
- ### ビルド
246
-
247
- ```bash
248
- npm run build # クリーン、TypeScriptコンパイル、.hbsテンプレートのコピー
249
- npm run lint # ESLintチェック
250
- npm run format # Prettierチェック
251
- ```
252
-
253
- 詳細な開発フローは [DEVELOPMENT_WORKFLOW.md](docs/workflow/DEVELOPMENT_WORKFLOW.md) を参照してください。
254
-
255
- ## 改訂履歴
256
- - 0.0.18 (予定) CsvProjectCreator追加、VersionInfo追加、Jest環境導入、仕様駆動開発導入
257
- - 0.0.17 正しいデータかを表す「validStatus」プロパティを追加
258
- - 0.0.15 微調整
259
- - 0.0.14 もろもろリファクタリング。要員計画を読み込むコードのβ版リリース
260
- - 0.0.13 Diffのプロパティに工数(workload)を追加。
261
- - 0.0.12 時系列の統計データを読み込む ProjectStatisticsCreator を追加。
262
- - 0.0.11 指定した基準日のSPI/SV(EV-PV)を返すメソッドをTaskRowに追加。
263
- - 0.0.10 内部処理の見直し(ログ関連)。
264
- - 0.0.8 Projectに休日データを保持するプロパティを追加。Projectに日付を指定して祝日かを返すメソッドを追加。
265
- - 0.0.7 内部のリファクタリング(キャッシュして処理改善)
266
- - 0.0.6 README.md(このファイル)を更新。Project#getTaskRows で、条件に合致するTaskRowを返すメソッドを追加
267
- - 0.0.5 初回リリース(絶賛開発中)
268
-
269
-
270
- ## 🔧 Logger 設定のカスタマイズ
271
-
272
- このライブラリは `pino` を使ってログを出力しています。
273
- ログ出力レベルやフォーマットを変更したい場合は、``config/default.json`` を作成して設定を記述してください。
274
-
275
-
276
- ```json
277
- {
278
- "evmtools-node-logger": {
279
- "level": "warn",
280
- "moduleLogLevels": {
281
- "main": "info"
282
- },
283
- "transport": {
284
- "target": "pino-pretty",
285
- "options": {
286
- "translateTime": "SYS:standard",
287
- "ignore": "id,hostname",
288
- "levelFirst": true
289
- }
290
- }
291
- }
292
- }
293
- ```
294
-
295
-
296
- ```
297
- "level": "warn", // 全体のログレベルを指定
298
- "moduleLogLevels": // ソースごとにlevelを変えたい場合、この中に記述
299
- "transport": // pino のtransport設定などを記述
300
- "target": "pino-pretty", // この場合は npm install --save-dev pino-pretty すること
301
- ```
302
-
303
-
304
-
305
- ***
1
+ <h1 align="center">Welcome to evmtools-node</h1>
2
+ <p>
3
+ <a href="#" target="_blank">
4
+ <img alt="License: ISC" src="https://img.shields.io/badge/License-ISC-yellow.svg" />
5
+ </a>
6
+ <a href="https://twitter.com/masatomix" target="_blank">
7
+ <img alt="Twitter: masatomix" src="https://img.shields.io/twitter/follow/masatomix.svg?style=social" />
8
+ </a>
9
+ </p>
10
+
11
+ ## evmtools-node
12
+
13
+ このライブラリは、プライムブレインズ社で利用している「進捗管理ツール(Excel)」ファイルを読み込み、 プロジェクトの進捗状況や要員別の作業量を可視化するためのライブラリです。
14
+
15
+ ### [サンプルサイト](https://masatomix.github.io/copy-utils-generator-webui/#/gamen3)
16
+
17
+
18
+ WEBアプリ等で先のExcelファイルを読み書きできるように開発していますが、下記の通りコマンドラインから呼び出せるようにもしてあります。
19
+
20
+
21
+ ## インストール
22
+
23
+ ```bash
24
+ npm install evmtools-node
25
+ ```
26
+
27
+ インストール後、以下のコマンドが使用可能になります。
28
+
29
+ > **注記**: `npm install evmtools-node` せずに直接実行する場合は、`npx -p evmtools-node <command>` の形式で実行できます。
30
+ > 例: `npx -p evmtools-node pbevm-show-project --path ./now.xlsm`
31
+
32
+
33
+ ## コマンド
34
+
35
+
36
+ ### プロジェクトの情報を表示・Excel出力する
37
+
38
+ ```console
39
+ $ npx pbevm-show-project --help
40
+ Usage: npx pbevm-show-project [options]
41
+
42
+ Options:
43
+ --version Show version number [boolean]
44
+ --path Excel file Path [string] [default: "./now.xlsm"]
45
+ --help Show help [boolean]
46
+
47
+ Examples:
48
+ npx pbevm-show-project --path ./now.xlsm
49
+ ```
50
+
51
+ 例:
52
+
53
+ ```console
54
+ $ npx pbevm-show-project --path ./now.xlsm
55
+ プロジェクト名: now
56
+ 開始日: 2025/07/01
57
+ 終了日: 2025/08/26
58
+ 基準日: 2025/07/25
59
+ タスク数:19件
60
+ 先頭19行データ:
61
+ ┌─────────┬───────┬────┬───────┬──────────────┬───────────┬──────────┬──────────────┬───────────────────┬─────┬─────┬─────┬───────────┬───────────┬───────────┬────────┬──────────────┬──────────────┬──────────────┬──────────────┬──────────────┐
62
+ │ (index) │ sharp │ id │ level │ name │ assignee │ workload │ progressRate │ scheduledWorkDays │ pv │ ev │ spi │ delayDays │ remarks │ parentId │ isLeaf │ 予定開始日 │ 予定終了日 │ 実績開始日 │ 実績終了日 │ 進捗応当日 │
63
+ ├─────────┼───────┼────┼───────┼──────────────┼───────────┼──────────┼──────────────┼───────────────────┼─────┼─────┼─────┼───────────┼───────────┼───────────┼────────┼──────────────┼──────────────┼──────────────┼──────────────┼──────────────┤
64
+ │ 0 │ 1 │ 1 │ 1 │ '要件定義' │ undefined │ 4 │ 1 │ 4 │ 4 │ 4 │ 1 │ undefined │ undefined │ undefined │ false │ '2025/07/01' │ '2025/07/04' │ '2025/07/01' │ '2025/07/04' │ '' │
65
+ │ 1 │ 2 │ 2 │ 2 │ '機能全体' │ '要員A' │ 4 │ 1 │ 4 │ 4 │ 4 │ 1 │ undefined │ undefined │ 1 │ true │ '2025/07/01' │ '2025/07/04' │ '2025/07/01' │ '2025/07/04' │ '' │
66
+ │ 2 │ 3 │ 3 │ 1 │ '設計' │ undefined │ 15 │ 1 │ 12 │ 15 │ 15 │ 1 │ undefined │ undefined │ undefined │ false │ '2025/07/07' │ '2025/07/18' │ '2025/07/04' │ '2025/07/16' │ '' │
67
+ │ 3 │ 4 │ 4 │ 2 │ '機能1' │ '要員A' │ 3 │ 1 │ 5 │ 3 │ 3 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/07' │ '2025/07/11' │ '' │
68
+ │ 4 │ 5 │ 5 │ 2 │ '機能2' │ '要員A' │ 2 │ 1 │ 5 │ 2 │ 2 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/04' │ '2025/07/10' │ '' │
69
+ │ 5 │ 6 │ 6 │ 2 │ '機能3' │ '要員B' │ 5 │ 1 │ 5 │ 5 │ 5 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/14' │ '2025/07/18' │ '2025/07/04' │ '2025/07/10' │ '' │
70
+ │ 6 │ 7 │ 7 │ 2 │ '機能4' │ '要員A' │ 5 │ 1 │ 5 │ 5 │ 5 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/14' │ '2025/07/18' │ '2025/07/14' │ '2025/07/16' │ '' │
71
+ │ 7 │ 8 │ 8 │ 1 │ '開発' │ undefined │ 30 │ 0.25 │ 12 │ 15 │ 7.5 │ 0.5 │ -2 │ undefined │ undefined │ false │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/27' │
72
+ │ 8 │ 9 │ 9 │ 2 │ '機能1' │ '要員A' │ 10 │ 0.1 │ 10 │ 5 │ 1 │ 0.2 │ 3 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/22' │
73
+ │ 9 │ 10 │ 10 │ 2 │ '機能2' │ '要員B' │ 5 │ 0.2 │ 10 │ 2.5 │ 1 │ 0.4 │ 2 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/23' │
74
+ │ 10 │ 11 │ 11 │ 2 │ '機能3' │ '要員B' │ 5 │ 0.3 │ 10 │ 2.5 │ 1.5 │ 0.6 │ 1 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/24' │
75
+ │ 11 │ 12 │ 12 │ 2 │ '機能4' │ '要員C' │ 10 │ 0.4 │ 10 │ 5 │ 4 │ 0.8 │ 0 │ undefined │ 8 │ true │ '2025/07/21' │ '2025/08/01' │ '2025/07/21' │ '' │ '2025/07/25' │
76
+ │ 12 │ 13 │ 13 │ 1 │ 'テスト' │ undefined │ 15 │ 0 │ 19 │ 0 │ 0 │ 0 │ undefined │ undefined │ undefined │ false │ '2025/08/04' │ '2025/08/22' │ '' │ '' │ '' │
77
+ │ 13 │ 14 │ 14 │ 2 │ '単体テスト' │ '要員A' │ 5 │ undefined │ 5 │ 0 │ 0 │ 0 │ undefined │ undefined │ 13 │ true │ '2025/08/04' │ '2025/08/08' │ '' │ '' │ '' │
78
+ │ 14 │ 15 │ 15 │ 2 │ '連結テスト' │ '要員A' │ 5 │ undefined │ 5 │ 0 │ 0 │ 0 │ undefined │ undefined │ 13 │ true │ '2025/08/11' │ '2025/08/15' │ '' │ '' │ '' │
79
+ │ 15 │ 16 │ 16 │ 2 │ '総合テスト' │ '要員A' │ 5 │ undefined │ 5 │ 0 │ 0 │ 0 │ undefined │ undefined │ 13 │ true │ '2025/08/18' │ '2025/08/22' │ '' │ '' │ '' │
80
+ │ 16 │ 17 │ 17 │ 1 │ 'リリース' │ undefined │ 2 │ 0 │ 2 │ 0 │ 0 │ 0 │ undefined │ undefined │ undefined │ false │ '2025/08/25' │ '2025/08/26' │ '' │ '' │ '' │
81
+ │ 17 │ 18 │ 18 │ 2 │ '準備' │ '要員C' │ 1 │ undefined │ 1 │ 0 │ 0 │ 0 │ undefined │ undefined │ 17 │ true │ '2025/08/25' │ '2025/08/25' │ '' │ '' │ '' │
82
+ │ 18 │ 19 │ 19 │ 2 │ '作業' │ '要員C' │ 1 │ undefined │ 1 │ 0 │ 0 │ 0 │ undefined │ undefined │ 17 │ true │ '2025/08/26' │ '2025/08/26' │ '' │ '' │ '' │
83
+ └─────────┴───────┴────┴───────┴──────────────┴───────────┴──────────┴──────────────┴───────────────────┴─────┴─────┴─────┴───────────┴───────────┴───────────┴────────┴──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘
84
+ プロジェクト情報
85
+ ┌─────────┬─────────────┬──────────────┬──────────────┬─────────────────┬────────────────────┬─────────────────────────┬─────────────────┬──────────────┬──────────────┬───────────────────┬─────────┬────────────────────┐
86
+ │ (index) │ projectName │ startDate │ endDate │ totalTasksCount │ totalWorkloadExcel │ totalWorkloadCalculated │ averageWorkload │ baseDate │ totalPvExcel │ totalPvCalculated │ totalEv │ spi │
87
+ ├─────────┼─────────────┼──────────────┼──────────────┼─────────────────┼────────────────────┼─────────────────────────┼─────────────────┼──────────────┼──────────────┼───────────────────┼─────────┼────────────────────┤
88
+ │ 0 │ 'now' │ '2025/07/01' │ '2025/08/26' │ 14 │ 66 │ 66 │ 4.714 │ '2025/07/25' │ 34 │ 34 │ 26.5 │ 0.7794117647058824 │
89
+ └─────────┴─────────────┴──────────────┴──────────────┴─────────────────┴────────────────────┴─────────────────────────┴─────────────────┴──────────────┴──────────────┴───────────────────┴─────────┴────────────────────┘
90
+ 要員ごと統計
91
+ ┌─────────┬──────────┬─────────────────┬────────────────────┬─────────────────────────┬─────────────────┬──────────────┬──────────────┬───────────────────┬─────────┬────────────────────┐
92
+ │ (index) │ assignee │ totalTasksCount │ totalWorkloadExcel │ totalWorkloadCalculated │ averageWorkload │ baseDate │ totalPvExcel │ totalPvCalculated │ totalEv │ spi │
93
+ ├─────────┼──────────┼─────────────────┼────────────────────┼─────────────────────────┼─────────────────┼──────────────┼──────────────┼───────────────────┼─────────┼────────────────────┤
94
+ │ 0 │ '要員A' │ 8 │ 39 │ 39 │ 4.875 │ '2025/07/25' │ 19 │ 19 │ 15 │ 0.7894736842105263 │
95
+ │ 1 │ '要員B' │ 3 │ 15 │ 15 │ 5 │ '2025/07/25' │ 10 │ 10 │ 7.5 │ 0.75 │
96
+ │ 2 │ '要員C' │ 3 │ 12 │ 12 │ 4 │ '2025/07/25' │ 5 │ 5 │ 4 │ 0.8 │
97
+ └─────────┴──────────┴─────────────────┴────────────────────┴─────────────────────────┴─────────────────┴──────────────┴──────────────┴───────────────────┴─────────┴────────────────────┘
98
+
99
+
100
+ $ ls -lrt
101
+ -rw-r--r-- 1 sysmgr sysmgr 468256 Jul 9 15:24 now.xlsm
102
+ -rw-r--r-- 1 sysmgr sysmgr 50950 Jul 11 16:00 now-summary.xlsx <-上記情報
103
+ $
104
+ ```
105
+
106
+ ### 指定した期間における、指定した担当者のタスクを表示する
107
+
108
+
109
+ ```console
110
+ $ npx pbevm-show-pv --help
111
+ Usage: npx pbevm-show-pv [options]
112
+
113
+ Options:
114
+ --version Show version number [boolean]
115
+ --path Excel file Path [string] [default: "./now.xlsm"]
116
+ --fromDate From Date [string] [default: "2025-07-01"]
117
+ --toDate To Date [string]
118
+ --assignee Assignee [string]
119
+ --help Show help [boolean]
120
+
121
+ Examples:
122
+ npx pbevm-show-pv --path now.xlsm --fromDate 2025-07-07 --toDate 2025-07-11
123
+ --assignee '要員A'
124
+ ```
125
+
126
+
127
+ 例:
128
+
129
+ ```
130
+ $ npx pbevm-show-pv --path now.xlsm \
131
+ --fromDate 2025-07-07 \
132
+ --toDate 2025-07-11 \
133
+ --assignee '要員A'
134
+ (toDate未指定時はfromDateの日のみ、assignee未指定時は全員)
135
+ ┌─────────┬───────┬────┬───────┬─────────┬──────────┬──────────┬──────────────┬───────────────────┬────┬────┬─────┬───────────┬───────────┬──────────┬────────┬──────────────┬──────────────┬──────────────┬──────────────┬────────────┐
136
+ │ (index) │ sharp │ id │ level │ name │ assignee │ workload │ progressRate │ scheduledWorkDays │ pv │ ev │ spi │ delayDays │ remarks │ parentId │ isLeaf │ 予定開始日 │ 予定終了日 │ 実績開始日 │ 実績終了日 │ 進捗応当日 │
137
+ ├─────────┼───────┼────┼───────┼─────────┼──────────┼──────────┼──────────────┼───────────────────┼────┼────┼─────┼───────────┼───────────┼──────────┼────────┼──────────────┼──────────────┼──────────────┼──────────────┼────────────┤
138
+ │ 0 │ 4 │ 4 │ 2 │ '機能1' │ '要員A' │ 3 │ 1 │ 5 │ 3 │ 3 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/07' │ '2025/07/11' │ '' │
139
+ │ 1 │ 5 │ 5 │ 2 │ '機能2' │ '要員A' │ 2 │ 1 │ 5 │ 2 │ 2 │ 1 │ undefined │ undefined │ 3 │ true │ '2025/07/07' │ '2025/07/11' │ '2025/07/04' │ '2025/07/10' │ '' │
140
+ └─────────┴───────┴────┴───────┴─────────┴──────────┴──────────┴──────────────┴───────────────────┴────┴────┴─────┴───────────┴───────────┴──────────┴────────┴──────────────┴──────────────┴──────────────┴──────────────┴────────────┘
141
+
142
+ $ ls -lrt
143
+ -rw-r--r-- 1 sysmgr sysmgr 468256 Jul 9 15:24 now.xlsm
144
+ -rw-r--r-- 1 sysmgr sysmgr 7183 Jul 11 16:07 now-pv.xlsx
145
+ $
146
+ ```
147
+
148
+ ### 指定したファイル間のDIFFをとる
149
+
150
+
151
+ ```
152
+ $ npx pbevm-diff --help
153
+ Usage: npx pbevm-diff [options]
154
+
155
+ Options:
156
+ --version Show version number [boolean]
157
+ --path Excel file Path [string] [default: "./now.xlsm"]
158
+ --prevPath Excel file Path [string] [default: "./prev.xlsm"]
159
+ --help Show help [boolean]
160
+
161
+ Examples:
162
+ npx pbevm-diff --path now.xlsm --prevPath prev.xlsm
163
+ ```
164
+
165
+
166
+ 例:
167
+
168
+ ```
169
+ $ npx pbevm-diff \
170
+ --path now.xlsm \
171
+ --prevPath prev.xlsm
172
+ プロジェクトDiff
173
+ ┌─────────┬─────────┬─────────┬────────┬────────┬───────────┬───────────┬───────────────┬────────────┬──────────────┬─────────┬──────────┐
174
+ │ (index) │ deltaPV │ deltaEV │ prevPV │ prevEV │ currentPV │ currentEV │ modifiedCount │ addedCount │ removedCount │ hasDiff │ finished │
175
+ ├─────────┼─────────┼─────────┼────────┼────────┼───────────┼───────────┼───────────────┼────────────┼──────────────┼─────────┼──────────┤
176
+ │ 0 │ 30 │ 19.6 │ 0 │ 2.9 │ 30 │ 22.5 │ 8 │ 0 │ 0 │ true │ false │
177
+ └─────────┴─────────┴─────────┴────────┴────────┴───────────┴───────────┴───────────────┴────────────┴──────────────┴─────────┴──────────┘
178
+ 担当Diff
179
+ ┌─────────┬──────────┬─────────┬─────────┬────────┬────────┬───────────┬───────────┬───────────────┬────────────┬──────────────┬─────────┬──────────┐
180
+ │ (index) │ assignee │ deltaPV │ deltaEV │ prevPV │ prevEV │ currentPV │ currentEV │ modifiedCount │ addedCount │ removedCount │ hasDiff │ finished │
181
+ ├─────────┼──────────┼─────────┼─────────┼────────┼────────┼───────────┼───────────┼───────────────┼────────────┼──────────────┼─────────┼──────────┤
182
+ │ 0 │ '要員A' │ 15 │ 10.6 │ 0 │ 0.4 │ 15 │ 11 │ 4 │ 0 │ 0 │ true │ false │
183
+ │ 1 │ '要員B' │ 10 │ 5 │ 0 │ 2.5 │ 10 │ 7.5 │ 3 │ 0 │ 0 │ true │ false │
184
+ │ 2 │ '要員C' │ 5 │ 4 │ 0 │ 0 │ 5 │ 4 │ 1 │ 0 │ 0 │ true │ false │
185
+ └─────────┴──────────┴─────────┴─────────┴────────┴────────┴───────────┴───────────┴───────────────┴────────────┴──────────────┴─────────┴──────────┘
186
+ タスクDiff
187
+ ┌─────────┬────┬─────────┬──────────────┬──────────┬──────────┬───────────────────┬─────────┬─────────┬────────┬────────┬───────────┬───────────┬──────────────────┬─────────────────────┬─────────┬─────────────────────┬───────────┬───────────┬────────────┬──────────┬─────────────┬──────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬───────────────┬──────────────────┐
188
+ │ (index) │ id │ name │ fullName │ assignee │ parentId │ deltaProgressRate │ deltaPV │ deltaEV │ prevPV │ prevEV │ currentPV │ currentEV │ prevProgressRate │ currentProgressRate │ hasDiff │ hasProgressRateDiff │ hasPvDiff │ hasEvDiff │ diffType │ finished │ isOverdueAt │ workload │ prevBaseDate │ currentBaseDate │ baseDate │ daysOverdueAt │ daysStrOverdueAt │
189
+ ├─────────┼────┼─────────┼──────────────┼──────────┼──────────┼───────────────────┼─────────┼─────────┼────────┼────────┼───────────┼───────────┼──────────────────┼─────────────────────┼─────────┼─────────────────────┼───────────┼───────────┼────────────┼──────────┼─────────────┼──────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼───────────────┼──────────────────┤
190
+ │ 0 │ 4 │ '機能1' │ '設計/機能1' │ '要員A' │ 3 │ 1 │ 3 │ 3 │ 0 │ 0 │ 3 │ 3 │ undefined │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 3 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -14 │ '14 日前' │
191
+ │ 1 │ 5 │ '機能2' │ '設計/機能2' │ '要員A' │ 3 │ 0.8 │ 2 │ 1.6 │ 0 │ 0.4 │ 2 │ 2 │ 0.2 │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 2 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -14 │ '14 日前' │
192
+ │ 2 │ 6 │ '機能3' │ '設計/機能3' │ '要員B' │ 3 │ 0.5 │ 5 │ 2.5 │ 0 │ 2.5 │ 5 │ 5 │ 0.5 │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 5 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -7 │ '7 日前' │
193
+ │ 3 │ 7 │ '機能4' │ '設計/機能4' │ '要員A' │ 3 │ 1 │ 5 │ 5 │ 0 │ 0 │ 5 │ 5 │ undefined │ 1 │ true │ true │ true │ true │ 'modified' │ true │ false │ 5 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ -7 │ '7 日前' │
194
+ │ 4 │ 9 │ '機能1' │ '開発/機能1' │ '要員A' │ 8 │ 0.1 │ 5 │ 1 │ 0 │ 0 │ 5 │ 1 │ undefined │ 0.1 │ true │ true │ true │ true │ 'modified' │ false │ false │ 10 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │
195
+ │ 5 │ 10 │ '機能2' │ '開発/機能2' │ '要員B' │ 8 │ 0.2 │ 2.5 │ 1 │ 0 │ 0 │ 2.5 │ 1 │ undefined │ 0.2 │ true │ true │ true │ true │ 'modified' │ false │ false │ 5 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │
196
+ │ 6 │ 11 │ '機能3' │ '開発/機能3' │ '要員B' │ 8 │ 0.3 │ 2.5 │ 1.5 │ 0 │ 0 │ 2.5 │ 1.5 │ undefined │ 0.3 │ true │ true │ true │ true │ 'modified' │ false │ false │ 5 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │
197
+ │ 7 │ 12 │ '機能4' │ '開発/機能4' │ '要員C' │ 8 │ 0.4 │ 5 │ 4 │ 0 │ 0 │ 5 │ 4 │ undefined │ 0.4 │ true │ true │ true │ true │ 'modified' │ false │ false │ 10 │ 2025-07-03T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 2025-07-24T15:00:00.000Z │ 7 │ '7 日後' │
198
+ └─────────┴────┴─────────┴──────────────┴──────────┴──────────┴───────────────────┴─────────┴─────────┴────────┴────────┴───────────┴───────────┴──────────────────┴─────────────────────┴─────────┴─────────────────────┴───────────┴───────────┴────────────┴──────────┴─────────────┴──────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴───────────────┴──────────────────┘
199
+
200
+ $ ls -lrt
201
+ -rw-r--r-- 1 sysmgr sysmgr 463539 Jul 9 15:24 prev.xlsm
202
+ -rw-r--r-- 1 sysmgr sysmgr 468256 Jul 9 15:24 now.xlsm
203
+ -rw-r--r-- 1 sysmgr sysmgr 15937 Jul 11 16:14 now-diff.xlsx
204
+ ```
205
+
206
+
207
+
208
+
209
+
210
+ ## Author
211
+
212
+ 👤 **Masatomi KINO**
213
+
214
+ <!-- * Twitter: [@masatomix](https://twitter.com/masatomix) -->
215
+ * Github: [@masatomix](https://github.com/masatomix)
216
+
217
+ ## 🤝 Contributing
218
+
219
+ Contributions, issues and feature requests are welcome!<br />Feel free to check [issues page](https://github.com/masatomix/evmtools-node/issues).
220
+
221
+ ## Show your support
222
+
223
+ Give a ⭐️ if this project helped you!
224
+
225
+
226
+ ## 開発者向け
227
+
228
+ ### ドキュメント
229
+
230
+ 詳細なドキュメントは [docs/README.md](docs/README.md) を参照してください。
231
+
232
+ - [コア用語集](docs/GLOSSARY.md) - Project, TaskRow, EVM指標などの用語定義
233
+ - 開発ワークフロー
234
+ - 仕様書(要件定義・設計書)
235
+ - コーディング標準
236
+ - トレーサビリティの事例
237
+
238
+ ### テスト実行
239
+
240
+ ```bash
241
+ npm test # 全テストを実行
242
+ npm test -- --watch # ウォッチモードで実行
243
+ npm run test:coverage # カバレッジレポート付きで実行
244
+ ```
245
+
246
+ ### ビルド
247
+
248
+ ```bash
249
+ npm run build # クリーン、TypeScriptコンパイル、.hbsテンプレートのコピー
250
+ npm run lint # ESLintチェック
251
+ npm run format # Prettierチェック
252
+ ```
253
+
254
+ 詳細な開発フローは [DEVELOPMENT_WORKFLOW.md](docs/workflow/DEVELOPMENT_WORKFLOW.md) を参照してください。
255
+
256
+ ## 改訂履歴
257
+ - 0.0.19 CLI出力整形(pbevm-diff, pbevm-show-pvから不要プロパティ除去)、ドキュメント相対リンク化
258
+ - 0.0.18 CsvProjectCreator追加、VersionInfo追加、excludedTasks追加、Jest環境導入、仕様駆動開発導入
259
+ - 0.0.17 正しいデータかを表す「validStatus」プロパティを追加
260
+ - 0.0.15 微調整
261
+ - 0.0.14 もろもろリファクタリング。要員計画を読み込むコードのβ版リリース
262
+ - 0.0.13 Diffのプロパティに工数(workload)を追加。
263
+ - 0.0.12 時系列の統計データを読み込む ProjectStatisticsCreator を追加。
264
+ - 0.0.11 指定した基準日のSPI/SV(EV-PV)を返すメソッドをTaskRowに追加。
265
+ - 0.0.10 内部処理の見直し(ログ関連)
266
+ - 0.0.8 Projectに休日データを保持するプロパティを追加。Projectに日付を指定して祝日かを返すメソッドを追加。
267
+ - 0.0.7 内部のリファクタリング(キャッシュして処理改善)
268
+ - 0.0.6 README.md(このファイル)を更新。Project#getTaskRows で、条件に合致するTaskRowを返すメソッドを追加
269
+ - 0.0.5 初回リリース(絶賛開発中)
270
+
271
+
272
+ ## 🔧 Logger 設定のカスタマイズ
273
+
274
+ このライブラリは `pino` を使ってログを出力しています。
275
+ ログ出力レベルやフォーマットを変更したい場合は、``config/default.json`` を作成して設定を記述してください。
276
+
277
+
278
+ ```json
279
+ {
280
+ "evmtools-node-logger": {
281
+ "level": "warn",
282
+ "moduleLogLevels": {
283
+ "main": "info"
284
+ },
285
+ "transport": {
286
+ "target": "pino-pretty",
287
+ "options": {
288
+ "translateTime": "SYS:standard",
289
+ "ignore": "id,hostname",
290
+ "levelFirst": true
291
+ }
292
+ }
293
+ }
294
+ }
295
+ ```
296
+
297
+
298
+ ```
299
+ "level": "warn", // 全体のログレベルを指定
300
+ "moduleLogLevels": // ソースごとにlevelを変えたい場合、この中に記述
301
+ "transport": // pino のtransport設定などを記述
302
+ "target": "pino-pretty", // この場合は npm install --save-dev pino-pretty すること
303
+ ```
304
+
305
+
306
+
307
+ ***
306
308
  _This README was generated by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_