ドキュメントに戻る
アーキテクチャ

データモデル & ストレージ

SQLiteエンティティ、リレーションシップ、状態の復元方法。

10分 で読めます

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スキーマとリレーションシップの視覚的表現。

データベーススキーマ図
Click to expand
データベーススキーマ図のプレースホルダー。

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

ジョブ処理を探索

バックグラウンドジョブがこのデータモデルをどのように使用するかを見てみましょう。