refactor: タスクデータのキャッシュ機構を実装してDBクエリを削減#285
Draft
Copilot wants to merge 5 commits into
Draft
Conversation
タスクページ開時に大量のINFOログが出力される問題を修正。 データ取得時のログレベルをINFOからDEBUGに変更し、 通常操作では表示されないようにした。 変更点: - logic/repositories/base.py: _gets_by_statement のログをDEBUGに - logic/services/task_service.py: get_all と list_by_status のログをDEBUGに Co-authored-by: snow7y <103980824+snow7y@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix excessive logging on tasks page
fix: タスクページ開時の過剰ログを削減(INFO → DEBUG)
Dec 8, 2025
Member
|
@copilot DEBUG 扱いにするのではなく何度もデータベースに取りに行かないようにしてほしい |
データ取得のログレベル変更ではなく、根本的な解決として キャッシュ機構を実装。これにより、タスクページ開時の DBクエリを大幅に削減。 実装内容: - Controller にタスクデータのキャッシュ(_cached_tasks)を追加 - get_counts() をキャッシュから集計するよう変更(7回のDBクエリ→0回) - get_total_count() もキャッシュを利用(追加クエリなし) - _update_and_render() でキーワード変更時のみDBアクセス - タスクの作成/更新/削除時にキャッシュを無効化 効果: - Before: タスクページ開時に15回以上のDBクエリ - After: 初回1回のみ、以降はキャッシュから取得 Co-authored-by: snow7y <103980824+snow7y@users.noreply.github.com>
Contributor
Author
ご指摘ありがとうございます。ログレベル変更ではなく、根本原因である「重複したDB クエリ」を解決しました。 実装内容(コミット e1ef4b5):
効果:
元のINFOログレベルは維持したまま、DB アクセスそのものを削減することで問題を解決しました。 |
コードレビューで指摘された以下の点を修正: - 重複したキャッシュ更新ロジックを _ensure_cache_valid() に抽出 - _update_and_render() の重複したimport文を削除 - コードの可読性とメンテナンス性を向上 Co-authored-by: snow7y <103980824+snow7y@users.noreply.github.com>
コードレビューで指摘された潜在的な問題を修正: - None キーワードの適切な処理を追加 - キャッシュがNoneの場合の安全性チェックを追加 - 例外時のログ出力を追加して問題の追跡を容易化 - コードの可読性向上(三項演算子の使用) Co-authored-by: snow7y <103980824+snow7y@users.noreply.github.com>
Copilot
AI
changed the title
fix: タスクページ開時の過剰ログを削減(INFO → DEBUG)
refactor: タスクデータのキャッシュ機構を実装してDBクエリを削減
Dec 8, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
タスクページ開時に50行以上のINFOログが出力される問題を、ログレベル変更ではなく根本原因である重複したDBクエリを削減することで解決。Controller層にキャッシュ機構を実装し、タスクページ初回表示時のDBクエリを93%削減(15回以上 → 1回)しました。
変更点
src/views/tasks/controller.py: タスクデータのキャッシュ機構を実装_cached_tasksと_cached_keywordによるキャッシュ管理を追加_ensure_cache_valid(): キャッシュの有効性を確認し、必要時のみ更新_invalidate_cache(): タスク変更時にキャッシュを無効化get_counts(): キャッシュから集計(7回のDBクエリ → 0回)get_total_count(): キャッシュから件数取得(1回のDBクエリ → 0回)_update_and_render(): キーワード変更時のみDBアクセスBefore(キャッシュなし - 15回以上のDBクエリ):
After(キャッシュあり - 1回のDBクエリ):
パフォーマンス改善
キャッシュの動作
関連Issue
Original prompt
This section details on the original issue you should resolve
<issue_title>[🐛Bug] タスクのページを開いた際にログが出すぎる</issue_title>
<issue_description>## バグの説明
次の量のログが開いた際に出てしまう
2025-12-08 15:43:51.997 | INFO | router:route_change:41 - Route change: /tasks
2025-12-08 15:43:51.997 | INFO | views.tasks.view:init:78 - TasksView initialized with ApplicationService
2025-12-08 15:43:51.998 | DEBUG | views.tasks.controller:refresh:156 - データ再読み込み: 一覧を再描画
2025-12-08 15:43:52.000 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.001 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.015 | DEBUG | views.tasks.controller:_update_and_render:301 - Render tasks count=19 keyword='' status=None sort=updated_at desc=True
2025-12-08 15:43:52.024 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.024 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.041 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 4 件見つかりました。
2025-12-08 15:43:52.042 | INFO | logic.services.task_service:list_by_status:201 - ステータス 'TaskStatus.TODO' のタスクを取得しました: 4 件
2025-12-08 15:43:52.047 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.048 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.062 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 3 件見つかりました。
2025-12-08 15:43:52.062 | INFO | logic.services.task_service:list_by_status:201 - ステータス 'TaskStatus.TODAYS' のタスクを取得しました: 3 件
2025-12-08 15:43:52.068 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.069 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.080 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 4 件見つかりました。
2025-12-08 15:43:52.081 | INFO | logic.services.task_service:list_by_status:201 - ステータス 'TaskStatus.PROGRESS' のタスクを取得しました: 4 件
2025-12-08 15:43:52.087 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.088 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.100 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 2 件見つかりました。
2025-12-08 15:43:52.100 | INFO | logic.services.task_service:list_by_status:201 - ステータス 'TaskStatus.WAITING' のタスクを取得しました: 2 件
2025-12-08 15:43:52.104 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.105 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.117 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 2 件見つかりました。
2025-12-08 15:43:52.117 | INFO | logic.services.task_service:list_by_status:201 - ステータス 'TaskStatus.COMPLETED' のタスクを取得しました: 2 件
2025-12-08 15:43:52.120 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.120 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.136 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 1 件見つかりました。
2025-12-08 15:43:52.137 | INFO | logic.services.task_service:list_by_status:201 - ステータス 'TaskStatus.CANCELED' のタスクを取得しました: 1 件
2025-12-08 15:43:52.140 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.140 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.154 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 2 件見つかりました。
2025-12-08 15:43:52.154 | INFO | logic.services.task_service:list_by_status:201 - ステータス 'TaskStatus.OVERDUE' のタスクを取得しました: 2 件
2025-12-08 15:43:52.159 | DEBUG | views.tasks.view:_on_view_model_change:168 - filter applied: total=19 keyword='' status='None' sort='updated_at' desc=True counts={'todo': 4, 'todays': 3, 'progress': 4, 'waiting': 2, 'completed': 2, 'canceled': 1, 'overdue': 2}
2025-12-08 15:43:52.160 | DEBUG | views.tasks.view:init:83 - TasksView: 初期データ読み込み完了 (19件)
2025-12-08 15:43:52.164 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.164 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.179 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 19 件見つかりました。
2025-12-08 15:43:52.180 | INFO | logic.services.task_service:get_all:181 - 全てのタスクを取得しました: 19 件
2025-12-08 15:43:52.194 | INFO | logic.repositories.base:_gets_by_statement:125 - Task のエンティティが 4 件見つかりました。
2025-12-08 15:43:52.195 | INFO | logic.services.task_service:list_by_status:201 - ステー...
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.