- PythonでWebアプリを作ってみたい!
- でも、フレームワークを使ったWebアプリ開発って難しそう…
そんな方におすすめなのがStreamlitです。
Streamlitを使えば、少ないコードで簡単にWebアプリが作れちゃいます。
今回は、誰でもすぐに試せる「家計簿アプリ」を一緒に作っていきましょう。
- 初めてWebアプリ制作にチャレンジしたい
- Python学習のアウトプットをしたい
- ポートフォリオを作って、転職・副業に活かしたい
- 自分用の家計簿管理ツールが欲しい
そんな方に向けた入門記事にしてみました!
【Python】Streamlitで簡単に家計簿アプリを作る手順をご紹介
次の流れで説明します。
- ディレクトリ構成
- 環境セットアップ
- Streamlitコードの作成
- 動作確認
ディレクトリ構成
完成系のディレクトリ構成は、こんな感じです。
kakeibo-app/
├── app.py # Streamlitアプリのメインスクリプト
└── data/ # データ保存用フォルダ
└── kakeibo.csv # 家計簿データを保存するCSVファイル
最初はapp.py
だけを配置してください。data/kakeibo.csv
は実行時に、自動的に生成されるようになっています。
この構成によって、後々の機能追加やデプロイもスムーズに行えるはずです。
仮想環境とライブラリを導入する
前提条件として、Pythonのインストールは済んでいることとします。
適当な場所にkakeibo-app
というディレクトリを作成して、まずは仮想環境を作っていきましょう。
# 仮想環境の作成
python -m venv venv
# 仮想環境の有効化(macOS, Linux)
source venv/bin/activate
続いて、必要なライブラリをインストール。
# pipのアップグレード
pip install --upgrade pip
# 必要なライブラリのインストール
pip install streamlit pandas matplotlib watchdog
これで必要なライブラリは揃いました。
実際のStreamlitコードの作成
実際のアプリコードapp.py
を書いていきましょう。
今回は、「家計簿の記録 → 保存 → 表示 → グラフ化」までを一気に行います。
import os
import platform
from datetime import date
import matplotlib
import pandas as pd
import streamlit as st
# CSV保存用
DATA_PATH = "data/kakeibo.csv"
os.makedirs("data", exist_ok=True)
# CSVが存在しなければ空のデータフレームを作成
if not os.path.exists(DATA_PATH):
pd.DataFrame(columns=["日付", "費目", "金額", "メモ"]).to_csv(
DATA_PATH, index=False
)
# OSごとに日本語フォントを自動設定
system = platform.system()
if system == "Darwin": # macOS
matplotlib.rcParams["font.family"] = "AppleGothic"
elif system == "Windows":
matplotlib.rcParams["font.family"] = "MS Gothic"
else:
matplotlib.rcParams["font.family"] = "IPAPGothic"
# タイトル
st.title("📒 シンプル家計簿アプリ")
# 入力フォームの作成
with st.form("entry_form", clear_on_submit=True):
col1, col2 = st.columns(2)
with col1:
date_input = st.date_input("日付", value=date.today())
category = st.selectbox("費目", ["食費", "交通費", "日用品", "娯楽", "その他"])
with col2:
amount = st.number_input("金額(円)", min_value=0, step=100)
note = st.text_input("メモ")
submitted = st.form_submit_button("追加する")
# 保存処理
if submitted:
new_data = pd.DataFrame(
[[date_input, category, amount, note]], columns=["日付", "費目", "金額", "メモ"]
)
df_old = pd.read_csv(DATA_PATH)
df_all = pd.concat([df_old, new_data], ignore_index=True)
df_all.to_csv(DATA_PATH, index=False)
st.success("✅ 追加しました!")
# データ表示
st.subheader("📊 入力履歴")
df = pd.read_csv(DATA_PATH)
st.dataframe(df)
# 集計表示
if not df.empty:
st.subheader("📈 月別合計 / 費目内訳")
# 月別集計
df["日付"] = pd.to_datetime(df["日付"])
monthly_sum = df.groupby(df["日付"].dt.to_period("M"))["金額"].sum()
st.bar_chart(monthly_sum)
# 費目内訳
category_sum = df.groupby("費目")["金額"].sum()
st.write("### 費目内訳(円グラフ)")
st.pyplot(category_sum.plot.pie(autopct="%1.1f%%", figsize=(5, 5)).figure)
ローカルマシンで家計簿アプリを起動・動作確認する
動作確認は、以下のコマンドで行います。
streamlit run app.py
するとブラウザが起動して、以下のような画面が表示されます。

日付や金額、費目を入れて「追加する」ボタンを押すことで、CSVファイルにデータとして保存されていく仕組みです。
動作は大丈夫そうですね。
アプリを終了する場合は、ターミナル上でCtrl + C
を押します。
インターネット上に一般公開する
アプリが完成したら、次はインターネット上に公開してみましょう!

まとめ
今回は、PythonとStreamlitでシンプルな家計簿アプリを作ってみました。
Streamlitはデータサイエンスやちょっとしたツール作りとの相性が抜群です。
特にStreamlitはブラウザ上で動くので、一般公開して「人に見せられる形」にできるのが魅力。
自分のコードが「作品」として外に出る感覚を、ぜひ味わってみてください!
ぜひ次は次の記事を参考に、VPSを使ったアプリをインターネット上に公開にチャレンジしてみましょう。

コメント