1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで自分専用の生活・学習管理Webアプリを作ってみた

1
Posted at

私は現在、基本情報技術者試験取得にむけて勉強しています。
資格の勉強を進める中で、ふとこんなことを思いました。

  • 今日は何時間勉強したんだろう?

  • 分野ごとの正答率は伸びている?

  • 最近体調が悪いけど、睡眠時間と関係ある?

  • 家計簿も一緒に管理できたら便利じゃない?

せっかくなら、自分で作ってしまおう。

そう考えて開発を始めたのが、この「生活・学習管理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へ保存されます。
入力フォームを作ることで、普段使いできるアプリになりました。
S__1572873.jpg

Excelとの連携

私は以前からExcelでライフログを記録していました。
そのため、Webアプリだけで完結するのではなく、

Webアプリ → SQLite → Excel

まで自動で反映される仕組みを作成しました。
これにより、今まで使っていたExcelもそのまま活用できます。

グラフの自動生成

データを貯めるだけではツールとして使いにくい。
そこで、Pythonでグラフを自動生成するようにしました。
例えば、

学習

  • 科目別学習時間

  • 日別学習時間

S__1572872.jpg

ライフログ

  • 睡眠時間

  • 気分

  • 体調

  • 体温

  • 体重

  • 体脂肪率

S__1572868.jpg
S__1572869.jpg
S__1572870.jpg

家計簿

  • 支出割合

  • 月別収支
    S__1572871.jpg

などを自動で作成しています。

見やすさにもこだわる

実際に毎日使っていると、見づらいと思う部分がたくさん出てきました。

例えば、

  • グラフサイズを統一

  • 凡例の並び替え

  • 生理期間を背景色で表示

  • 体脂肪率の目標ライン表示

  • 欠損データでも線が途切れないよう修正

  • 表示期間を2週間へ変更

など、小さな改善を何度も繰り返しました。

作ることよりも、「使いやすくすること」の方が難しいと実感。

自動化にも挑戦

現在は複数のPythonスクリプトをまとめた update_all.py を作成しています。
これを実行すると、

  • データ更新

  • Excel更新

  • グラフ生成

  • README更新

まで一括で行われます。
毎回手作業だった処理を少しずつ自動化できたのは、とても大きな収穫でした。

GitHub Pagesで公開

作成したグラフはGitHub Pagesで公開しています。

ブラウザから現在の学習状況やライフログを確認できるため、自分専用のダッシュボードとして活用しています。

この開発で学んだこと

今回の開発では、Pythonだけではなく、

  • Linux

  • Git

  • GitHub

  • SQLite

  • Streamlit

  • pandas

  • matplotlib

など、様々な技術を組み合わせながら開発を進めました。

一番大きかったのは、「動けば終わり」ではなく、実際に自分で使いながら改善を続ける楽しさを知れたことです。

今後の目標

まだまだ作りたい機能があります。

例えば、

  • ログイン機能

  • カレンダー表示

  • 学習目標との差分表示

  • Renderなどを利用したWeb公開

  • SQLiteからMariaDBやPostgreSQLへの移行

などです。

これからも少しずつ改善を重ねながら、「毎日使いたくなるアプリ」を目指して開発を続けていこうかなと思っています🦕

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?