教科・内容・時間・日付を、ワンタップで記録できるシンプルな学習ログアプリです。 「今日は数学を何分やった?」を感覚ではなくデータで管理し、 日・週・月単位で学習量を振り返れるようにすることを目標に開発しました。
StudyLog は、紙のノートやスプレッドシートでやりがちな 「勉強記録」をスマホに集約したアプリです。 教科を選び、学習時間とメモを入力するだけで、 その日のログがタイムラインに積み上がっていきます。
データは Room データベースに保存され、 教科別の合計時間や、日毎の合計学習時間をクエリで集計できます。 将来的には、Rootine や EEG 実験で使う集中度データと同期させて、 「どの時間帯・どの教科で集中できていたか」を一体的に見られる基盤として設計しました。
典型的な Android アーキテクチャ(UI → ViewModel → Repository → Room)を採用し、 将来的にグラフ表示やクラウド同期が追加しやすい構成にしています。 ログは 1 行 1 セッションで保存し、日付・教科で柔軟にクエリできるようにしました。
insert / update / delete に加え、
日付範囲・教科別の合計時間を返すクエリを定義。StudyLog では、「1回の勉強」を 1 行のレコードとして保存しています。 日付ごとの合計時間だけでなく、内容や教科ごとに集計できるよう、 最初から「後でどう分析したいか」を意識してスキーマを設計しました。
@Entity(tableName = "study_logs")
data class StudyLogEntity(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val subject: String,
val minutes: Int,
val memo: String?,
val date: LocalDate,
val createdAt: Instant
)
DAO では Flow<List<StudyLogEntity>> を返すクエリを定義し、
新しいログが追加された瞬間に UI の合計時間・一覧が更新されるようにしています。
これにより、「入力したのに画面が変わらない」ストレスをなくしました。
@Query("SELECT * FROM study_logs WHERE date = :date ORDER BY createdAt DESC")
fun logsOf(date: LocalDate): Flow<List<StudyLogEntity>>
「今週は数学を何分やった?」「英語と数学どちらに時間を使っている?」 という問いにすぐ答えられるよう、 合計時間を返すクエリをあらかじめ用意しています。 プログラム側でループするのではなく、SQL に集計を任せています。
@Query("""
SELECT subject, SUM(minutes) as totalMinutes
FROM study_logs
WHERE date BETWEEN :from AND :to
GROUP BY subject
ORDER BY totalMinutes DESC
""")
fun totalMinutesBySubject(from: LocalDate, to: LocalDate): Flow<List<SubjectTotal>>
今はシンプルなリストと合計時間表示ですが、 将来的には Rootine や EEG 実験のデータと結びつけて、 「どのタスクで最も集中できていたか」「何時間で集中が切れるか」を 数理的に分析するための基盤として位置づけています。
実際に自分の勉強を 1 週間記録してみると、 体感以上に「数学に寄っている日」「英語に偏っている日」があることがわかりました。 タイムラインで見るだけでも、自分の癖がかなり浮き彫りになります。
現状の StudyLog は、「記録」と「ざっくりした集計」まではできますが、 グラフやカレンダー、目標時間との比較などはまだ実装途中です。 また、バックアップや別端末への引き継ぎも今後の課題です。
ログの追加から、一覧への反映、教科別集計の変化までを 一連で撮影したデモ動画です。
StudyLog は、単なる勉強時間の記録アプリではなく、 将来的には Rootine や EEG 実験、TOEIC・HSK の学習計画と連携する 「学習データのハブ」にしていきたいと考えています。
UIの改善・可視化・他ツールとの連携の3ステップで進めます。
StudyLog を作る中で、「データとして学習を扱う」ことの面白さを強く感じました。 ただ勉強するだけでなく、それをログに残し、後から自分の戦い方を分析できると、 学習が少しゲームのように感じられます。
まだ UI も機能もシンプルですが、 ここで作ったデータモデルと Room の経験は、 その後の Rootine や EEG プロジェクトの土台になっています。 「まずはきちんと記録する」ことの大切さを、 アプリを自分で使いながら実感しているところです。