99- ** タスク情報DB(tasksテーブル)のみ** を対象とする
1010- メッセージ履歴、要約履歴、ツール実行履歴(JSONLファイル)は対象外
1111
12- ### 1.3 現在のテーブル構造(tasks テーブル)
13- ```
14- uuid TEXT PRIMARY KEY, -- タスクの一意識別子
15- task_source TEXT NOT NULL, -- タスクソース(github/gitlab)
16- owner TEXT NOT NULL, -- リポジトリオーナー
17- repo TEXT NOT NULL, -- リポジトリ名
18- task_type TEXT NOT NULL, -- タスクタイプ(issue/pull_request/merge_request)
19- task_id TEXT NOT NULL, -- タスクID(Issue番号等)
20- status TEXT NOT NULL, -- ステータス(running/completed/failed/stopped)
21- created_at TEXT NOT NULL, -- 作成日時
22- started_at TEXT, -- 開始日時
23- completed_at TEXT, -- 完了日時
24- process_id INTEGER, -- プロセスID
25- hostname TEXT, -- ホスト名
26- llm_provider TEXT, -- LLMプロバイダー
27- model TEXT, -- 使用モデル
28- context_length INTEGER, -- コンテキスト長
29- llm_call_count INTEGER, -- LLM呼び出し回数
30- tool_call_count INTEGER, -- ツール呼び出し回数
31- total_tokens INTEGER, -- 総トークン数
32- compression_count INTEGER, -- 圧縮回数
33- error_message TEXT, -- エラーメッセージ
34- user TEXT -- ユーザー名
35- ```
12+ ### 1.3 TaskKey構造の分析
13+ 現在のTaskKeyは以下の4種類があり、それぞれ異なるフィールドを持つ:
14+
15+ | TaskKey種別 | task_source | task_type | owner | repo | project_id | number |
16+ | ------------| -------------| -----------| -------| ------| ------------| --------|
17+ | GitHubIssueTaskKey | github | issue | ○ | ○ | - | ○ |
18+ | GitHubPullRequestTaskKey | github | pull_request | ○ | ○ | - | ○ |
19+ | GitLabIssueTaskKey | gitlab | issue | - | - | ○ | ○(issue_iid) |
20+ | GitLabMergeRequestTaskKey | gitlab | merge_request | - | - | ○ | ○(mr_iid) |
21+
22+ これらを統一的に扱うため、以下のフィールド構成でtask_keyを分解する:
23+ - ` task_source ` : タスクソース(github/gitlab)
24+ - ` task_type ` : タスクタイプ(issue/pull_request/merge_request)
25+ - ` owner ` : GitHubリポジトリオーナー(GitLabの場合はNULL)
26+ - ` repo ` : GitHubリポジトリ名(GitLabの場合はNULL)
27+ - ` project_id ` : GitLabプロジェクトID(GitHubの場合はNULL)
28+ - ` number ` : タスク番号(GitHub: number、GitLab: issue_iid/mr_iid)
3629
3730---
3831
3932## 2. 詳細設計
4033
4134### 2.1 ファイル構成
42- 1ファイルにTaskモデルとDBアクセスロジックをまとめる :
35+ 1ファイルにDBTaskモデルとDBアクセスロジックをまとめる :
4336
4437```
4538db/
46- └── task_db.py # Taskモデル定義 + DBアクセスロジッククラス
39+ └── task_db.py # DBTaskモデル定義 + TaskDBManagerクラス
4740```
4841
4942### 2.2 task_db.py の設計
5043
51- #### 2.2.1 Task モデル
44+ #### 2.2.1 DBTask モデル
5245SQLAlchemy ORMを使用してtasksテーブルを定義する。
5346
5447** 処理内容** :
5548- SQLAlchemy 2.0スタイルの宣言的ベースクラスを使用する
5649- PostgreSQL用の型定義を行う
57- - インデックスを定義する
50+ - task_key分解フィールドのインデックスを定義する
51+ - ` get_task_key() ` メソッドでTaskKeyオブジェクトを復元する
5852
5953** カラム定義** :
6054| カラム名 | 型 | PostgreSQL型 | 制約 | 説明 |
6155| ---------| -----| -------------| ------| ------|
6256| uuid | String(36) | VARCHAR(36) | PRIMARY KEY | タスク一意識別子 |
63- | task_source | String(50) | VARCHAR(50) | NOT NULL | タスクソース |
64- | owner | String(255) | VARCHAR(255) | NOT NULL | リポジトリオーナー |
65- | repo | String(255) | VARCHAR(255) | NOT NULL | リポジトリ名 |
66- | task_type | String(50) | VARCHAR(50) | NOT NULL | タスクタイプ |
67- | task_id | String(50) | VARCHAR(50) | NOT NULL | タスクID |
57+ | task_source | String(50) | VARCHAR(50) | NOT NULL | タスクソース(github/gitlab) |
58+ | task_type | String(50) | VARCHAR(50) | NOT NULL | タスクタイプ(issue/pull_request/merge_request) |
59+ | owner | String(255) | VARCHAR(255) | NULL可 | GitHubリポジトリオーナー |
60+ | repo | String(255) | VARCHAR(255) | NULL可 | GitHubリポジトリ名 |
61+ | project_id | String(255) | VARCHAR(255) | NULL可 | GitLabプロジェクトID |
62+ | number | Integer | INTEGER | NOT NULL | タスク番号 |
6863| status | String(20) | VARCHAR(20) | NOT NULL | ステータス |
6964| created_at | DateTime | TIMESTAMP WITH TIME ZONE | NOT NULL | 作成日時 |
7065| started_at | DateTime | TIMESTAMP WITH TIME ZONE | - | 開始日時 |
@@ -87,8 +82,14 @@ SQLAlchemy ORMを使用してtasksテーブルを定義する。
8782| ix_tasks_status | status | ステータス別検索の高速化 |
8883| ix_tasks_created_at | created_at | 作成日時順ソートの高速化 |
8984| ix_tasks_user | user | ユーザー別検索の高速化 |
85+ | ix_tasks_task_key | task_source, task_type, owner, repo, project_id, number | TaskKey検索の高速化 |
86+
87+ ** DBTaskモデルのメソッド** :
88+ | メソッド名 | 引数 | 戻り値 | 説明 |
89+ | -----------| ------| --------| ------|
90+ | get_task_key | - | TaskKey | task_key分解フィールドからTaskKeyオブジェクトを復元する |
9091
91- #### 2.2.2 TaskDB クラス
92+ #### 2.2.2 TaskDBManager クラス
9293タスクのDB操作を行うロジッククラスを実装する。
9394
9495** 初期化処理** :
@@ -110,13 +111,10 @@ SQLAlchemy ORMを使用してtasksテーブルを定義する。
110111
111112| メソッド名 | 引数 | 戻り値 | 説明 |
112113| -----------| ------| --------| ------|
113- | create_task | task_data: dict | Task | 新規タスクを作成する |
114- | get_task | uuid: str | Task または None | UUIDでタスクを取得する |
115- | update_task | uuid: str, updates: dict | bool | タスクを更新する |
116- | update_status | uuid: str, status: str, error_message: str (optional) | bool | ステータスを更新する |
117- | update_statistics | uuid: str, llm_calls: int, tool_calls: int, tokens: int, compressions: int | bool | 統計情報を加算更新する |
118- | complete_task | uuid: str | bool | タスクを完了状態に更新する |
119- | fail_task | uuid: str, error_message: str | bool | タスクを失敗状態に更新する |
114+ | create_task | task_data: dict | DBTask | 新規タスクを作成する |
115+ | get_task | uuid: str | DBTask または None | UUIDでタスクを取得する |
116+ | get_task_by_key | task_key: TaskKey | DBTask または None | TaskKeyでタスクを取得する |
117+ | save_task | db_task: DBTask | DBTask | DBTaskオブジェクトを保存(更新)する |
120118
121119** 処理内容** :
122120- セッション管理をコンテキストマネージャーで自動化する
@@ -126,19 +124,19 @@ SQLAlchemy ORMを使用してtasksテーブルを定義する。
126124### 2.3 既存コード修正設計
127125
128126#### 2.3.1 TaskContextManager の修正(context_storage/task_context_manager.py)
129- 現在のSQLite直接操作を、TaskDBクラスを使用したアクセスに変更する 。
127+ 現在のSQLite直接操作を、TaskDBManagerクラスを使用したアクセスに変更する 。
130128
131129** 修正対象メソッド** :
132130| メソッド | 修正内容 |
133131| ---------| ---------|
134- | ` __init__ ` | TaskDBクラスのインスタンスを作成する |
135- | ` _init_database ` | 削除。初期化はTaskDBクラスで行う |
136- | ` _register_or_update_task ` | TaskDB .create_task または TaskDB.update_task を使用する |
137- | ` update_status ` | TaskDB.update_status を使用する |
138- | ` update_statistics ` | TaskDB.update_statistics を使用する |
139- | ` complete ` | TaskDB.complete_task を使用する |
140- | ` stop ` | TaskDB.update_status を使用する |
141- | ` fail ` | TaskDB.fail_task を使用する |
132+ | ` __init__ ` | TaskDBManagerクラスのインスタンスを作成する |
133+ | ` _init_database ` | 削除。初期化はTaskDBManagerクラスで行う |
134+ | ` _register_or_update_task ` | TaskDBManager .create_task または TaskDBManager.save_task を使用する |
135+ | ` update_status ` | DBTaskオブジェクトを取得し、ステータスを変更後、save_taskを使用する |
136+ | ` update_statistics ` | DBTaskオブジェクトを取得し、統計情報を更新後、save_taskを使用する |
137+ | ` complete ` | DBTaskオブジェクトを取得し、完了状態に変更後、save_taskを使用する |
138+ | ` stop ` | DBTaskオブジェクトを取得し、停止状態に変更後、save_taskを使用する |
139+ | ` fail ` | DBTaskオブジェクトを取得し、失敗状態に変更後、save_taskを使用する |
142140
143141### 2.4 設定ファイル設計
144142
@@ -220,7 +218,7 @@ PostgreSQLコンテナを追加する。
220218
221219| テストファイル | 対象 | 内容 |
222220|--------------|------|------|
223- | test_task_db.py | db/task_db.py | TaskDBクラスのテスト |
221+ | test_task_db.py | db/task_db.py | TaskDBManagerクラスのテスト |
224222
225223# ## 5.2 テスト用データベース
226224テスト実行時はテスト用PostgreSQLコンテナを使用する。
@@ -232,7 +230,7 @@ PostgreSQLコンテナを追加する。
232230# ## 6.1 修正対象ファイル
233231| ファイル | 修正内容 |
234232|---------|---------|
235- | context_storage/task_context_manager.py | DB操作をTaskDBクラス経由に変更 |
233+ | context_storage/task_context_manager.py | DB操作をTaskDBManagerクラス経由に変更 |
236234| config.yaml | database セクションを追加 |
237235| docker-compose.yml | postgres サービスを追加 |
238236| pyproject.toml | 依存パッケージを追加 |
@@ -241,7 +239,7 @@ PostgreSQLコンテナを追加する。
241239# ## 6.2 新規作成ファイル
242240| ファイル | 内容 |
243241|---------|------|
244- | db/task_db.py | Taskモデル + TaskDBクラス |
242+ | db/task_db.py | DBTaskモデル + TaskDBManagerクラス |
245243| scripts/create_db.py | DB作成ツール |
246244
247245---
0 commit comments