kintai 0.1.0__tar.gz
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.
- kintai-0.1.0/.python-version +1 -0
- kintai-0.1.0/CLAUDE.md +38 -0
- kintai-0.1.0/PKG-INFO +336 -0
- kintai-0.1.0/README.md +321 -0
- kintai-0.1.0/kintai.py +1027 -0
- kintai-0.1.0/pyproject.toml +35 -0
- kintai-0.1.0/tests/test_kintai.py +918 -0
- kintai-0.1.0/uv.lock +212 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
kintai-0.1.0/CLAUDE.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Install dependencies
|
|
9
|
+
uv sync
|
|
10
|
+
|
|
11
|
+
# Run the CLI
|
|
12
|
+
uv run kintai <command>
|
|
13
|
+
|
|
14
|
+
# Run all tests
|
|
15
|
+
uv run pytest
|
|
16
|
+
|
|
17
|
+
# Run a single test
|
|
18
|
+
uv run pytest tests/test_kintai.py::test_function_name
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Architecture
|
|
22
|
+
|
|
23
|
+
This is a single-file CLI tool (`kintai.py`) built with Click. All business logic lives in the `KintaiManager` class; Click command handlers are thin wrappers that call into it.
|
|
24
|
+
|
|
25
|
+
**Key classes:**
|
|
26
|
+
- `KintaiManager` — core class managing in-memory records (`self.records: Dict[str, Dict]`) and JSON persistence
|
|
27
|
+
- `ClockResult` — dataclass returned by clock-in/out operations
|
|
28
|
+
|
|
29
|
+
**Data flow:**
|
|
30
|
+
1. `KintaiManager.__init__` loads `~/.kintai/records.json` into `self.records` (dict keyed by `YYYY-MM-DD` date strings)
|
|
31
|
+
2. Commands mutate `self.records` in memory
|
|
32
|
+
3. `save_to_file()` serializes back to JSON
|
|
33
|
+
|
|
34
|
+
**Data directory override:** The data path can be overridden via the `KINTAI_DATA_DIR` environment variable or by passing `data_dir` to `KintaiManager`. Tests use this to avoid touching `~/.kintai`.
|
|
35
|
+
|
|
36
|
+
**Timezone:** All times are stored as timezone-aware `datetime` objects in JST (`Asia/Tokyo`). Use `KintaiManager.JST` constant throughout.
|
|
37
|
+
|
|
38
|
+
**Cross-midnight shift detection:** `_find_open_check_in_record()` looks back up to `SEARCH_DAYS_BACK` (3) days to find an open check-in without a matching check-out, enabling overnight shifts.
|
kintai-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kintai
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: 勤怠管理CLIツール
|
|
5
|
+
Project-URL: Repository, https://github.com/taison-tsukada/kintai
|
|
6
|
+
Author: TaisonTsukada
|
|
7
|
+
License: MIT
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Requires-Dist: click>=8.0.0
|
|
10
|
+
Requires-Dist: pyperclip>=1.8.0
|
|
11
|
+
Requires-Dist: python-dateutil>=2.8.0
|
|
12
|
+
Requires-Dist: pytz>=2021.3
|
|
13
|
+
Requires-Dist: tabulate>=0.9.0
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
|
|
16
|
+
# 勤怠管理CLIツール開発仕様書
|
|
17
|
+
|
|
18
|
+
## プロジェクト概要
|
|
19
|
+
|
|
20
|
+
Ubuntu環境で動作する個人用勤怠管理CLIツール「kintai」を開発する。このツールは日本時間(JST)での出退勤時刻の記録、修正、月次サマリーの生成機能を提供する。
|
|
21
|
+
|
|
22
|
+
## 技術要件
|
|
23
|
+
|
|
24
|
+
### 実行環境
|
|
25
|
+
- OS: Ubuntu (20.04 LTS以降)
|
|
26
|
+
- 言語: Python 3.10以上
|
|
27
|
+
- パッケージマネージャー: uv
|
|
28
|
+
- タイムゾーン: Asia/Tokyo (JST)
|
|
29
|
+
|
|
30
|
+
### 必要なPythonパッケージ
|
|
31
|
+
依存関係は `pyproject.toml` で管理されています。
|
|
32
|
+
```
|
|
33
|
+
click>=8.0.0 # CLIフレームワーク
|
|
34
|
+
pytz>=2021.3 # タイムゾーン処理
|
|
35
|
+
python-dateutil>=2.8.0 # 日付処理
|
|
36
|
+
tabulate>=0.9.0 # テーブル表示
|
|
37
|
+
pyperclip>=1.8.0 # クリップボード操作
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## ディレクトリ構造
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
kintai/
|
|
44
|
+
├── kintai.py # メインスクリプト
|
|
45
|
+
├── pyproject.toml # プロジェクト設定・依存関係
|
|
46
|
+
├── uv.lock # 依存関係のロックファイル
|
|
47
|
+
├── tests/
|
|
48
|
+
│ └── test_kintai.py # テストファイル
|
|
49
|
+
└── README.md # 使用方法ドキュメント
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
勤怠データは `~/.kintai/records.json` に保存されます。
|
|
53
|
+
|
|
54
|
+
## 機能仕様
|
|
55
|
+
|
|
56
|
+
### 1. 勤怠管理機能
|
|
57
|
+
|
|
58
|
+
#### 1.1 出勤記録 (`kintai in`)
|
|
59
|
+
|
|
60
|
+
**動作仕様:**
|
|
61
|
+
- コマンド実行時の現在時刻(JST)を出勤時刻として記録
|
|
62
|
+
- 既に当日の出勤記録がある場合は警告を表示し、上書き確認を求める
|
|
63
|
+
- 記録形式: `YYYY-MM-DD HH:MM:SS` (24時間表記)
|
|
64
|
+
|
|
65
|
+
**出力例:**
|
|
66
|
+
```
|
|
67
|
+
$ kintai in
|
|
68
|
+
出勤時刻を記録しました: 2025-01-10 09:00:15
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### 1.2 退勤記録 (`kintai out`)
|
|
72
|
+
|
|
73
|
+
**動作仕様:**
|
|
74
|
+
- コマンド実行時の現在時刻(JST)を退勤時刻として記録
|
|
75
|
+
- 当日の出勤記録がない場合はエラーメッセージを表示
|
|
76
|
+
- 日をまたぐ勤務の場合も適切に処理(翌日の退勤として記録)
|
|
77
|
+
- 退勤時に勤務時間を自動計算して表示
|
|
78
|
+
|
|
79
|
+
**出力例:**
|
|
80
|
+
```
|
|
81
|
+
$ kintai out
|
|
82
|
+
退勤時刻を記録しました: 2025-01-10 18:30:45
|
|
83
|
+
本日の勤務時間: 9時間30分30秒
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**日またぎ処理:**
|
|
87
|
+
- 退勤時刻が翌日以降の場合、適切に日付を記録
|
|
88
|
+
- 例: 1月10日 22:00出勤 → 1月11日 07:00退勤 = 9時間勤務
|
|
89
|
+
|
|
90
|
+
### 2. 勤怠時刻修正機能
|
|
91
|
+
|
|
92
|
+
#### 2.1 記録修正 (`kintai edit`)
|
|
93
|
+
|
|
94
|
+
**動作仕様:**
|
|
95
|
+
- 指定した日付の出勤・退勤時刻を修正
|
|
96
|
+
- 対話形式で修正内容を入力
|
|
97
|
+
|
|
98
|
+
**コマンド形式:**
|
|
99
|
+
```bash
|
|
100
|
+
kintai edit --date YYYY-MM-DD [--in HH:MM] [--out HH:MM]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**使用例:**
|
|
104
|
+
```bash
|
|
105
|
+
# 対話形式での修正
|
|
106
|
+
$ kintai edit --date 2025-01-10
|
|
107
|
+
現在の記録:
|
|
108
|
+
出勤: 09:00:15
|
|
109
|
+
退勤: 18:30:45
|
|
110
|
+
新しい出勤時刻 (HH:MM) [変更しない場合はEnter]: 09:30
|
|
111
|
+
新しい退勤時刻 (HH:MM) [変更しない場合はEnter]: 19:00
|
|
112
|
+
記録を更新しました。
|
|
113
|
+
|
|
114
|
+
# 直接指定での修正
|
|
115
|
+
$ kintai edit --date 2025-01-10 --in 09:30 --out 19:00
|
|
116
|
+
記録を更新しました。
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### 2.2 記録削除 (`kintai delete`)
|
|
120
|
+
|
|
121
|
+
**動作仕様:**
|
|
122
|
+
- 指定した日付の勤怠記録を削除
|
|
123
|
+
- 削除前に確認プロンプトを表示
|
|
124
|
+
|
|
125
|
+
**コマンド形式:**
|
|
126
|
+
```bash
|
|
127
|
+
kintai delete --date YYYY-MM-DD
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 3. 月別サマリー機能
|
|
131
|
+
|
|
132
|
+
#### 3.1 月次レポート表示 (`kintai summary`)
|
|
133
|
+
|
|
134
|
+
**動作仕様:**
|
|
135
|
+
- 指定月の勤怠記録を表示
|
|
136
|
+
- 月の総勤務時間を計算
|
|
137
|
+
- デフォルトは現在月を表示
|
|
138
|
+
|
|
139
|
+
**コマンド形式:**
|
|
140
|
+
```bash
|
|
141
|
+
kintai summary [--month YYYY-MM]
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**出力形式(コンソール):**
|
|
145
|
+
```
|
|
146
|
+
2025年1月の勤怠記録
|
|
147
|
+
=====================================
|
|
148
|
+
日付 出勤時刻 退勤時刻 勤務時間
|
|
149
|
+
----------- ---------- ---------- ----------
|
|
150
|
+
2025-01-08 09:00:15 18:30:45 9:30:30
|
|
151
|
+
2025-01-09 08:45:30 19:15:20 10:29:50
|
|
152
|
+
2025-01-10 09:30:00 19:00:00 9:30:00
|
|
153
|
+
=====================================
|
|
154
|
+
総勤務時間: 29時間30分20秒
|
|
155
|
+
勤務日数: 3日
|
|
156
|
+
平均勤務時間: 9時間50分6秒
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### 3.2 クリップボードへのコピー (`kintai summary --copy`)
|
|
160
|
+
|
|
161
|
+
**動作仕様:**
|
|
162
|
+
- 月次レポートをMarkdown形式でクリップボードにコピー
|
|
163
|
+
- コピー成功時にメッセージを表示
|
|
164
|
+
|
|
165
|
+
**Markdown出力形式:**
|
|
166
|
+
```markdown
|
|
167
|
+
# 2025年1月 勤怠記録
|
|
168
|
+
|
|
169
|
+
## 勤務詳細
|
|
170
|
+
|
|
171
|
+
| 日付 | 曜日 | 出勤時刻 | 退勤時刻 | 勤務時間 |
|
|
172
|
+
|------|------|----------|----------|----------|
|
|
173
|
+
| 2025-01-08 | 水 | 09:00:15 | 18:30:45 | 9:30:30 |
|
|
174
|
+
| 2025-01-09 | 木 | 08:45:30 | 19:15:20 | 10:29:50 |
|
|
175
|
+
| 2025-01-10 | 金 | 09:30:00 | 19:00:00 | 9:30:00 |
|
|
176
|
+
|
|
177
|
+
## 月次サマリー
|
|
178
|
+
|
|
179
|
+
- **総勤務時間**: 29時間30分20秒
|
|
180
|
+
- **勤務日数**: 3日
|
|
181
|
+
- **平均勤務時間**: 9時間50分6秒
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 4. その他の機能
|
|
185
|
+
|
|
186
|
+
#### 4.1 現在の状態確認 (`kintai status`)
|
|
187
|
+
|
|
188
|
+
**動作仕様:**
|
|
189
|
+
- 現在の勤務状態(出勤中/退勤済み)を表示
|
|
190
|
+
- 出勤中の場合は経過時間を表示
|
|
191
|
+
|
|
192
|
+
**出力例:**
|
|
193
|
+
```
|
|
194
|
+
$ kintai status
|
|
195
|
+
状態: 出勤中
|
|
196
|
+
出勤時刻: 2025-01-10 09:00:15
|
|
197
|
+
経過時間: 3時間45分23秒
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
#### 4.2 ヘルプ表示 (`kintai --help`)
|
|
201
|
+
|
|
202
|
+
**動作仕様:**
|
|
203
|
+
- 使用可能なコマンドと説明を表示
|
|
204
|
+
|
|
205
|
+
## データ保存仕様
|
|
206
|
+
|
|
207
|
+
### ファイル形式
|
|
208
|
+
- JSON形式でローカルに保存
|
|
209
|
+
- ファイルパス: `~/.kintai/records.json`
|
|
210
|
+
|
|
211
|
+
### データ構造
|
|
212
|
+
```json
|
|
213
|
+
{
|
|
214
|
+
"records": [
|
|
215
|
+
{
|
|
216
|
+
"date": "2025-01-10",
|
|
217
|
+
"check_in": "2025-01-10T09:00:15+09:00",
|
|
218
|
+
"check_out": "2025-01-10T18:30:45+09:00",
|
|
219
|
+
"duration_seconds": 34230
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"version": "1.0.0"
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## エラーハンドリング
|
|
227
|
+
|
|
228
|
+
### 想定されるエラーケース
|
|
229
|
+
|
|
230
|
+
1. **重複出勤エラー**
|
|
231
|
+
- メッセージ: "既に本日の出勤記録があります。上書きしますか? [y/N]"
|
|
232
|
+
|
|
233
|
+
2. **出勤記録なしエラー**
|
|
234
|
+
- メッセージ: "本日の出勤記録がありません。先に 'kintai in' を実行してください。"
|
|
235
|
+
|
|
236
|
+
3. **無効な日付形式エラー**
|
|
237
|
+
- メッセージ: "日付の形式が正しくありません。YYYY-MM-DD形式で入力してください。"
|
|
238
|
+
|
|
239
|
+
4. **データファイル破損エラー**
|
|
240
|
+
- メッセージ: "データファイルが破損しています。バックアップから復元するか、新規作成してください。"
|
|
241
|
+
|
|
242
|
+
## インストール手順
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# 1. リポジトリのクローンまたはファイルの配置
|
|
246
|
+
git clone [repository-url] kintai
|
|
247
|
+
cd kintai
|
|
248
|
+
|
|
249
|
+
# 2. uvのインストール(未インストールの場合)
|
|
250
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
251
|
+
|
|
252
|
+
# 3. 依存パッケージのインストール
|
|
253
|
+
uv sync
|
|
254
|
+
|
|
255
|
+
# 4. 動作確認
|
|
256
|
+
uv run kintai --help
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 実行方法
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# uvを通じて実行
|
|
263
|
+
uv run kintai in
|
|
264
|
+
uv run kintai out
|
|
265
|
+
uv run kintai status
|
|
266
|
+
uv run kintai summary
|
|
267
|
+
|
|
268
|
+
# テストの実行
|
|
269
|
+
uv run pytest
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### エイリアス設定(オプション)
|
|
273
|
+
|
|
274
|
+
頻繁に使用する場合は、シェルにエイリアスを設定すると便利です。
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
# ~/.bashrc または ~/.zshrc に追加
|
|
278
|
+
alias kintai='uv run --directory /path/to/kintai kintai'
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## テストケース
|
|
282
|
+
|
|
283
|
+
### 基本機能テスト
|
|
284
|
+
|
|
285
|
+
1. **通常の出退勤記録**
|
|
286
|
+
```bash
|
|
287
|
+
kintai in # 09:00に実行
|
|
288
|
+
kintai out # 18:00に実行
|
|
289
|
+
# 期待値: 9時間の勤務時間が記録される
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
2. **日またぎ勤務**
|
|
293
|
+
```bash
|
|
294
|
+
kintai in # 22:00に実行
|
|
295
|
+
kintai out # 翌日07:00に実行
|
|
296
|
+
# 期待値: 9時間の勤務時間が記録される
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
3. **記録修正**
|
|
300
|
+
```bash
|
|
301
|
+
kintai edit --date 2025-01-10 --in 09:30 --out 19:00
|
|
302
|
+
# 期待値: 指定日の記録が更新される
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
4. **月次サマリー**
|
|
306
|
+
```bash
|
|
307
|
+
kintai summary --month 2025-01
|
|
308
|
+
# 期待値: 1月の全勤怠記録と統計が表示される
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## 拡張機能案(将来実装)
|
|
312
|
+
|
|
313
|
+
1. **休憩時間の記録**
|
|
314
|
+
- `kintai break start` / `kintai break end`
|
|
315
|
+
|
|
316
|
+
2. **CSV/Excel出力**
|
|
317
|
+
- `kintai export --format csv --month 2025-01`
|
|
318
|
+
|
|
319
|
+
3. **勤務パターン設定**
|
|
320
|
+
- 定時設定、フレックスタイム設定
|
|
321
|
+
|
|
322
|
+
4. **統計分析機能**
|
|
323
|
+
- 週次レポート、残業時間分析
|
|
324
|
+
|
|
325
|
+
5. **バックアップ/リストア機能**
|
|
326
|
+
- `kintai backup` / `kintai restore`
|
|
327
|
+
|
|
328
|
+
## 注意事項
|
|
329
|
+
|
|
330
|
+
- タイムゾーンは必ず日本時間(JST)で処理すること
|
|
331
|
+
- データファイルは定期的にバックアップを推奨
|
|
332
|
+
- クリップボード操作にはX11環境が必要(WSL2の場合は追加設定が必要)
|
|
333
|
+
|
|
334
|
+
## ライセンス
|
|
335
|
+
|
|
336
|
+
MIT License(個人利用を想定)
|
kintai-0.1.0/README.md
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# 勤怠管理CLIツール開発仕様書
|
|
2
|
+
|
|
3
|
+
## プロジェクト概要
|
|
4
|
+
|
|
5
|
+
Ubuntu環境で動作する個人用勤怠管理CLIツール「kintai」を開発する。このツールは日本時間(JST)での出退勤時刻の記録、修正、月次サマリーの生成機能を提供する。
|
|
6
|
+
|
|
7
|
+
## 技術要件
|
|
8
|
+
|
|
9
|
+
### 実行環境
|
|
10
|
+
- OS: Ubuntu (20.04 LTS以降)
|
|
11
|
+
- 言語: Python 3.10以上
|
|
12
|
+
- パッケージマネージャー: uv
|
|
13
|
+
- タイムゾーン: Asia/Tokyo (JST)
|
|
14
|
+
|
|
15
|
+
### 必要なPythonパッケージ
|
|
16
|
+
依存関係は `pyproject.toml` で管理されています。
|
|
17
|
+
```
|
|
18
|
+
click>=8.0.0 # CLIフレームワーク
|
|
19
|
+
pytz>=2021.3 # タイムゾーン処理
|
|
20
|
+
python-dateutil>=2.8.0 # 日付処理
|
|
21
|
+
tabulate>=0.9.0 # テーブル表示
|
|
22
|
+
pyperclip>=1.8.0 # クリップボード操作
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## ディレクトリ構造
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
kintai/
|
|
29
|
+
├── kintai.py # メインスクリプト
|
|
30
|
+
├── pyproject.toml # プロジェクト設定・依存関係
|
|
31
|
+
├── uv.lock # 依存関係のロックファイル
|
|
32
|
+
├── tests/
|
|
33
|
+
│ └── test_kintai.py # テストファイル
|
|
34
|
+
└── README.md # 使用方法ドキュメント
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
勤怠データは `~/.kintai/records.json` に保存されます。
|
|
38
|
+
|
|
39
|
+
## 機能仕様
|
|
40
|
+
|
|
41
|
+
### 1. 勤怠管理機能
|
|
42
|
+
|
|
43
|
+
#### 1.1 出勤記録 (`kintai in`)
|
|
44
|
+
|
|
45
|
+
**動作仕様:**
|
|
46
|
+
- コマンド実行時の現在時刻(JST)を出勤時刻として記録
|
|
47
|
+
- 既に当日の出勤記録がある場合は警告を表示し、上書き確認を求める
|
|
48
|
+
- 記録形式: `YYYY-MM-DD HH:MM:SS` (24時間表記)
|
|
49
|
+
|
|
50
|
+
**出力例:**
|
|
51
|
+
```
|
|
52
|
+
$ kintai in
|
|
53
|
+
出勤時刻を記録しました: 2025-01-10 09:00:15
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
#### 1.2 退勤記録 (`kintai out`)
|
|
57
|
+
|
|
58
|
+
**動作仕様:**
|
|
59
|
+
- コマンド実行時の現在時刻(JST)を退勤時刻として記録
|
|
60
|
+
- 当日の出勤記録がない場合はエラーメッセージを表示
|
|
61
|
+
- 日をまたぐ勤務の場合も適切に処理(翌日の退勤として記録)
|
|
62
|
+
- 退勤時に勤務時間を自動計算して表示
|
|
63
|
+
|
|
64
|
+
**出力例:**
|
|
65
|
+
```
|
|
66
|
+
$ kintai out
|
|
67
|
+
退勤時刻を記録しました: 2025-01-10 18:30:45
|
|
68
|
+
本日の勤務時間: 9時間30分30秒
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**日またぎ処理:**
|
|
72
|
+
- 退勤時刻が翌日以降の場合、適切に日付を記録
|
|
73
|
+
- 例: 1月10日 22:00出勤 → 1月11日 07:00退勤 = 9時間勤務
|
|
74
|
+
|
|
75
|
+
### 2. 勤怠時刻修正機能
|
|
76
|
+
|
|
77
|
+
#### 2.1 記録修正 (`kintai edit`)
|
|
78
|
+
|
|
79
|
+
**動作仕様:**
|
|
80
|
+
- 指定した日付の出勤・退勤時刻を修正
|
|
81
|
+
- 対話形式で修正内容を入力
|
|
82
|
+
|
|
83
|
+
**コマンド形式:**
|
|
84
|
+
```bash
|
|
85
|
+
kintai edit --date YYYY-MM-DD [--in HH:MM] [--out HH:MM]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**使用例:**
|
|
89
|
+
```bash
|
|
90
|
+
# 対話形式での修正
|
|
91
|
+
$ kintai edit --date 2025-01-10
|
|
92
|
+
現在の記録:
|
|
93
|
+
出勤: 09:00:15
|
|
94
|
+
退勤: 18:30:45
|
|
95
|
+
新しい出勤時刻 (HH:MM) [変更しない場合はEnter]: 09:30
|
|
96
|
+
新しい退勤時刻 (HH:MM) [変更しない場合はEnter]: 19:00
|
|
97
|
+
記録を更新しました。
|
|
98
|
+
|
|
99
|
+
# 直接指定での修正
|
|
100
|
+
$ kintai edit --date 2025-01-10 --in 09:30 --out 19:00
|
|
101
|
+
記録を更新しました。
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### 2.2 記録削除 (`kintai delete`)
|
|
105
|
+
|
|
106
|
+
**動作仕様:**
|
|
107
|
+
- 指定した日付の勤怠記録を削除
|
|
108
|
+
- 削除前に確認プロンプトを表示
|
|
109
|
+
|
|
110
|
+
**コマンド形式:**
|
|
111
|
+
```bash
|
|
112
|
+
kintai delete --date YYYY-MM-DD
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 3. 月別サマリー機能
|
|
116
|
+
|
|
117
|
+
#### 3.1 月次レポート表示 (`kintai summary`)
|
|
118
|
+
|
|
119
|
+
**動作仕様:**
|
|
120
|
+
- 指定月の勤怠記録を表示
|
|
121
|
+
- 月の総勤務時間を計算
|
|
122
|
+
- デフォルトは現在月を表示
|
|
123
|
+
|
|
124
|
+
**コマンド形式:**
|
|
125
|
+
```bash
|
|
126
|
+
kintai summary [--month YYYY-MM]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**出力形式(コンソール):**
|
|
130
|
+
```
|
|
131
|
+
2025年1月の勤怠記録
|
|
132
|
+
=====================================
|
|
133
|
+
日付 出勤時刻 退勤時刻 勤務時間
|
|
134
|
+
----------- ---------- ---------- ----------
|
|
135
|
+
2025-01-08 09:00:15 18:30:45 9:30:30
|
|
136
|
+
2025-01-09 08:45:30 19:15:20 10:29:50
|
|
137
|
+
2025-01-10 09:30:00 19:00:00 9:30:00
|
|
138
|
+
=====================================
|
|
139
|
+
総勤務時間: 29時間30分20秒
|
|
140
|
+
勤務日数: 3日
|
|
141
|
+
平均勤務時間: 9時間50分6秒
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### 3.2 クリップボードへのコピー (`kintai summary --copy`)
|
|
145
|
+
|
|
146
|
+
**動作仕様:**
|
|
147
|
+
- 月次レポートをMarkdown形式でクリップボードにコピー
|
|
148
|
+
- コピー成功時にメッセージを表示
|
|
149
|
+
|
|
150
|
+
**Markdown出力形式:**
|
|
151
|
+
```markdown
|
|
152
|
+
# 2025年1月 勤怠記録
|
|
153
|
+
|
|
154
|
+
## 勤務詳細
|
|
155
|
+
|
|
156
|
+
| 日付 | 曜日 | 出勤時刻 | 退勤時刻 | 勤務時間 |
|
|
157
|
+
|------|------|----------|----------|----------|
|
|
158
|
+
| 2025-01-08 | 水 | 09:00:15 | 18:30:45 | 9:30:30 |
|
|
159
|
+
| 2025-01-09 | 木 | 08:45:30 | 19:15:20 | 10:29:50 |
|
|
160
|
+
| 2025-01-10 | 金 | 09:30:00 | 19:00:00 | 9:30:00 |
|
|
161
|
+
|
|
162
|
+
## 月次サマリー
|
|
163
|
+
|
|
164
|
+
- **総勤務時間**: 29時間30分20秒
|
|
165
|
+
- **勤務日数**: 3日
|
|
166
|
+
- **平均勤務時間**: 9時間50分6秒
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 4. その他の機能
|
|
170
|
+
|
|
171
|
+
#### 4.1 現在の状態確認 (`kintai status`)
|
|
172
|
+
|
|
173
|
+
**動作仕様:**
|
|
174
|
+
- 現在の勤務状態(出勤中/退勤済み)を表示
|
|
175
|
+
- 出勤中の場合は経過時間を表示
|
|
176
|
+
|
|
177
|
+
**出力例:**
|
|
178
|
+
```
|
|
179
|
+
$ kintai status
|
|
180
|
+
状態: 出勤中
|
|
181
|
+
出勤時刻: 2025-01-10 09:00:15
|
|
182
|
+
経過時間: 3時間45分23秒
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### 4.2 ヘルプ表示 (`kintai --help`)
|
|
186
|
+
|
|
187
|
+
**動作仕様:**
|
|
188
|
+
- 使用可能なコマンドと説明を表示
|
|
189
|
+
|
|
190
|
+
## データ保存仕様
|
|
191
|
+
|
|
192
|
+
### ファイル形式
|
|
193
|
+
- JSON形式でローカルに保存
|
|
194
|
+
- ファイルパス: `~/.kintai/records.json`
|
|
195
|
+
|
|
196
|
+
### データ構造
|
|
197
|
+
```json
|
|
198
|
+
{
|
|
199
|
+
"records": [
|
|
200
|
+
{
|
|
201
|
+
"date": "2025-01-10",
|
|
202
|
+
"check_in": "2025-01-10T09:00:15+09:00",
|
|
203
|
+
"check_out": "2025-01-10T18:30:45+09:00",
|
|
204
|
+
"duration_seconds": 34230
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"version": "1.0.0"
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## エラーハンドリング
|
|
212
|
+
|
|
213
|
+
### 想定されるエラーケース
|
|
214
|
+
|
|
215
|
+
1. **重複出勤エラー**
|
|
216
|
+
- メッセージ: "既に本日の出勤記録があります。上書きしますか? [y/N]"
|
|
217
|
+
|
|
218
|
+
2. **出勤記録なしエラー**
|
|
219
|
+
- メッセージ: "本日の出勤記録がありません。先に 'kintai in' を実行してください。"
|
|
220
|
+
|
|
221
|
+
3. **無効な日付形式エラー**
|
|
222
|
+
- メッセージ: "日付の形式が正しくありません。YYYY-MM-DD形式で入力してください。"
|
|
223
|
+
|
|
224
|
+
4. **データファイル破損エラー**
|
|
225
|
+
- メッセージ: "データファイルが破損しています。バックアップから復元するか、新規作成してください。"
|
|
226
|
+
|
|
227
|
+
## インストール手順
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# 1. リポジトリのクローンまたはファイルの配置
|
|
231
|
+
git clone [repository-url] kintai
|
|
232
|
+
cd kintai
|
|
233
|
+
|
|
234
|
+
# 2. uvのインストール(未インストールの場合)
|
|
235
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
236
|
+
|
|
237
|
+
# 3. 依存パッケージのインストール
|
|
238
|
+
uv sync
|
|
239
|
+
|
|
240
|
+
# 4. 動作確認
|
|
241
|
+
uv run kintai --help
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### 実行方法
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# uvを通じて実行
|
|
248
|
+
uv run kintai in
|
|
249
|
+
uv run kintai out
|
|
250
|
+
uv run kintai status
|
|
251
|
+
uv run kintai summary
|
|
252
|
+
|
|
253
|
+
# テストの実行
|
|
254
|
+
uv run pytest
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### エイリアス設定(オプション)
|
|
258
|
+
|
|
259
|
+
頻繁に使用する場合は、シェルにエイリアスを設定すると便利です。
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# ~/.bashrc または ~/.zshrc に追加
|
|
263
|
+
alias kintai='uv run --directory /path/to/kintai kintai'
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## テストケース
|
|
267
|
+
|
|
268
|
+
### 基本機能テスト
|
|
269
|
+
|
|
270
|
+
1. **通常の出退勤記録**
|
|
271
|
+
```bash
|
|
272
|
+
kintai in # 09:00に実行
|
|
273
|
+
kintai out # 18:00に実行
|
|
274
|
+
# 期待値: 9時間の勤務時間が記録される
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
2. **日またぎ勤務**
|
|
278
|
+
```bash
|
|
279
|
+
kintai in # 22:00に実行
|
|
280
|
+
kintai out # 翌日07:00に実行
|
|
281
|
+
# 期待値: 9時間の勤務時間が記録される
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
3. **記録修正**
|
|
285
|
+
```bash
|
|
286
|
+
kintai edit --date 2025-01-10 --in 09:30 --out 19:00
|
|
287
|
+
# 期待値: 指定日の記録が更新される
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
4. **月次サマリー**
|
|
291
|
+
```bash
|
|
292
|
+
kintai summary --month 2025-01
|
|
293
|
+
# 期待値: 1月の全勤怠記録と統計が表示される
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## 拡張機能案(将来実装)
|
|
297
|
+
|
|
298
|
+
1. **休憩時間の記録**
|
|
299
|
+
- `kintai break start` / `kintai break end`
|
|
300
|
+
|
|
301
|
+
2. **CSV/Excel出力**
|
|
302
|
+
- `kintai export --format csv --month 2025-01`
|
|
303
|
+
|
|
304
|
+
3. **勤務パターン設定**
|
|
305
|
+
- 定時設定、フレックスタイム設定
|
|
306
|
+
|
|
307
|
+
4. **統計分析機能**
|
|
308
|
+
- 週次レポート、残業時間分析
|
|
309
|
+
|
|
310
|
+
5. **バックアップ/リストア機能**
|
|
311
|
+
- `kintai backup` / `kintai restore`
|
|
312
|
+
|
|
313
|
+
## 注意事項
|
|
314
|
+
|
|
315
|
+
- タイムゾーンは必ず日本時間(JST)で処理すること
|
|
316
|
+
- データファイルは定期的にバックアップを推奨
|
|
317
|
+
- クリップボード操作にはX11環境が必要(WSL2の場合は追加設定が必要)
|
|
318
|
+
|
|
319
|
+
## ライセンス
|
|
320
|
+
|
|
321
|
+
MIT License(個人利用を想定)
|