agkan 1.0.0
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.ja.md +1127 -0
- package/README.md +1140 -0
- package/bin/agkan +2 -0
- package/dist/cli/commands/block/add.d.ts +6 -0
- package/dist/cli/commands/block/add.d.ts.map +1 -0
- package/dist/cli/commands/block/add.js +135 -0
- package/dist/cli/commands/block/add.js.map +1 -0
- package/dist/cli/commands/block/list.d.ts +6 -0
- package/dist/cli/commands/block/list.d.ts.map +1 -0
- package/dist/cli/commands/block/list.js +120 -0
- package/dist/cli/commands/block/list.js.map +1 -0
- package/dist/cli/commands/block/remove.d.ts +6 -0
- package/dist/cli/commands/block/remove.d.ts.map +1 -0
- package/dist/cli/commands/block/remove.js +117 -0
- package/dist/cli/commands/block/remove.js.map +1 -0
- package/dist/cli/commands/meta/delete.d.ts +6 -0
- package/dist/cli/commands/meta/delete.d.ts.map +1 -0
- package/dist/cli/commands/meta/delete.js +67 -0
- package/dist/cli/commands/meta/delete.js.map +1 -0
- package/dist/cli/commands/meta/get.d.ts +6 -0
- package/dist/cli/commands/meta/get.d.ts.map +1 -0
- package/dist/cli/commands/meta/get.js +71 -0
- package/dist/cli/commands/meta/get.js.map +1 -0
- package/dist/cli/commands/meta/list.d.ts +6 -0
- package/dist/cli/commands/meta/list.d.ts.map +1 -0
- package/dist/cli/commands/meta/list.js +69 -0
- package/dist/cli/commands/meta/list.js.map +1 -0
- package/dist/cli/commands/meta/set.d.ts +6 -0
- package/dist/cli/commands/meta/set.d.ts.map +1 -0
- package/dist/cli/commands/meta/set.js +85 -0
- package/dist/cli/commands/meta/set.js.map +1 -0
- package/dist/cli/commands/tag/add.d.ts +6 -0
- package/dist/cli/commands/tag/add.d.ts.map +1 -0
- package/dist/cli/commands/tag/add.js +99 -0
- package/dist/cli/commands/tag/add.js.map +1 -0
- package/dist/cli/commands/tag/attach.d.ts +6 -0
- package/dist/cli/commands/tag/attach.d.ts.map +1 -0
- package/dist/cli/commands/tag/attach.js +119 -0
- package/dist/cli/commands/tag/attach.js.map +1 -0
- package/dist/cli/commands/tag/delete.d.ts +6 -0
- package/dist/cli/commands/tag/delete.d.ts.map +1 -0
- package/dist/cli/commands/tag/delete.js +93 -0
- package/dist/cli/commands/tag/delete.js.map +1 -0
- package/dist/cli/commands/tag/detach.d.ts +6 -0
- package/dist/cli/commands/tag/detach.d.ts.map +1 -0
- package/dist/cli/commands/tag/detach.js +118 -0
- package/dist/cli/commands/tag/detach.js.map +1 -0
- package/dist/cli/commands/tag/list.d.ts +6 -0
- package/dist/cli/commands/tag/list.d.ts.map +1 -0
- package/dist/cli/commands/tag/list.js +80 -0
- package/dist/cli/commands/tag/list.js.map +1 -0
- package/dist/cli/commands/tag/show.d.ts +6 -0
- package/dist/cli/commands/tag/show.d.ts.map +1 -0
- package/dist/cli/commands/tag/show.js +88 -0
- package/dist/cli/commands/tag/show.js.map +1 -0
- package/dist/cli/commands/task/add-helpers.d.ts +17 -0
- package/dist/cli/commands/task/add-helpers.d.ts.map +1 -0
- package/dist/cli/commands/task/add-helpers.js +122 -0
- package/dist/cli/commands/task/add-helpers.js.map +1 -0
- package/dist/cli/commands/task/add.d.ts +6 -0
- package/dist/cli/commands/task/add.d.ts.map +1 -0
- package/dist/cli/commands/task/add.js +140 -0
- package/dist/cli/commands/task/add.js.map +1 -0
- package/dist/cli/commands/task/count.d.ts +6 -0
- package/dist/cli/commands/task/count.d.ts.map +1 -0
- package/dist/cli/commands/task/count.js +97 -0
- package/dist/cli/commands/task/count.js.map +1 -0
- package/dist/cli/commands/task/delete.d.ts +6 -0
- package/dist/cli/commands/task/delete.d.ts.map +1 -0
- package/dist/cli/commands/task/delete.js +59 -0
- package/dist/cli/commands/task/delete.js.map +1 -0
- package/dist/cli/commands/task/find.d.ts +7 -0
- package/dist/cli/commands/task/find.d.ts.map +1 -0
- package/dist/cli/commands/task/find.js +118 -0
- package/dist/cli/commands/task/find.js.map +1 -0
- package/dist/cli/commands/task/get.d.ts +6 -0
- package/dist/cli/commands/task/get.d.ts.map +1 -0
- package/dist/cli/commands/task/get.js +196 -0
- package/dist/cli/commands/task/get.js.map +1 -0
- package/dist/cli/commands/task/list.d.ts +6 -0
- package/dist/cli/commands/task/list.d.ts.map +1 -0
- package/dist/cli/commands/task/list.js +301 -0
- package/dist/cli/commands/task/list.js.map +1 -0
- package/dist/cli/commands/task/update-parent.d.ts +6 -0
- package/dist/cli/commands/task/update-parent.d.ts.map +1 -0
- package/dist/cli/commands/task/update-parent.js +123 -0
- package/dist/cli/commands/task/update-parent.js.map +1 -0
- package/dist/cli/commands/task/update.d.ts +6 -0
- package/dist/cli/commands/task/update.d.ts.map +1 -0
- package/dist/cli/commands/task/update.js +96 -0
- package/dist/cli/commands/task/update.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +68 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/array-utils.d.ts +15 -0
- package/dist/cli/utils/array-utils.d.ts.map +1 -0
- package/dist/cli/utils/array-utils.js +20 -0
- package/dist/cli/utils/array-utils.js.map +1 -0
- package/dist/cli/utils/error-handler.d.ts +35 -0
- package/dist/cli/utils/error-handler.d.ts.map +1 -0
- package/dist/cli/utils/error-handler.js +84 -0
- package/dist/cli/utils/error-handler.js.map +1 -0
- package/dist/cli/utils/output-formatter.d.ts +34 -0
- package/dist/cli/utils/output-formatter.d.ts.map +1 -0
- package/dist/cli/utils/output-formatter.js +44 -0
- package/dist/cli/utils/output-formatter.js.map +1 -0
- package/dist/cli/utils/response-formatter.d.ts +19 -0
- package/dist/cli/utils/response-formatter.d.ts.map +1 -0
- package/dist/cli/utils/response-formatter.js +43 -0
- package/dist/cli/utils/response-formatter.js.map +1 -0
- package/dist/cli/utils/validators.d.ts +23 -0
- package/dist/cli/utils/validators.d.ts.map +1 -0
- package/dist/cli/utils/validators.js +47 -0
- package/dist/cli/utils/validators.js.map +1 -0
- package/dist/db/config.d.ts +27 -0
- package/dist/db/config.d.ts.map +1 -0
- package/dist/db/config.js +116 -0
- package/dist/db/config.js.map +1 -0
- package/dist/db/connection.d.ts +24 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +62 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/reset.d.ts +8 -0
- package/dist/db/reset.d.ts.map +1 -0
- package/dist/db/reset.js +33 -0
- package/dist/db/reset.js.map +1 -0
- package/dist/db/schema.d.ts +6 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +134 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/models/Attachment.d.ts +25 -0
- package/dist/models/Attachment.d.ts.map +1 -0
- package/dist/models/Attachment.js +7 -0
- package/dist/models/Attachment.js.map +1 -0
- package/dist/models/Tag.d.ts +24 -0
- package/dist/models/Tag.d.ts.map +1 -0
- package/dist/models/Tag.js +3 -0
- package/dist/models/Tag.js.map +1 -0
- package/dist/models/Task.d.ts +55 -0
- package/dist/models/Task.d.ts.map +1 -0
- package/dist/models/Task.js +7 -0
- package/dist/models/Task.js.map +1 -0
- package/dist/models/TaskBlock.d.ts +11 -0
- package/dist/models/TaskBlock.d.ts.map +1 -0
- package/dist/models/TaskBlock.js +3 -0
- package/dist/models/TaskBlock.js.map +1 -0
- package/dist/models/TaskMetadata.d.ts +30 -0
- package/dist/models/TaskMetadata.d.ts.map +1 -0
- package/dist/models/TaskMetadata.js +3 -0
- package/dist/models/TaskMetadata.js.map +1 -0
- package/dist/models/TaskTag.d.ts +11 -0
- package/dist/models/TaskTag.d.ts.map +1 -0
- package/dist/models/TaskTag.js +3 -0
- package/dist/models/TaskTag.js.map +1 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +7 -0
- package/dist/models/index.js.map +1 -0
- package/dist/services/AttachmentService.d.ts +62 -0
- package/dist/services/AttachmentService.d.ts.map +1 -0
- package/dist/services/AttachmentService.js +95 -0
- package/dist/services/AttachmentService.js.map +1 -0
- package/dist/services/FileService.d.ts +31 -0
- package/dist/services/FileService.d.ts.map +1 -0
- package/dist/services/FileService.js +77 -0
- package/dist/services/FileService.js.map +1 -0
- package/dist/services/MetadataService.d.ts +49 -0
- package/dist/services/MetadataService.d.ts.map +1 -0
- package/dist/services/MetadataService.js +126 -0
- package/dist/services/MetadataService.js.map +1 -0
- package/dist/services/TagService.d.ts +49 -0
- package/dist/services/TagService.d.ts.map +1 -0
- package/dist/services/TagService.js +127 -0
- package/dist/services/TagService.js.map +1 -0
- package/dist/services/TaskBlockService.d.ts +49 -0
- package/dist/services/TaskBlockService.d.ts.map +1 -0
- package/dist/services/TaskBlockService.js +118 -0
- package/dist/services/TaskBlockService.js.map +1 -0
- package/dist/services/TaskService.d.ts +89 -0
- package/dist/services/TaskService.d.ts.map +1 -0
- package/dist/services/TaskService.js +285 -0
- package/dist/services/TaskService.js.map +1 -0
- package/dist/services/TaskTagService.d.ts +66 -0
- package/dist/services/TaskTagService.d.ts.map +1 -0
- package/dist/services/TaskTagService.js +171 -0
- package/dist/services/TaskTagService.js.map +1 -0
- package/dist/services/index.d.ts +11 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +20 -0
- package/dist/services/index.js.map +1 -0
- package/dist/utils/cycle-detector.d.ts +14 -0
- package/dist/utils/cycle-detector.d.ts.map +1 -0
- package/dist/utils/cycle-detector.js +32 -0
- package/dist/utils/cycle-detector.js.map +1 -0
- package/dist/utils/format.d.ts +13 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +29 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/input-validators.d.ts +32 -0
- package/dist/utils/input-validators.d.ts.map +1 -0
- package/dist/utils/input-validators.js +108 -0
- package/dist/utils/input-validators.js.map +1 -0
- package/dist/utils/security.d.ts +11 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +29 -0
- package/dist/utils/security.js.map +1 -0
- package/package.json +70 -0
package/README.ja.md
ADDED
|
@@ -0,0 +1,1127 @@
|
|
|
1
|
+
# agkan
|
|
2
|
+
|
|
3
|
+
[](https://github.com/gendosu/agkan/actions/workflows/test.yml)
|
|
4
|
+
[](https://github.com/gendosu/agkan/actions/workflows/quality.yml)
|
|
5
|
+
|
|
6
|
+
TypeScriptで実装された軽量なCLIタスク管理ツールです。エージェント(AIアシスタント)との協働作業に最適化されています。
|
|
7
|
+
|
|
8
|
+
## 特徴
|
|
9
|
+
|
|
10
|
+
- **シンプルなCLI**: 直感的なコマンドラインインターフェース
|
|
11
|
+
- **SQLiteベース**: ローカルでの高速データ管理
|
|
12
|
+
- **カンバン形式**: 6つのステータスでタスクを管理(backlog, ready, in_progress, review, done, closed)
|
|
13
|
+
- **柔軟な入力**: コマンドライン引数またはMarkdownファイルからタスクを作成
|
|
14
|
+
- **フィルタリング**: ステータスや作成者でタスクを絞り込み
|
|
15
|
+
- **色分け表示**: ステータスごとに見やすい色分け表示
|
|
16
|
+
- **親子関係**: タスクの階層構造を管理(ツリー表示対応)
|
|
17
|
+
- **ブロック関係**: タスク間の依存関係を管理(循環参照検出機能付き)
|
|
18
|
+
- **タグ機能**: タスクにタグを付けて分類・検索が可能
|
|
19
|
+
|
|
20
|
+
## インストール
|
|
21
|
+
|
|
22
|
+
### 前提条件
|
|
23
|
+
|
|
24
|
+
- Node.js 18以上
|
|
25
|
+
- npm
|
|
26
|
+
|
|
27
|
+
### npmからインストール(推奨)
|
|
28
|
+
|
|
29
|
+
グローバルコマンドとしてインストール:
|
|
30
|
+
```bash
|
|
31
|
+
npm install -g agkan
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
これで `agkan` コマンドがシステム全体で使用可能になります。
|
|
35
|
+
|
|
36
|
+
### GitHubからインストール
|
|
37
|
+
|
|
38
|
+
リポジトリから直接インストール:
|
|
39
|
+
```bash
|
|
40
|
+
npm install -g https://github.com/gendosu/agkan.git
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 設定
|
|
44
|
+
|
|
45
|
+
### データベースの保存場所
|
|
46
|
+
|
|
47
|
+
agkanは、データベースの保存場所を設定ファイルでカスタマイズできます。
|
|
48
|
+
|
|
49
|
+
#### 設定ファイル: `.agkan.yml`
|
|
50
|
+
|
|
51
|
+
プロジェクトのルートディレクトリに`.agkan.yml`ファイルを作成することで、データベースの保存場所を指定できます。
|
|
52
|
+
|
|
53
|
+
**設定例:**
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
# データベースファイルのパス
|
|
57
|
+
path: ./.agkan/data.db
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
#### パスの指定方法
|
|
61
|
+
|
|
62
|
+
- **相対パス**: カレントディレクトリからの相対パスとして解決されます
|
|
63
|
+
```yaml
|
|
64
|
+
path: ./data/kanban.db
|
|
65
|
+
path: ./.agkan/data.db
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- **絶対パス**: そのままのパスが使用されます
|
|
69
|
+
```yaml
|
|
70
|
+
path: /home/user/.config/agkan/data.db
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### 環境変数による設定
|
|
74
|
+
|
|
75
|
+
agkanは `AGENT_KANBAN_DB_PATH` 環境変数によるデータベースの場所指定をサポートしています。CI/CD環境や複数環境の管理に特に有用です。
|
|
76
|
+
|
|
77
|
+
**環境変数の設定例:**
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# カスタムデータベースパスを使用
|
|
81
|
+
export AGENT_KANBAN_DB_PATH=/path/to/your/database.db
|
|
82
|
+
agkan task list
|
|
83
|
+
|
|
84
|
+
# 絶対パスを使用
|
|
85
|
+
export AGENT_KANBAN_DB_PATH=/home/user/.config/agkan/data.db
|
|
86
|
+
|
|
87
|
+
# 相対パスを使用
|
|
88
|
+
export AGENT_KANBAN_DB_PATH=./custom/location/data.db
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**優先順位:**
|
|
92
|
+
|
|
93
|
+
データベースパスは以下の優先順位で解決されます:
|
|
94
|
+
|
|
95
|
+
**通常モード (`NODE_ENV` が `test` でない場合):**
|
|
96
|
+
1. **環境変数**(最高優先): `AGENT_KANBAN_DB_PATH`
|
|
97
|
+
2. **設定ファイル**(フォールバック): `.agkan.yml` の `path` フィールド
|
|
98
|
+
3. **デフォルトパス**(最低優先): `.agkan/data.db`
|
|
99
|
+
|
|
100
|
+
**テストモード (`NODE_ENV=test` の場合):**
|
|
101
|
+
1. **環境変数**(最高優先): `AGENT_KANBAN_DB_PATH`
|
|
102
|
+
2. **設定ファイル**(フォールバック): `.agkan-test.yml` の `path` フィールド
|
|
103
|
+
3. **デフォルトパス**(最低優先): `.agkan-test/data.db`
|
|
104
|
+
|
|
105
|
+
**テストモードについて:**
|
|
106
|
+
|
|
107
|
+
テストモード(`NODE_ENV=test`)では、テストデータと本番データを自動的に分離します:
|
|
108
|
+
|
|
109
|
+
- 別の設定ファイルを使用: `.agkan.yml` の代わりに `.agkan-test.yml`
|
|
110
|
+
- 別のデフォルトディレクトリを使用: `.agkan/` の代わりに `.agkan-test/`
|
|
111
|
+
- テストモードでも環境変数が最高優先になります
|
|
112
|
+
|
|
113
|
+
**使用例:**
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# CI/CDパイプライン(一時DBを使用)
|
|
117
|
+
export AGENT_KANBAN_DB_PATH=/tmp/ci-test-db.db
|
|
118
|
+
agkan task list
|
|
119
|
+
|
|
120
|
+
# 複数環境の管理
|
|
121
|
+
export AGENT_KANBAN_DB_PATH=./dev/data.db # 開発環境
|
|
122
|
+
export AGENT_KANBAN_DB_PATH=./staging/data.db # ステージング環境
|
|
123
|
+
|
|
124
|
+
# テストの実行
|
|
125
|
+
NODE_ENV=test npm test
|
|
126
|
+
# デフォルトで .agkan-test/data.db を使用
|
|
127
|
+
|
|
128
|
+
# カスタムテストDBで実行
|
|
129
|
+
NODE_ENV=test AGENT_KANBAN_DB_PATH=/tmp/test.db npm test
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### デフォルトの動作
|
|
133
|
+
|
|
134
|
+
`.agkan.yml`ファイルが存在せず、環境変数も設定されていない場合、データベースは以下の場所に作成されます:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
<カレントディレクトリ>/.agkan/data.db
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
テストモード(`NODE_ENV=test`)の場合のデフォルト:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
<カレントディレクトリ>/.agkan-test/data.db
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### プロジェクトごとの管理
|
|
147
|
+
|
|
148
|
+
プロジェクトごとに異なるタスク管理を行いたい場合は、各プロジェクトのルートに`.agkan.yml`を配置してください:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# プロジェクトA
|
|
152
|
+
cd /path/to/projectA
|
|
153
|
+
cat > .agkan.yml << EOF
|
|
154
|
+
path: ./.agkan/data.db
|
|
155
|
+
EOF
|
|
156
|
+
|
|
157
|
+
# プロジェクトB
|
|
158
|
+
cd /path/to/projectB
|
|
159
|
+
cat > .agkan.yml << EOF
|
|
160
|
+
path: ./.agkan/data.db
|
|
161
|
+
EOF
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
これにより、各プロジェクトで独立したタスク管理が可能になります。
|
|
165
|
+
|
|
166
|
+
## 使用方法
|
|
167
|
+
|
|
168
|
+
### タスクの作成
|
|
169
|
+
|
|
170
|
+
基本的なタスク作成:
|
|
171
|
+
```bash
|
|
172
|
+
agkan task add "タスクのタイトル" "タスクの説明"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
オプション付きでタスク作成:
|
|
176
|
+
```bash
|
|
177
|
+
agkan task add "ログイン機能の実装" "ユーザー認証システムを実装" \
|
|
178
|
+
--status ready \
|
|
179
|
+
--author "developer-name"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
親タスクを指定してタスク作成:
|
|
183
|
+
```bash
|
|
184
|
+
agkan task add "子タスク" "詳細な作業項目" --parent 1
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Markdownファイルからタスク作成:
|
|
188
|
+
```bash
|
|
189
|
+
agkan task add "設計書レビュー" --file ./design-doc.md --status backlog
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### タスク一覧の表示
|
|
193
|
+
|
|
194
|
+
全タスクを表示:
|
|
195
|
+
```bash
|
|
196
|
+
agkan task list
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
ツリー形式で表示(親子関係を含む):
|
|
200
|
+
```bash
|
|
201
|
+
agkan task list --tree
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
ルートタスクのみ表示(親を持たないタスク):
|
|
205
|
+
```bash
|
|
206
|
+
agkan task list --root-only
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
ステータスでフィルタリング:
|
|
210
|
+
```bash
|
|
211
|
+
agkan task list --status in_progress
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
作成者でフィルタリング:
|
|
215
|
+
```bash
|
|
216
|
+
agkan task list --author "developer-name"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
複合フィルター:
|
|
220
|
+
```bash
|
|
221
|
+
agkan task list --status ready --author "developer-name"
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
タグでフィルタリング:
|
|
225
|
+
```bash
|
|
226
|
+
agkan task list --tag "frontend"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### タスクの検索
|
|
230
|
+
|
|
231
|
+
キーワードでタスクを検索(タイトルと本文を対象):
|
|
232
|
+
```bash
|
|
233
|
+
agkan task find "検索キーワード"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
完了済みタスクも含めて検索:
|
|
237
|
+
```bash
|
|
238
|
+
agkan task find "検索キーワード" --all
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
注: デフォルトでは、`done`と`closed`のタスクは検索結果から除外されます。
|
|
242
|
+
|
|
243
|
+
### タスク詳細の取得
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
agkan task get 1
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### タスクの更新
|
|
250
|
+
|
|
251
|
+
ステータスを変更:
|
|
252
|
+
```bash
|
|
253
|
+
agkan task update 1 status done
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
タイトルを変更:
|
|
257
|
+
```bash
|
|
258
|
+
agkan task update 1 title "新しいタイトル"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
本文を変更:
|
|
262
|
+
```bash
|
|
263
|
+
agkan task update 1 body "新しい説明文"
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
作成者を変更:
|
|
267
|
+
```bash
|
|
268
|
+
agkan task update 1 author "new-author"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### 親子関係の管理
|
|
272
|
+
|
|
273
|
+
親タスクの更新:
|
|
274
|
+
```bash
|
|
275
|
+
# タスク2の親をタスク1に設定
|
|
276
|
+
agkan task update-parent 2 1
|
|
277
|
+
|
|
278
|
+
# タスク2の親を解除(孤立化)
|
|
279
|
+
agkan task update-parent 2 null
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
注意事項:
|
|
283
|
+
- 親タスクを削除すると、子タスクの親参照は自動的に解除されます(孤立化)
|
|
284
|
+
- 循環参照は自動的に検出され、エラーとなります
|
|
285
|
+
|
|
286
|
+
### ブロック関係の管理
|
|
287
|
+
|
|
288
|
+
ブロック関係の追加(タスク1がタスク2をブロック):
|
|
289
|
+
```bash
|
|
290
|
+
agkan task block add 1 2
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
ブロック関係の削除:
|
|
294
|
+
```bash
|
|
295
|
+
agkan task block remove 1 2
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
ブロック関係の一覧表示:
|
|
299
|
+
```bash
|
|
300
|
+
# タスク1に関連するブロック関係を表示
|
|
301
|
+
agkan task block list 1
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
注意事項:
|
|
305
|
+
- 循環参照は自動的に検出され、エラーとなります
|
|
306
|
+
- ブロック関係はタスク削除時に自動的に削除されます(CASCADE DELETE)
|
|
307
|
+
|
|
308
|
+
### タスクの削除
|
|
309
|
+
|
|
310
|
+
タスクを削除:
|
|
311
|
+
```bash
|
|
312
|
+
agkan task delete 1
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### タグ管理
|
|
316
|
+
|
|
317
|
+
タグを作成:
|
|
318
|
+
```bash
|
|
319
|
+
agkan task tag add "frontend"
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
タグ一覧を表示:
|
|
323
|
+
```bash
|
|
324
|
+
agkan task tag list
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
タグを削除:
|
|
328
|
+
```bash
|
|
329
|
+
agkan task tag delete "frontend"
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### タスクへのタグ付け
|
|
333
|
+
|
|
334
|
+
タスクにタグを付与:
|
|
335
|
+
```bash
|
|
336
|
+
agkan task tag attach 1 "frontend"
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
タスクからタグを削除:
|
|
340
|
+
```bash
|
|
341
|
+
agkan task tag detach 1 "frontend"
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
タスクに付けられたタグを表示:
|
|
345
|
+
```bash
|
|
346
|
+
agkan task tag show 1
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### メタデータの管理
|
|
350
|
+
|
|
351
|
+
メタデータを設定:
|
|
352
|
+
```bash
|
|
353
|
+
agkan task meta set 1 priority high
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
メタデータを取得:
|
|
357
|
+
```bash
|
|
358
|
+
agkan task meta get 1 priority
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
メタデータ一覧を表示:
|
|
362
|
+
```bash
|
|
363
|
+
agkan task meta list 1
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
メタデータを削除:
|
|
367
|
+
```bash
|
|
368
|
+
agkan task meta delete 1 priority
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
#### 優先度 (priority)
|
|
372
|
+
|
|
373
|
+
タスクの優先度は `priority` キーで管理します:
|
|
374
|
+
|
|
375
|
+
| 値 | 意味 |
|
|
376
|
+
|-----|------|
|
|
377
|
+
| `critical` | 即時対応が必要。ブロッカーとなっている問題 |
|
|
378
|
+
| `high` | 優先して着手すべきタスク |
|
|
379
|
+
| `medium` | 通常の優先度(デフォルト) |
|
|
380
|
+
| `low` | 余裕があれば対応するタスク |
|
|
381
|
+
|
|
382
|
+
### タスクのカウント
|
|
383
|
+
|
|
384
|
+
全ステータスのタスク数を表示:
|
|
385
|
+
```bash
|
|
386
|
+
agkan task count
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
特定のステータスのタスク数を表示:
|
|
390
|
+
```bash
|
|
391
|
+
agkan task count --status in_progress
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
スクリプト用の出力(数値のみ):
|
|
395
|
+
```bash
|
|
396
|
+
agkan task count -s in_progress -q
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### ヘルプの表示
|
|
400
|
+
|
|
401
|
+
コマンド一覧:
|
|
402
|
+
```bash
|
|
403
|
+
agkan --help
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
タスクコマンドのヘルプ:
|
|
407
|
+
```bash
|
|
408
|
+
agkan task --help
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
個別コマンドのヘルプ:
|
|
412
|
+
```bash
|
|
413
|
+
agkan task add --help
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## JSON出力フォーマット
|
|
417
|
+
|
|
418
|
+
agkanは9つのデータ取得・表示コマンドで、機械可読なJSON出力をサポートしています。`--json`フラグを追加することで、人間が読みやすいテキストの代わりに構造化されたデータを出力できます。
|
|
419
|
+
|
|
420
|
+
### 対応コマンド
|
|
421
|
+
|
|
422
|
+
以下のコマンドがJSON出力をサポートしています:
|
|
423
|
+
|
|
424
|
+
- `task add` - 新しいタスクを作成
|
|
425
|
+
- `task list` - タスク一覧を表示(フィルタリング付き)
|
|
426
|
+
- `task get` - タスク詳細を取得
|
|
427
|
+
- `task find` - キーワードでタスクを検索
|
|
428
|
+
- `task count` - ステータス別のタスク数をカウント
|
|
429
|
+
- `task update-parent` - 親子関係を更新
|
|
430
|
+
- `task block list` - ブロック関係を一覧表示
|
|
431
|
+
- `task tag list` - 全タグをタスク数と共に一覧表示
|
|
432
|
+
- `task tag show` - 特定のタスクのタグを表示
|
|
433
|
+
- `task meta list` - タスクのメタデータ一覧を表示
|
|
434
|
+
|
|
435
|
+
### 出力構造
|
|
436
|
+
|
|
437
|
+
すべてのJSONレスポンスは以下のパターンに従います:
|
|
438
|
+
|
|
439
|
+
**成功レスポンス**には以下が含まれます:
|
|
440
|
+
- 操作固有のデータ(task、tasksの配列、counts など)
|
|
441
|
+
- 関連データ(parent、blockedBy、blocking、tags など)
|
|
442
|
+
- 書き込み操作の場合はオプションで`success: true`フィールド
|
|
443
|
+
|
|
444
|
+
**エラーレスポンス**は以下のフォーマットに従います:
|
|
445
|
+
```json
|
|
446
|
+
{
|
|
447
|
+
"success": false,
|
|
448
|
+
"error": {
|
|
449
|
+
"message": "エラーの説明"
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### 一般的な使用例
|
|
455
|
+
|
|
456
|
+
**1. スクリプティングと自動化**
|
|
457
|
+
```bash
|
|
458
|
+
# CI/CDパイプライン用のタスク数を取得
|
|
459
|
+
TASK_COUNT=$(agkan task count --status backlog --json | jq '.counts.backlog')
|
|
460
|
+
|
|
461
|
+
# 処理用にタスクIDを抽出
|
|
462
|
+
agkan task list --status ready --json | jq -r '.tasks[].id'
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
**2. 他ツールとの統合**
|
|
466
|
+
```bash
|
|
467
|
+
# タスクを外部システムにエクスポート
|
|
468
|
+
agkan task list --json | jq '.tasks' > tasks.json
|
|
469
|
+
|
|
470
|
+
# ブロック関係を処理
|
|
471
|
+
agkan task block list 1 --json | jq '.blockedBy[].title'
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
**3. 検証とテスト**
|
|
475
|
+
```bash
|
|
476
|
+
# タスク作成を検証
|
|
477
|
+
RESULT=$(agkan task add "Test" --json)
|
|
478
|
+
echo $RESULT | jq -e '.success == true' && echo "Success"
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
JSON出力フォーマット:
|
|
482
|
+
```bash
|
|
483
|
+
agkan task add "Fix bug in login" --json
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
```json
|
|
487
|
+
{
|
|
488
|
+
"success": true,
|
|
489
|
+
"task": {
|
|
490
|
+
"id": 1,
|
|
491
|
+
"title": "Fix bug in login",
|
|
492
|
+
"status": "backlog",
|
|
493
|
+
"body": null,
|
|
494
|
+
"author": null,
|
|
495
|
+
"parent_id": null,
|
|
496
|
+
"created_at": "2026-02-15T00:00:00.000Z",
|
|
497
|
+
"updated_at": "2026-02-15T00:00:00.000Z"
|
|
498
|
+
},
|
|
499
|
+
"parent": null,
|
|
500
|
+
"blockedBy": [],
|
|
501
|
+
"blocking": []
|
|
502
|
+
}
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
JSON出力フォーマット:
|
|
506
|
+
```bash
|
|
507
|
+
agkan task list --json
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
```json
|
|
511
|
+
{
|
|
512
|
+
"tasks": [
|
|
513
|
+
{
|
|
514
|
+
"id": 1,
|
|
515
|
+
"title": "Implement login feature",
|
|
516
|
+
"status": "in_progress",
|
|
517
|
+
"body": "Implement user authentication system",
|
|
518
|
+
"author": "developer-name",
|
|
519
|
+
"parent_id": null,
|
|
520
|
+
"created_at": "2026-02-15T00:00:00.000Z",
|
|
521
|
+
"updated_at": "2026-02-15T00:00:00.000Z"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"id": 2,
|
|
525
|
+
"title": "Design review",
|
|
526
|
+
"status": "backlog",
|
|
527
|
+
"body": null,
|
|
528
|
+
"author": null,
|
|
529
|
+
"parent_id": null,
|
|
530
|
+
"created_at": "2026-02-15T00:00:00.000Z",
|
|
531
|
+
"updated_at": "2026-02-15T00:00:00.000Z"
|
|
532
|
+
}
|
|
533
|
+
]
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
JSON出力フォーマット:
|
|
538
|
+
```bash
|
|
539
|
+
agkan task find "login" --json
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
```json
|
|
543
|
+
{
|
|
544
|
+
"tasks": [
|
|
545
|
+
{
|
|
546
|
+
"id": 1,
|
|
547
|
+
"title": "Implement login feature",
|
|
548
|
+
"status": "in_progress",
|
|
549
|
+
"body": "Implement user authentication system",
|
|
550
|
+
"author": "developer-name",
|
|
551
|
+
"parent_id": null,
|
|
552
|
+
"created_at": "2026-02-15T00:00:00.000Z",
|
|
553
|
+
"updated_at": "2026-02-15T00:00:00.000Z"
|
|
554
|
+
}
|
|
555
|
+
]
|
|
556
|
+
}
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
JSON出力フォーマット:
|
|
560
|
+
```bash
|
|
561
|
+
agkan task get 1 --json
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
```json
|
|
565
|
+
{
|
|
566
|
+
"task": {
|
|
567
|
+
"id": 1,
|
|
568
|
+
"title": "Implement login feature",
|
|
569
|
+
"status": "in_progress",
|
|
570
|
+
"body": "Implement user authentication system",
|
|
571
|
+
"author": "developer-name",
|
|
572
|
+
"parent_id": null,
|
|
573
|
+
"created_at": "2026-02-15T00:00:00.000Z",
|
|
574
|
+
"updated_at": "2026-02-15T00:00:00.000Z"
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
JSON出力フォーマット:
|
|
580
|
+
```bash
|
|
581
|
+
agkan task update-parent 2 1 --json
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
```json
|
|
585
|
+
{
|
|
586
|
+
"success": true,
|
|
587
|
+
"task": {
|
|
588
|
+
"id": 2,
|
|
589
|
+
"title": "Child Task",
|
|
590
|
+
"status": "backlog",
|
|
591
|
+
"body": null,
|
|
592
|
+
"author": null,
|
|
593
|
+
"parent_id": 1,
|
|
594
|
+
"created_at": "2026-02-15T00:00:00.000Z",
|
|
595
|
+
"updated_at": "2026-02-15T00:00:00.000Z"
|
|
596
|
+
},
|
|
597
|
+
"parent": {
|
|
598
|
+
"id": 1,
|
|
599
|
+
"title": "Parent Task",
|
|
600
|
+
"status": "backlog",
|
|
601
|
+
"body": null,
|
|
602
|
+
"author": null,
|
|
603
|
+
"parent_id": null,
|
|
604
|
+
"created_at": "2026-02-15T00:00:00.000Z",
|
|
605
|
+
"updated_at": "2026-02-15T00:00:00.000Z"
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
JSON出力フォーマット:
|
|
611
|
+
```bash
|
|
612
|
+
agkan task block list 2 --json
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
```json
|
|
616
|
+
{
|
|
617
|
+
"task": {
|
|
618
|
+
"id": 2,
|
|
619
|
+
"title": "API implementation",
|
|
620
|
+
"status": "backlog"
|
|
621
|
+
},
|
|
622
|
+
"blockedBy": [
|
|
623
|
+
{
|
|
624
|
+
"id": 1,
|
|
625
|
+
"title": "Database design",
|
|
626
|
+
"status": "in_progress"
|
|
627
|
+
}
|
|
628
|
+
],
|
|
629
|
+
"blocking": [
|
|
630
|
+
{
|
|
631
|
+
"id": 3,
|
|
632
|
+
"title": "Frontend implementation",
|
|
633
|
+
"status": "backlog"
|
|
634
|
+
}
|
|
635
|
+
]
|
|
636
|
+
}
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
全ステータスのJSON出力フォーマット:
|
|
640
|
+
```bash
|
|
641
|
+
agkan task count --json
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
```json
|
|
645
|
+
{
|
|
646
|
+
"total": 10,
|
|
647
|
+
"counts": {
|
|
648
|
+
"backlog": 3,
|
|
649
|
+
"ready": 2,
|
|
650
|
+
"in_progress": 4,
|
|
651
|
+
"done": 1,
|
|
652
|
+
"closed": 0
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
特定ステータスのJSON出力フォーマット:
|
|
658
|
+
```bash
|
|
659
|
+
agkan task count --status in_progress --json
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
```json
|
|
663
|
+
{
|
|
664
|
+
"status": "in_progress",
|
|
665
|
+
"count": 4
|
|
666
|
+
}
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
JSON出力フォーマット:
|
|
670
|
+
```bash
|
|
671
|
+
agkan task tag list --json
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
```json
|
|
675
|
+
{
|
|
676
|
+
"totalCount": 2,
|
|
677
|
+
"tags": [
|
|
678
|
+
{
|
|
679
|
+
"id": 1,
|
|
680
|
+
"name": "frontend",
|
|
681
|
+
"taskCount": 3,
|
|
682
|
+
"created_at": "2026-02-15T00:00:00.000Z"
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
"id": 2,
|
|
686
|
+
"name": "backend",
|
|
687
|
+
"taskCount": 1,
|
|
688
|
+
"created_at": "2026-02-15T00:00:00.000Z"
|
|
689
|
+
}
|
|
690
|
+
]
|
|
691
|
+
}
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
JSON出力フォーマット:
|
|
695
|
+
```bash
|
|
696
|
+
agkan task tag show 1 --json
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
```json
|
|
700
|
+
{
|
|
701
|
+
"task": {
|
|
702
|
+
"id": 1,
|
|
703
|
+
"title": "Implement login screen",
|
|
704
|
+
"status": "in_progress"
|
|
705
|
+
},
|
|
706
|
+
"tags": [
|
|
707
|
+
{
|
|
708
|
+
"id": 1,
|
|
709
|
+
"name": "frontend",
|
|
710
|
+
"created_at": "2026-02-15T00:00:00.000Z"
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
"id": 3,
|
|
714
|
+
"name": "urgent",
|
|
715
|
+
"created_at": "2026-02-15T00:00:00.000Z"
|
|
716
|
+
}
|
|
717
|
+
]
|
|
718
|
+
}
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
## 使用例
|
|
722
|
+
|
|
723
|
+
### 親子関係を使った階層的なタスク管理
|
|
724
|
+
|
|
725
|
+
プロジェクトを親タスク、個別の作業を子タスクとして管理する例:
|
|
726
|
+
|
|
727
|
+
```bash
|
|
728
|
+
# 親タスクを作成
|
|
729
|
+
agkan task add "Webサイトのリニューアル"
|
|
730
|
+
# 出力: Task created with ID: 1
|
|
731
|
+
|
|
732
|
+
# 子タスクを作成
|
|
733
|
+
agkan task add "デザインカンプ作成" --parent 1
|
|
734
|
+
agkan task add "フロントエンド実装" --parent 1
|
|
735
|
+
agkan task add "バックエンド実装" --parent 1
|
|
736
|
+
|
|
737
|
+
# ツリー形式で表示
|
|
738
|
+
agkan task list --tree
|
|
739
|
+
# 出力:
|
|
740
|
+
# 1 [backlog] Webサイトのリニューアル
|
|
741
|
+
# ├─ 2 [backlog] デザインカンプ作成
|
|
742
|
+
# ├─ 3 [backlog] フロントエンド実装
|
|
743
|
+
# └─ 4 [backlog] バックエンド実装
|
|
744
|
+
|
|
745
|
+
# タスク詳細を表示(親情報を含む)
|
|
746
|
+
agkan task get 2
|
|
747
|
+
# 出力:
|
|
748
|
+
# ID: 2
|
|
749
|
+
# Title: デザインカンプ作成
|
|
750
|
+
# Parent ID: 1
|
|
751
|
+
# ...
|
|
752
|
+
|
|
753
|
+
# 親を変更
|
|
754
|
+
agkan task add "UI/UX改善"
|
|
755
|
+
# 出力: Task created with ID: 5
|
|
756
|
+
agkan task update-parent 2 5
|
|
757
|
+
|
|
758
|
+
# 親を解除(孤立化)
|
|
759
|
+
agkan task update-parent 2 null
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
### ブロック関係を使った依存関係の管理
|
|
763
|
+
|
|
764
|
+
タスク間の依存関係を明示的に管理する例:
|
|
765
|
+
|
|
766
|
+
```bash
|
|
767
|
+
# タスクを作成
|
|
768
|
+
agkan task add "データベース設計"
|
|
769
|
+
# 出力: Task created with ID: 1
|
|
770
|
+
|
|
771
|
+
agkan task add "API実装"
|
|
772
|
+
# 出力: Task created with ID: 2
|
|
773
|
+
|
|
774
|
+
agkan task add "フロントエンド実装"
|
|
775
|
+
# 出力: Task created with ID: 3
|
|
776
|
+
|
|
777
|
+
# ブロック関係を設定(1がデータベース設計、2がAPI実装、3がフロントエンド実装)
|
|
778
|
+
# データベース設計がAPI実装をブロック
|
|
779
|
+
agkan task block add 1 2
|
|
780
|
+
|
|
781
|
+
# API実装がフロントエンド実装をブロック
|
|
782
|
+
agkan task block add 2 3
|
|
783
|
+
|
|
784
|
+
# ブロック関係を確認
|
|
785
|
+
agkan task block list 1
|
|
786
|
+
# 出力:
|
|
787
|
+
# Task 1 blocks:
|
|
788
|
+
# - Task 2 (API実装)
|
|
789
|
+
# Task 1 is blocked by:
|
|
790
|
+
# (none)
|
|
791
|
+
|
|
792
|
+
agkan task block list 2
|
|
793
|
+
# 出力:
|
|
794
|
+
# Task 2 blocks:
|
|
795
|
+
# - Task 3 (フロントエンド実装)
|
|
796
|
+
# Task 2 is blocked by:
|
|
797
|
+
# - Task 1 (データベース設計)
|
|
798
|
+
|
|
799
|
+
# 循環参照を試みる(エラーになる)
|
|
800
|
+
agkan task block add 3 1
|
|
801
|
+
# 出力: Error: Circular reference detected
|
|
802
|
+
|
|
803
|
+
# ブロック関係を削除
|
|
804
|
+
agkan task block remove 1 2
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
### タグを使ったタスク管理
|
|
808
|
+
|
|
809
|
+
タスクにタグを付けて分類する例:
|
|
810
|
+
|
|
811
|
+
```bash
|
|
812
|
+
# タグを作成
|
|
813
|
+
agkan task tag add "frontend"
|
|
814
|
+
agkan task tag add "backend"
|
|
815
|
+
agkan task tag add "urgent"
|
|
816
|
+
|
|
817
|
+
# タスクを作成してタグを付与
|
|
818
|
+
agkan task add "ログイン画面の実装"
|
|
819
|
+
# 出力: Task created with ID: 1
|
|
820
|
+
|
|
821
|
+
agkan task tag attach 1 "frontend"
|
|
822
|
+
agkan task tag attach 1 "urgent"
|
|
823
|
+
|
|
824
|
+
agkan task add "API開発"
|
|
825
|
+
# 出力: Task created with ID: 2
|
|
826
|
+
|
|
827
|
+
agkan task tag attach 2 "backend"
|
|
828
|
+
|
|
829
|
+
# タグでフィルタリング
|
|
830
|
+
agkan task list --tag "frontend"
|
|
831
|
+
# 出力:
|
|
832
|
+
# 1 [backlog] ログイン画面の実装 (tags: frontend, urgent)
|
|
833
|
+
|
|
834
|
+
# タスクのタグを確認
|
|
835
|
+
agkan task tag show 1
|
|
836
|
+
# 出力:
|
|
837
|
+
# Tags for task 1:
|
|
838
|
+
# - frontend
|
|
839
|
+
# - urgent
|
|
840
|
+
|
|
841
|
+
# タグを削除
|
|
842
|
+
agkan task tag detach 1 "urgent"
|
|
843
|
+
|
|
844
|
+
# タグ自体を削除(関連するすべてのタスクから削除される)
|
|
845
|
+
agkan task tag delete "urgent"
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
## タスクステータス
|
|
849
|
+
|
|
850
|
+
- **backlog**: 未着手のタスク(グレー表示)
|
|
851
|
+
- **ready**: 着手可能なタスク(青色表示)
|
|
852
|
+
- **in_progress**: 作業中のタスク(黄色表示)
|
|
853
|
+
- **review**: レビュー中のタスク(シアン表示)
|
|
854
|
+
- **done**: 完了したタスク(緑色表示)
|
|
855
|
+
- **closed**: クローズされたタスク(マゼンタ表示)
|
|
856
|
+
|
|
857
|
+
## 実装予定機能
|
|
858
|
+
|
|
859
|
+
### タスクの添付ファイル
|
|
860
|
+
|
|
861
|
+
タスクへのファイル添付機能は現在開発中です。この機能により、ユーザーはタスクにファイルを添付し、より良いコンテキストとドキュメントを提供できるようになります。
|
|
862
|
+
|
|
863
|
+
**予定されているCLIコマンド:**
|
|
864
|
+
- `agkan task attach add <task-id> <file-path>` - タスクにファイルを添付
|
|
865
|
+
- `agkan task attach list <task-id>` - タスクのすべての添付ファイルを一覧表示
|
|
866
|
+
- `agkan task attach delete <attachment-id>` - タスクから添付ファイルを削除
|
|
867
|
+
|
|
868
|
+
実装予定機能の詳細については、[docs/planned-features.md](docs/planned-features.md)を参照してください。
|
|
869
|
+
|
|
870
|
+
## 技術スタック
|
|
871
|
+
|
|
872
|
+
- **言語**: TypeScript 5.x
|
|
873
|
+
- **CLI フレームワーク**: Commander.js
|
|
874
|
+
- **データベース**: SQLite3 (better-sqlite3)
|
|
875
|
+
- **ターミナル表示**: Chalk
|
|
876
|
+
- **ビルドツール**: TypeScript Compiler
|
|
877
|
+
|
|
878
|
+
## プロジェクト構成
|
|
879
|
+
|
|
880
|
+
```
|
|
881
|
+
agkan/
|
|
882
|
+
├── bin/
|
|
883
|
+
│ └── agkan # CLIエントリーポイント
|
|
884
|
+
├── src/
|
|
885
|
+
│ ├── cli/
|
|
886
|
+
│ │ ├── commands/
|
|
887
|
+
│ │ │ ├── block/ # ブロック関係コマンド
|
|
888
|
+
│ │ │ │ ├── add.ts
|
|
889
|
+
│ │ │ │ ├── list.ts
|
|
890
|
+
│ │ │ │ └── remove.ts
|
|
891
|
+
│ │ │ ├── meta/ # メタデータコマンド
|
|
892
|
+
│ │ │ │ ├── delete.ts
|
|
893
|
+
│ │ │ │ ├── get.ts
|
|
894
|
+
│ │ │ │ ├── list.ts
|
|
895
|
+
│ │ │ │ └── set.ts
|
|
896
|
+
│ │ │ ├── tag/ # タグコマンド
|
|
897
|
+
│ │ │ │ ├── add.ts
|
|
898
|
+
│ │ │ │ ├── attach.ts
|
|
899
|
+
│ │ │ │ ├── delete.ts
|
|
900
|
+
│ │ │ │ ├── detach.ts
|
|
901
|
+
│ │ │ │ ├── list.ts
|
|
902
|
+
│ │ │ │ └── show.ts
|
|
903
|
+
│ │ │ └── task/ # タスクコマンド
|
|
904
|
+
│ │ │ ├── add.ts
|
|
905
|
+
│ │ │ ├── count.ts
|
|
906
|
+
│ │ │ ├── delete.ts
|
|
907
|
+
│ │ │ ├── find.ts
|
|
908
|
+
│ │ │ ├── get.ts
|
|
909
|
+
│ │ │ ├── list.ts
|
|
910
|
+
│ │ │ ├── update-parent.ts
|
|
911
|
+
│ │ │ └── update.ts
|
|
912
|
+
│ │ ├── utils/ # CLIユーティリティ
|
|
913
|
+
│ │ └── index.ts # CLIエントリー・コマンド登録
|
|
914
|
+
│ ├── db/
|
|
915
|
+
│ │ ├── config.ts # DB設定
|
|
916
|
+
│ │ ├── connection.ts # データベース接続管理
|
|
917
|
+
│ │ ├── schema.ts # スキーマ定義・マイグレーション
|
|
918
|
+
│ │ └── reset.ts # テスト用DBリセット
|
|
919
|
+
│ ├── models/
|
|
920
|
+
│ │ ├── Task.ts # タスクモデル
|
|
921
|
+
│ │ ├── Tag.ts # タグモデル
|
|
922
|
+
│ │ ├── TaskBlock.ts # ブロック関係モデル
|
|
923
|
+
│ │ ├── TaskMetadata.ts # メタデータモデル
|
|
924
|
+
│ │ ├── TaskTag.ts # タスク-タグ関連モデル
|
|
925
|
+
│ │ └── index.ts
|
|
926
|
+
│ ├── services/
|
|
927
|
+
│ │ ├── TaskService.ts # タスク管理ビジネスロジック
|
|
928
|
+
│ │ ├── TagService.ts # タグ管理ビジネスロジック
|
|
929
|
+
│ │ ├── TaskBlockService.ts # ブロック関係管理
|
|
930
|
+
│ │ ├── TaskTagService.ts # タスク-タグ関連管理
|
|
931
|
+
│ │ ├── MetadataService.ts # メタデータ管理
|
|
932
|
+
│ │ ├── FileService.ts # ファイル読み込み
|
|
933
|
+
│ │ └── index.ts
|
|
934
|
+
│ └── utils/
|
|
935
|
+
│ ├── format.ts # フォーマットユーティリティ
|
|
936
|
+
│ ├── cycle-detector.ts # 循環参照検出
|
|
937
|
+
│ ├── input-validators.ts # 入力バリデーション
|
|
938
|
+
│ └── security.ts # セキュリティユーティリティ
|
|
939
|
+
├── dist/ # ビルド出力ディレクトリ
|
|
940
|
+
├── package.json
|
|
941
|
+
├── tsconfig.json
|
|
942
|
+
└── README.md
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
## データベーススキーマ
|
|
946
|
+
|
|
947
|
+
### tasks テーブル
|
|
948
|
+
|
|
949
|
+
| カラム名 | 型 | 説明 |
|
|
950
|
+
|---------|-----|------|
|
|
951
|
+
| id | INTEGER | 主キー(自動採番) |
|
|
952
|
+
| title | TEXT | タスクタイトル(必須) |
|
|
953
|
+
| body | TEXT | タスク本文 |
|
|
954
|
+
| status | TEXT | ステータス(backlog, ready, in_progress, review, done, closed) |
|
|
955
|
+
| author | TEXT | 作成者 |
|
|
956
|
+
| parent_id | INTEGER | 親タスクID(外部キー、NULL可) |
|
|
957
|
+
| created_at | TEXT | 作成日時(ISO 8601形式) |
|
|
958
|
+
| updated_at | TEXT | 更新日時(ISO 8601形式) |
|
|
959
|
+
|
|
960
|
+
注意事項:
|
|
961
|
+
- `parent_id`は親タスクが削除されると自動的にNULLに設定されます(ON DELETE SET NULL)
|
|
962
|
+
|
|
963
|
+
### attachments テーブル
|
|
964
|
+
|
|
965
|
+
| カラム名 | 型 | 説明 |
|
|
966
|
+
|---------|-----|------|
|
|
967
|
+
| id | INTEGER | 主キー(自動採番) |
|
|
968
|
+
| task_id | INTEGER | タスクID(外部キー) |
|
|
969
|
+
| file_path | TEXT | ファイルパス(必須) |
|
|
970
|
+
| created_at | TEXT | 作成日時(ISO 8601形式) |
|
|
971
|
+
|
|
972
|
+
### task_blocks テーブル
|
|
973
|
+
|
|
974
|
+
| カラム名 | 型 | 説明 |
|
|
975
|
+
|---------|-----|------|
|
|
976
|
+
| id | INTEGER | 主キー(自動採番) |
|
|
977
|
+
| blocker_task_id | INTEGER | ブロックするタスクID(外部キー) |
|
|
978
|
+
| blocked_task_id | INTEGER | ブロックされるタスクID(外部キー) |
|
|
979
|
+
| created_at | TEXT | 作成日時(ISO 8601形式) |
|
|
980
|
+
|
|
981
|
+
注意事項:
|
|
982
|
+
- `blocker_task_id`と`blocked_task_id`の組み合わせはユニーク制約があります
|
|
983
|
+
- いずれかのタスクが削除されるとブロック関係も自動的に削除されます(ON DELETE CASCADE)
|
|
984
|
+
|
|
985
|
+
### tags テーブル
|
|
986
|
+
|
|
987
|
+
| カラム名 | 型 | 説明 |
|
|
988
|
+
|---------|-----|------|
|
|
989
|
+
| id | INTEGER | 主キー(自動採番) |
|
|
990
|
+
| name | TEXT | タグ名(必須、ユニーク) |
|
|
991
|
+
| created_at | TEXT | 作成日時(ISO 8601形式) |
|
|
992
|
+
|
|
993
|
+
### task_tags テーブル
|
|
994
|
+
|
|
995
|
+
| カラム名 | 型 | 説明 |
|
|
996
|
+
|---------|-----|------|
|
|
997
|
+
| id | INTEGER | 主キー(自動採番) |
|
|
998
|
+
| task_id | INTEGER | タスクID(外部キー) |
|
|
999
|
+
| tag_id | INTEGER | タグID(外部キー) |
|
|
1000
|
+
| created_at | TEXT | 作成日時(ISO 8601形式) |
|
|
1001
|
+
|
|
1002
|
+
注意事項:
|
|
1003
|
+
- `task_id`と`tag_id`の組み合わせはユニーク制約があります
|
|
1004
|
+
- タスクまたはタグが削除されると関連付けも自動的に削除されます(ON DELETE CASCADE)
|
|
1005
|
+
|
|
1006
|
+
### task_metadata テーブル
|
|
1007
|
+
|
|
1008
|
+
| カラム名 | 型 | 説明 |
|
|
1009
|
+
|---------|-----|------|
|
|
1010
|
+
| id | INTEGER | 主キー(自動採番) |
|
|
1011
|
+
| task_id | INTEGER | タスクID(外部キー) |
|
|
1012
|
+
| key | TEXT | メタデータのキー |
|
|
1013
|
+
| value | TEXT | メタデータの値 |
|
|
1014
|
+
| created_at | TEXT | 作成日時(ISO 8601形式) |
|
|
1015
|
+
|
|
1016
|
+
注意事項:
|
|
1017
|
+
- `task_id`と`key`の組み合わせはユニーク制約があります
|
|
1018
|
+
- タスクが削除されるとメタデータも自動的に削除されます(ON DELETE CASCADE)
|
|
1019
|
+
|
|
1020
|
+
## 開発
|
|
1021
|
+
|
|
1022
|
+
### 開発者向けセットアップ
|
|
1023
|
+
|
|
1024
|
+
agkan自体の開発に参加したい開発者向けの手順:
|
|
1025
|
+
|
|
1026
|
+
1. リポジトリをクローン:
|
|
1027
|
+
```bash
|
|
1028
|
+
git clone https://github.com/gendosu/agkan.git
|
|
1029
|
+
cd agkan
|
|
1030
|
+
```
|
|
1031
|
+
|
|
1032
|
+
2. 依存パッケージをインストール:
|
|
1033
|
+
```bash
|
|
1034
|
+
npm install
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1037
|
+
3. TypeScriptコードをビルド:
|
|
1038
|
+
```bash
|
|
1039
|
+
npm run build
|
|
1040
|
+
```
|
|
1041
|
+
|
|
1042
|
+
4. グローバルコマンドとして登録:
|
|
1043
|
+
```bash
|
|
1044
|
+
npm link
|
|
1045
|
+
```
|
|
1046
|
+
|
|
1047
|
+
### 開発ガイドライン
|
|
1048
|
+
|
|
1049
|
+
包括的な開発情報については、以下のドキュメントを参照してください:
|
|
1050
|
+
|
|
1051
|
+
- **[TESTING.md](TESTING.md)** - テストガイド、カバレッジ実行、テストパターン
|
|
1052
|
+
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - コントリビューションガイドラインとTDDプラクティス
|
|
1053
|
+
- **[docs/TDD-GUIDE.md](docs/TDD-GUIDE.md)** - 実践例を含むテスト駆動開発ガイド
|
|
1054
|
+
- **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** - プロジェクトアーキテクチャとデザインパターン
|
|
1055
|
+
|
|
1056
|
+
### コード品質
|
|
1057
|
+
|
|
1058
|
+
このプロジェクトではコード品質のためにESLintとPrettierを使用しています:
|
|
1059
|
+
|
|
1060
|
+
```bash
|
|
1061
|
+
npm run lint # コードをチェック
|
|
1062
|
+
npm run lint:fix # 問題を自動修正
|
|
1063
|
+
npm run format # コードをフォーマット
|
|
1064
|
+
npm run check # 全チェックを実行
|
|
1065
|
+
```
|
|
1066
|
+
|
|
1067
|
+
### テスト
|
|
1068
|
+
|
|
1069
|
+
#### ユニットテスト
|
|
1070
|
+
|
|
1071
|
+
Vitestを使用したユニットテストを実行:
|
|
1072
|
+
```bash
|
|
1073
|
+
npm test
|
|
1074
|
+
```
|
|
1075
|
+
|
|
1076
|
+
全てのサービス層とモデル層がテストされています。
|
|
1077
|
+
|
|
1078
|
+
#### E2Eテスト
|
|
1079
|
+
|
|
1080
|
+
実際のCLIコマンドを実行する包括的なE2Eテストを実行:
|
|
1081
|
+
```bash
|
|
1082
|
+
npm run test:e2e
|
|
1083
|
+
```
|
|
1084
|
+
|
|
1085
|
+
E2Eテストは以下の機能をカバーします:
|
|
1086
|
+
- ビルドとユニットテスト
|
|
1087
|
+
- タグ管理機能(作成、一覧、削除、重複チェック)
|
|
1088
|
+
- タグ付与機能(付与、解除、表示、重複チェック)
|
|
1089
|
+
- タグフィルタリング(単一タグ、複数タグ、ステータス組み合わせ)
|
|
1090
|
+
- CASCADE削除(データベース整合性確認)
|
|
1091
|
+
|
|
1092
|
+
テストはローカルのテスト用データベース(`.agkan-test/test-e2e.db`)を使用し、実行後に自動的にクリーンアップされます。
|
|
1093
|
+
|
|
1094
|
+
### ビルド
|
|
1095
|
+
|
|
1096
|
+
```bash
|
|
1097
|
+
npm run build
|
|
1098
|
+
```
|
|
1099
|
+
|
|
1100
|
+
### 開発時の自動ビルド
|
|
1101
|
+
|
|
1102
|
+
```bash
|
|
1103
|
+
npm run dev
|
|
1104
|
+
```
|
|
1105
|
+
|
|
1106
|
+
### TypeScript型チェック
|
|
1107
|
+
|
|
1108
|
+
```bash
|
|
1109
|
+
npx tsc --noEmit
|
|
1110
|
+
```
|
|
1111
|
+
|
|
1112
|
+
### データベースの初期化
|
|
1113
|
+
|
|
1114
|
+
データベースは最初のコマンド実行時に自動的に作成されます。手動で再作成する場合:
|
|
1115
|
+
|
|
1116
|
+
```bash
|
|
1117
|
+
rm -rf data/agkan.db
|
|
1118
|
+
agkan task list # データベースが再作成されます
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
## ライセンス
|
|
1122
|
+
|
|
1123
|
+
ISC
|
|
1124
|
+
|
|
1125
|
+
## 作成者
|
|
1126
|
+
|
|
1127
|
+
Generated with Claude Code
|