私は現在、基本情報技術者試験取得にむけて勉強しています。
資格の勉強を進める中で、ふとこんなことを思いました。
-
今日は何時間勉強したんだろう?
-
分野ごとの正答率は伸びている?
-
最近体調が悪いけど、睡眠時間と関係ある?
-
家計簿も一緒に管理できたら便利じゃない?
せっかくなら、自分で作ってしまおう。
そう考えて開発を始めたのが、この「生活・学習管理Webアプリ」です。
開発環境
今回使用した環境はこちら。
-
Ubuntu(WSL2)
-
Python
-
Streamlit
-
SQLite
-
pandas
-
matplotlib
-
openpyxl
-
Git
-
GitHub
-
VSCode
最初はPythonだけ触れればいいかなと思っていたんですが、せっかくなら実際の開発に近い環境で学びたくて、Linux環境の構築から始めました。
Linux環境を構築
まず取り組んだのは、Windows上でLinuxを使えるようにすることから。
WSL2を導入し、Ubuntuをインストール。
その後、
-
Python環境構築
-
venv作成
-
Git設定
-
GitHub接続
-
VSCodeとの連携
まで行いました。
最初はLinuxのコマンドもほとんど分かりませんでしたが、少しずつ使いながら覚えていきました。
GitHubでソースコード管理
今回の開発ではGitHubを使ってコードを管理しています。
最初は
「commitって何?」
「pushって何?」
という状態でした。お恥ずかしい。
そこから、
-
Repository作成
-
Git操作
-
README作成
-
GitHub Pages公開
まで経験しました。
途中で何度もコミットをやり直したり、GitHubに反映されなくて悩んだりもしましたが、そのおかげでGitの仕組みをかなり理解できたので良かったです。
データベース設計
このアプリではSQLiteを利用しています。
テーブルは現在、以下の3つです。
-
study_logs
-
lifelog
-
budget
勉強記録だけでなく、
-
睡眠時間
-
気分
-
体調
-
体温
-
体重
-
体脂肪率
-
生理
-
排便
まで保存できるようにしました。
さらに家計簿も同じデータベースで管理しています。
Webアプリ化
最初はコマンドでデータを登録していました。
ですが、毎回ターミナルから入力するのは手間だったため、Streamlitを使ってWebアプリ化しました。
現在はブラウザから
-
勉強記録
-
ライフログ
-
家計簿
を入力でき、そのままSQLiteへ保存されます。
入力フォームを作ることで、普段使いできるアプリになりました。

Excelとの連携
私は以前からExcelでライフログを記録していました。
そのため、Webアプリだけで完結するのではなく、
Webアプリ → SQLite → Excel
まで自動で反映される仕組みを作成しました。
これにより、今まで使っていたExcelもそのまま活用できます。
グラフの自動生成
データを貯めるだけではツールとして使いにくい。
そこで、Pythonでグラフを自動生成するようにしました。
例えば、
学習
-
科目別学習時間
-
日別学習時間
ライフログ
-
睡眠時間
-
気分
-
体調
-
体温
-
体重
-
体脂肪率
家計簿
などを自動で作成しています。
見やすさにもこだわる
実際に毎日使っていると、見づらいと思う部分がたくさん出てきました。
例えば、
-
グラフサイズを統一
-
凡例の並び替え
-
生理期間を背景色で表示
-
体脂肪率の目標ライン表示
-
欠損データでも線が途切れないよう修正
-
表示期間を2週間へ変更
など、小さな改善を何度も繰り返しました。
作ることよりも、「使いやすくすること」の方が難しいと実感。
自動化にも挑戦
現在は複数のPythonスクリプトをまとめた update_all.py を作成しています。
これを実行すると、
-
データ更新
-
Excel更新
-
グラフ生成
-
README更新
まで一括で行われます。
毎回手作業だった処理を少しずつ自動化できたのは、とても大きな収穫でした。
GitHub Pagesで公開
作成したグラフはGitHub Pagesで公開しています。
ブラウザから現在の学習状況やライフログを確認できるため、自分専用のダッシュボードとして活用しています。
この開発で学んだこと
今回の開発では、Pythonだけではなく、
-
Linux
-
Git
-
GitHub
-
SQLite
-
Streamlit
-
pandas
-
matplotlib
など、様々な技術を組み合わせながら開発を進めました。
一番大きかったのは、「動けば終わり」ではなく、実際に自分で使いながら改善を続ける楽しさを知れたことです。
今後の目標
まだまだ作りたい機能があります。
例えば、
-
ログイン機能
-
カレンダー表示
-
学習目標との差分表示
-
Renderなどを利用したWeb公開
-
SQLiteからMariaDBやPostgreSQLへの移行
などです。
これからも少しずつ改善を重ねながら、「毎日使いたくなるアプリ」を目指して開発を続けていこうかなと思っています🦕




