データモデル & ストレージ
SQLiteエンティティ、リレーションシップ、状態の復元方法。
PlanToCodeはすべてのローカル状態にSQLiteを使用します。このドキュメントはスキーマ、エンティティリレーションシップ、アプリ再起動時の状態復元方法について説明します。
SQLite設定
データベースは同時読み書きアクセス用にWALモードを使用します。ファイルはTauriアプリデータディレクトリに保存されます(Linuxでは~/.local/share/plantocode、macOSでは~/Library/Application Support/plantocode)。
スキーママイグレーションはconsolidated_schema.sqlに統合されています。アプリは起動時にスキーマバージョンをチェックし、保留中のマイグレーションを実行します。
コアエンティティ
- sessions:タスク説明、ファイル選択、モデル設定、検索設定、ビデオ/マージプロンプト、履歴インデックスを含むプロジェクトコンテキスト
- background_jobs:プロンプト、レスポンス、トークン、コスト、is_finalizedフラグ、error_messageを含むLLMバックエンド操作
- terminal_sessions:出力ログ、ステータス、プロセス情報を含むPTYセッション
- task_description_history:タスク説明のバージョン履歴
- file_selection_history:ファイル選択のバージョン履歴
- project_system_prompts:プロジェクトごとのプロンプトオーバーライド
- key_value_store:アプリ設定と構成
- error_logs:クライアントサイドエラー追跡
- migrations:タイムスタンプ付きで適用されたデータベースマイグレーションを追跡
- db_diagnostic_logs:データベース診断の問題とエラーを記録
- app_settings:説明付きのアプリケーション設定キーバリューペア
エンティティリレーションシップ図
SQLiteスキーマとリレーションシップの視覚的表現。
Schema details
sessions table
id TEXT PRIMARY KEY
name, project_directory, project_hash
task_description, search_term, model_used
search_selected_files_only INTEGER (0/1)
video_analysis_prompt, merge_instructions
included_files, force_excluded_files (JSON)
task_history_version, file_history_version
task_history_current_index, file_history_current_index
created_at, updated_at (Unix timestamps)
background_jobs table
id TEXT PRIMARY KEY, session_id FK
task_type, status (with CHECK constraint)
prompt TEXT, response TEXT, error_message TEXT
tokens_sent, tokens_received, cache_*_tokens
model_used, actual_cost REAL
metadata JSON, system_prompt_template
is_finalized INTEGER (0/1 flag)
start_time, end_time, server_request_id
terminal_sessions table
id TEXT PRIMARY KEY, job_id FK (optional)
session_id TEXT UNIQUE
status: idle, starting, initializing, running, completed, failed, agent_requires_attention, recovering, disconnected, stuck, restored
process_pid, exit_code
working_directory, environment_vars JSON
output_log TEXT (accumulated PTY output)
last_output_at, started_at, ended_at
migrations table
id INTEGER PRIMARY KEY AUTOINCREMENT
name TEXT NOT NULL
applied_at INTEGER (Unix timestamp)
db_diagnostic_logs table
id INTEGER PRIMARY KEY AUTOINCREMENT
timestamp INTEGER, error_type TEXT
error_message TEXT, additional_info TEXT
app_settings table
key TEXT PRIMARY KEY
value TEXT NOT NULL, description TEXT
created_at, updated_at (Unix timestamps)
エンティティリレーションシップ
エンティティはカスケード削除ルール付きの外部キーでリンクされています:
- sessions → background_jobs:1対多、カスケード削除
- background_jobs → terminal_sessions:job_id経由のオプション1対1リンク
- sessions → task_description_history:バージョン追跡用の1対多
- sessions → file_selection_history:バージョン追跡用の1対多
リポジトリレイヤー
すべてのデータベースアクセスはdesktop/src-tauri/src/db_utils/の型付きリポジトリを通じて行われます:
- background_job_repository/:base.rs、worker.rs、metadata.rs、cleanup.rsでモジュール化
- session_repository.rs:履歴管理付きのセッションCRUD
- terminal_repository.rs:ターミナルセッション永続化と出力ログ
- settings_repository.rs:キーバリュー設定ストレージ
状態の復元
アプリ起動時、状態はSQLiteから復元されます:
アクティブセッションはタスク説明、ファイル選択、モデル設定とともにロードされます。最近のセッションはセッションピッカーで利用可能です。
データ保持
古いデータは設定可能な保持期間に基づいてクリーンアップされます:
セッションとジョブはクリーンアップ前にバックアップ用にエクスポートできます。
Key source files
- desktop/src-tauri/migrations/consolidated_schema.sql - Full schema
- desktop/src-tauri/src/db_utils/mod.rs - Repository exports
- desktop/src-tauri/src/db_utils/background_job_repository/ - Job CRUD (directory with base.rs, worker.rs, metadata.rs, cleanup.rs)
- desktop/src-tauri/src/db_utils/session_repository.rs - Session management
- desktop/src-tauri/src/db_utils/terminal_repository.rs - Terminal persistence
- desktop/src-tauri/src/db_utils/settings_repository.rs - App settings
ジョブ処理を探索
バックグラウンドジョブがこのデータモデルをどのように使用するかを見てみましょう。