復習タスク管理アプリ taskskskss の画面

taskskskss – 復習タスクを登録して、復習ログをひたすら貯めていく学習タスク管理アプリ

「英単語」「数学」「中国語」などの“復習したいタスク”を登録しておき、 復習したタイミングでワンタップでログを残せる、シンプルな復習タスク管理アプリです。 難しいアルゴリズムよりも、「とにかく記録を残すこと」に全振りした設計になっています。

作品の説明

taskskskss は、 「あとで復習したいのに、いつやったか分からなくなる」問題を解決するために作りました。 タスクごとにカードを作り、復習したらそのカードをタップするだけで “いつ・どのタスクを復習したか” がどんどんログとして貯まっていきます。

いわゆる高度な間隔反復アルゴリズム(SuperMemo, Anki など)を最初から入れるのではなく、 まずはシンプルに「復習の実績データ」を集めることを優先しました。 ログが溜まってくれば、あとから統計やアルゴリズムを載せ替えることもできます。

  • ① 復習したいトピックを「復習タスク」として登録
  • ② 復習したタイミングでタスクをタップ(ログ1件追加)
  • ③ タスク別・日別の復習回数をタイムライン・カレンダーで可視化
  • ④ 「最近さぼっているタスク」や「続いているタスク」を一目で確認
  • ⑤ ログをエクスポートして別アプリの分析に使うことも想定

システム概要

taskskskss の画面構成とデータ構造図

アプリ内部では、復習タスクテーブル復習ログテーブルの 2 つのエンティティを Room で管理しています。 UI は Jetpack Compose で構築し、ViewModel+Repositoryで 「UI → ViewModel → Repository → DAO → DB」 の シンプルな一方向データフローにしています。

技術スタック

  • Android / App: Kotlin, Jetpack Compose, ViewModel, StateFlow
  • Persistence: Room(復習タスク・復習ログ)
  • Architecture: MVVM, Repository パターン
  • Others: WorkManager(簡易リマインド / バックアップを想定)

主要コンポーネント

  • TaskEntity: 復習対象(タイトル・カテゴリ・重要度・メモなど)を保持するテーブル。
  • ReviewLogEntity: taskIdreviewedAt(日時)を持つ、「いつ復習したか」の生ログ。
  • TaskRepository: タスクとログをまとめて扱うリポジトリ層。UI はここを経由して DB に触る。
  • HomeViewModel: 「今日復習したタスク」「最近さぼっているタスク」などの状態をまとめて管理。
  • StatsViewModel: 日別・タスク別の回数を集計して、カレンダー/棒グラフ用のデータを生成。

技術解説

DATA MODEL

「復習タスク」と「復習ログ」の2テーブル設計

taskskskss の根本は、 Task(何を復習するか)ReviewLog(いつ復習したか) の 2 テーブルに分けるところから始まっています。 これにより、タスクの属性と復習の頻度・タイミングを独立に扱えるようになり、 後から統計を取ったり、別アルゴリズムに差し替えたりしやすくしています。

Room エンティティのイメージ:
@Entity
data class TaskEntity(
 @PrimaryKey(autoGenerate = true) val id: Long = 0,
 val title: String,
 val category: String?,
 val importance: Int,
 val memo: String?
)

@Entity
data class ReviewLogEntity(
 @PrimaryKey(autoGenerate = true) val id: Long = 0,
 val taskId: Long,
 val reviewedAt: Long
)
UX / INPUT

復習ログは「ワンタップ」で残す

ログ入力を面倒にすると続かないので、 ホーム画面のタスクリスト上でタップするだけで 現在時刻の ReviewLog を 1 件追加するようにしました。 長押しでメモ付きのログを残す UI も検討しています。

擬似コード:
fun onTaskReviewed(taskId: Long) {
 val now = System.currentTimeMillis()
 val log = ReviewLogEntity(taskId = taskId, reviewedAt = now)
 repository.insertLog(log)
}
STATS VIEW

日別・タスク別の復習回数を集計して見える化

ReviewLog を日別にカウントすることで、 「何日連続で触れているか」「最近触れていないタスクはどれか」などを 簡単な棒グラフやカレンダー風 UI で可視化しています。 まずはロジックがシンプルな集計から始めています。

EXTENSIBILITY

間隔反復アルゴリズムを載せ替えやすいようにする

今はあえてアルゴリズムを入れず、「生ログを集める」だけにしてあります。 将来的には、Task に nextRecommendedAt などのフィールドを追加し、 SuperMemo 風の間隔反復アルゴリズムを載せ替えられるようにする予定です。

使ってみて分かったこと・課題

1週間分の復習ログを取ってみた

「英単語」「数学」「中国語」の 3 タスクを登録し、 1週間ほど実際に使って復習タイミングを記録してみました。 結果、主観では「そこそこやっているつもり」でも、 ログを見ると案外ムラがあることが分かりました。

復習タスク一覧画面
(a) 復習タスク一覧(タップでログ追加)
日別復習回数の統計画面
(b) 日別の復習回数を棒グラフで表示

現在の課題

・ログは取れているものの、「次に何をやるべきか」の提案はまだ弱いこと ・タスクが増えるとリストが長くなり、カテゴリ分けや検索が欲しくなること ・連続記録(日数)を意識しすぎると、逆にプレッシャーになる場面もあること などが見えてきました。

次にやるタスクの提案は未実装 カテゴリ・タグ機能の追加を検討中

動作イメージ

タスクを登録し、復習が終わったらタップしてログを追加する… という一連の流れを撮影したデモ動画を想定しています。

taskskskss – 復習ログ追加と統計画面のデモ

まだできていない部分と今後

「ログを取るだけ」から「復習プランナー」へ

今の taskskskss は、かなり割り切って「ログを取るだけ」のアプリです。 ですが、蓄積されたログを使えば、 「このタスクはそろそろ忘れそうだから今日もう一回やろう」といった 軽めの復習提案くらいは十分に実装できます。

  • 短期: カテゴリ・タグ機能、タスク検索、簡単なソート(最近復習した順など)。
  • 中期: 「次にやるべきタスク」の簡易スコアリングと、ホーム画面への表示。
  • 長期: 他の学習アプリ(単語帳 / 定理カード / EEG ログなど)との連携ハブに。

これからの改善点と開発計画

「続けやすさ」「見やすさ」「提案のうるさくなさ」のバランスを意識して改善していきます。

  • UX: タップしやすいカードデザイン、ダークモード対応。
  • Stats: 連続日数・総復習回数・月別ヒートマップなどの追加。
  • Integration: CSV / JSON エクスポート、他アプリからのインポート。
17
18
19
20
21
22
23
24
25
26
27
28
29
30
カテゴリ・タグ・検索機能の追加
簡易復習スコアリング(次にやるべきタスク)
エクスポート・他アプリとの連携

このプロジェクトを通して

感じていること

学習アプリというと、つい「高度なアルゴリズム」から考えたくなりますが、 実際に手を動かしてみると、まず大事なのは 「人間が続けられる入力体験」と「素直なデータ構造」 だと感じました。 taskskskss は、その原点に立ち返るための小さな実験でもあります。

ログがたくさん溜まってきたら、 そこから初めて「本当に効いている復習パターンはどれか」を データとして検証できます。 その手前の地味なステップを、アプリとして形にできたのは 自分にとって大きな意味がありました。

今の自分へのメモ

  • ・「入力の手間」を 1 ステップ減らす改善は、アルゴリズム改善と同じくらい価値がある。
  • ・ログが溜まってきたら、必ずどこかのタイミングで可視化して眺める時間を取ること。

リファレンス & リンク

リファレンス

  • Android Developers – Room Persistence Library
  • Jetpack Compose – State and Architecture ガイド
  • Spaced Repetition / SuperMemo / Anki に関する一般的な資料

リンク