1. はじめに|Pythonで簡単な家計簿アプリを作ってみよう!
「Pythonを使って何か作ってみたいけど、何から始めればいいか分からない…」そんなあなたにぴったりなのが、家計簿アプリです!
Pythonには「tkinter(ティーケーインター)」という、標準で使えるGUIライブラリがあり、これを使えばクリックや入力で操作できるアプリを自分で作ることができます。
今回ご紹介するのは、まずは支出を記録して合計金額を出すだけのシンプルな家計簿アプリ。そして、そこからさらにステップアップして、**収入も記録できる「おこづかい帳アプリ」**に改造していくところまでを、順を追って丁寧に解説します。
✅ このアプリでできること
- 支出の内容と金額を登録して、日付と一緒に保存
- 保存された内容は一覧表示され、合計金額が自動で更新される
- 改造後は収入も記録できるようになり、収支を計算して残高を表示

👀 こんな方におすすめ!
- Pythonを少しかじったけど、何か作ってみたい人
- GUIアプリの作り方を体験してみたい人
- お金の管理に興味がある人(ついでに節約もできるかも?)
また、このアプリはAI(ChatGPT)のサポートを受けながら開発されたというのもポイント。コードの相談や実装方法の確認をAIに頼りながら進めていけるので、初めての人でも安心して取り組めます。
それではさっそく、Pythonで家計簿アプリを作る第一歩を踏み出していきましょう!
2. 最初のステップ:シンプルな支出登録アプリを作る
それではいよいよ、Pythonで最初の家計簿アプリを作っていきましょう!
ここではまず、「何にいくら使ったか」を記録し、支出の一覧と合計金額を表示するだけのシンプルなバージョンを作成します。
🛠 必要なライブラリを準備しよう
今回使うのは、Pythonに標準で含まれている以下のライブラリです:
import tkinter as tk
from tkinter import messagebox
import csv
from datetime import datetime
追加インストールは不要なので、すぐに始められます!
🧱 画面のレイアウトを作成しよう
まずは、ウィンドウの土台を作り、入力欄・登録ボタン・支出一覧・合計金額の表示を並べていきます。
root = tk.Tk()
root.title("家計簿アプリ")
root.geometry("500x300")
# 支出の項目
label_item = tk.Label(root, text="支出(何に使ったか):")
label_item.pack()
entry_item = tk.Entry(root)
entry_item.pack()
# 金額
label_amount = tk.Label(root, text="金額(円):")
label_amount.pack()
entry_amount = tk.Entry(root)
entry_amount.pack()
➕ 「登録」ボタンでデータを追加しよう
ボタンをクリックすると、入力されたデータがCSVファイルに保存され、一覧に追加されるようにします。
def add_expense():
item = entry_item.get()
amount = entry_amount.get()
if item == "" or amount == "":
messagebox.showwarning("入力エラー", "すべての項目を入力してください")
return
try:
amount = int(amount)
except ValueError:
messagebox.showwarning("入力エラー", "金額は数値で入力してください")
return
date = datetime.now().strftime("%Y-%m-%d")
with open("expenses.csv", mode="a", newline="") as file:
writer = csv.writer(file)
writer.writerow([date, item, amount])
listbox.insert(tk.END, f"{date} | {item} | {amount}円")
update_total()
entry_item.delete(0, tk.END)
entry_amount.delete(0, tk.END)
button_add = tk.Button(root, text="登録", command=add_expense)
button_add.pack()
📋 支出の一覧と合計を表示しよう
登録された支出を一覧表示するために、リストボックスと合計表示用のラベルを追加します。
listbox = tk.Listbox(root, width=50)
listbox.pack()
label_total = tk.Label(root, text="合計金額: 0円")
label_total.pack()
def update_total():
total = 0
try:
with open("expenses.csv", mode="r") as file:
reader = csv.reader(file)
for row in reader:
if len(row) == 3:
total += int(row[2])
except FileNotFoundError:
pass
label_total.config(text=f"合計金額: {total}円")
▶ 最後にアプリを起動しよう
update_total() # アプリ起動時にも合計を読み込む
root.mainloop()
これで、シンプルな支出登録アプリが完成です!
✅ ここまでのおさらい
| 機能 | 実装内容 |
|---|---|
| 支出の登録 | フォームに入力→CSVに保存→リストに表示 |
| 合計金額の表示 | CSVを読み込み、合計値を計算して表示 |
| エラーチェック | 空欄や金額の数値チェックを実装 |

この基本形ができあがれば、次は収入の記録機能を追加して、「おこづかい帳アプリ」にパワーアップさせていきます!
3. ステップアップ:収入も登録できる「おこづかい帳」へ改造!
先ほど作った支出専用の家計簿アプリを、今回はさらにパワーアップさせて、収入も管理できる「おこづかい帳」アプリに改造していきます!
支出だけでなく収入も記録できるようになることで、今の残高(収支)を自動で計算して表示できるようになりますよ。
🏷 アプリの見た目とタイトルを変更しよう
まずはウィンドウのタイトルとサイズを少し変えて、「おこづかい帳」らしくします。
root.title("おこづかい帳")
root.geometry("600x300")
💰 収入の入力欄を追加しよう
支出と同じように、「誰からもらったか」と「金額」を記録する入力フォームと登録ボタンを用意します。
# 収入の入力欄
label_income_source = tk.Label(root, text="収入(誰から):")
label_income_source.pack()
entry_income_source = tk.Entry(root)
entry_income_source.pack()
label_income_amount = tk.Label(root, text="金額(円):")
label_income_amount.pack()
entry_income_amount = tk.Entry(root)
entry_income_amount.pack()
def add_income():
source = entry_income_source.get()
amount = entry_income_amount.get()
if source == "" or amount == "":
messagebox.showwarning("入力エラー", "すべての項目を入力してください")
return
try:
amount = int(amount)
except ValueError:
messagebox.showwarning("入力エラー", "金額は数値で入力してください")
return
date = datetime.now().strftime("%Y-%m-%d")
with open("expenses.csv", mode="a", newline="") as file:
writer = csv.writer(file)
writer.writerow([date, f"収入:{source}", amount])
listbox.insert(tk.END, f"{date} | 収入:{source} | +{amount}円")
update_balance()
entry_income_source.delete(0, tk.END)
entry_income_amount.delete(0, tk.END)
button_add_income = tk.Button(root, text="収入を登録", command=add_income)
button_add_income.pack()
💸 支出の登録部分もそのまま使える!
支出の処理(add_expense)も先ほどとほぼ同じでOK。ただし、CSVに保存するときに「支出:○○」と書いて区別できるようにしておくと便利です。
def add_expense():
item = entry_item.get()
amount = entry_amount.get()
if item == "" or amount == "":
messagebox.showwarning("入力エラー", "すべての項目を入力してください")
return
try:
amount = int(amount)
except ValueError:
messagebox.showwarning("入力エラー", "金額は数値で入力してください")
return
date = datetime.now().strftime("%Y-%m-%d")
with open("expenses.csv", mode="a", newline="") as file:
writer = csv.writer(file)
writer.writerow([date, f"支出:{item}", -amount]) # マイナス値で記録!
listbox.insert(tk.END, f"{date} | 支出:{item} | -{amount}円")
update_balance()
entry_item.delete(0, tk.END)
entry_amount.delete(0, tk.END)
💹 残高を計算する処理に変更しよう
合計金額の代わりに「残高」として表示するように変更します。収入はプラス、支出はマイナスとして合計すればOK!
label_balance = tk.Label(root, text="残高: 0円")
label_balance.pack()
def update_balance():
balance = 0
try:
with open("expenses.csv", mode="r") as file:
reader = csv.reader(file)
for row in reader:
if len(row) == 3:
balance += int(row[2])
except FileNotFoundError:
pass
label_balance.config(text=f"残高: {balance}円")
アプリ起動時にも読み込むようにしておきましょう:
update_balance()
📝 改造ポイントまとめ
| 変更点 | 内容 |
|---|---|
| タイトル変更 | 「家計簿アプリ」→「おこづかい帳」 |
| 入力欄の追加 | 「収入(誰から)」と「金額」のフォームを新設 |
| ボタンの追加 | 支出とは別に「収入を登録」ボタンを追加 |
| CSVの記録方式 | 支出は「-金額」、収入は「+金額」で記録して区別 |
| 合計→残高表示 | 全ての収支を足し引きして「現在の残高」を表示する処理に変更 |

これで、収支を管理できる立派なおこづかい帳アプリが完成しました!
4. コード全体を公開|コピペで動かせる!
ここまで分けて説明してきた「おこづかい帳アプリ」ですが、やっぱり全体像が見えた方が理解しやすいですよね。
この章では、収入と支出の両方を記録し、残高を表示できる「おこづかい帳アプリ」の完成版コードをまとめて掲載します。Pythonがインストールされていれば、そのままコピー&ペーストで動かせますよ!
🧾 完成コード:おこづかい帳アプリ
import tkinter as tk
from tkinter import messagebox
import csv
from datetime import datetime
# ウィンドウの基本設定
root = tk.Tk()
root.title("おこづかい帳")
root.geometry("600x400")
# ======== 支出入力欄 ========
label_item = tk.Label(root, text="支出(何に使ったか):")
label_item.pack()
entry_item = tk.Entry(root)
entry_item.pack()
label_amount = tk.Label(root, text="金額(円):")
label_amount.pack()
entry_amount = tk.Entry(root)
entry_amount.pack()
def add_expense():
item = entry_item.get()
amount = entry_amount.get()
if item == "" or amount == "":
messagebox.showwarning("入力エラー", "すべての項目を入力してください")
return
try:
amount = int(amount)
except ValueError:
messagebox.showwarning("入力エラー", "金額は数値で入力してください")
return
date = datetime.now().strftime("%Y-%m-%d")
with open("expenses.csv", mode="a", newline="") as file:
writer = csv.writer(file)
writer.writerow([date, f"支出:{item}", -amount])
listbox.insert(tk.END, f"{date} | 支出:{item} | -{amount}円")
update_balance()
entry_item.delete(0, tk.END)
entry_amount.delete(0, tk.END)
button_add_expense = tk.Button(root, text="支出を登録", command=add_expense)
button_add_expense.pack()
# ======== 収入入力欄 ========
label_income_source = tk.Label(root, text="収入(誰から):")
label_income_source.pack()
entry_income_source = tk.Entry(root)
entry_income_source.pack()
label_income_amount = tk.Label(root, text="金額(円):")
label_income_amount.pack()
entry_income_amount = tk.Entry(root)
entry_income_amount.pack()
def add_income():
source = entry_income_source.get()
amount = entry_income_amount.get()
if source == "" or amount == "":
messagebox.showwarning("入力エラー", "すべての項目を入力してください")
return
try:
amount = int(amount)
except ValueError:
messagebox.showwarning("入力エラー", "金額は数値で入力してください")
return
date = datetime.now().strftime("%Y-%m-%d")
with open("expenses.csv", mode="a", newline="") as file:
writer = csv.writer(file)
writer.writerow([date, f"収入:{source}", amount])
listbox.insert(tk.END, f"{date} | 収入:{source} | +{amount}円")
update_balance()
entry_income_source.delete(0, tk.END)
entry_income_amount.delete(0, tk.END)
button_add_income = tk.Button(root, text="収入を登録", command=add_income)
button_add_income.pack()
# ======== 一覧表示エリア ========
listbox = tk.Listbox(root, width=60)
listbox.pack()
# ======== 残高表示ラベル ========
label_balance = tk.Label(root, text="残高: 0円")
label_balance.pack()
def update_balance():
balance = 0
try:
with open("expenses.csv", mode="r") as file:
reader = csv.reader(file)
for row in reader:
if len(row) == 3:
balance += int(row[2])
except FileNotFoundError:
pass
label_balance.config(text=f"残高: {balance}円")
# アプリ起動時に残高を読み込む
update_balance()
# メインループ
root.mainloop()
💡 ワンポイントアドバイス
- このコードを
okozukai_app.pyのような名前で保存して、Pythonで実行するだけでアプリが起動します。 expenses.csvファイルは、同じフォルダに自動で作成され、記録が保存されていきます。- 後からExcelなどで開くこともできますよ!

このように、少しずつ作っていけば、ちゃんとしたGUIアプリもPythonで作れます!
5. 開発の振り返り|AIにコードを聞いてみたら…
今回の「おこづかい帳アプリ」は、PythonのGUIライブラリであるtkinterを使って、自分で動くアプリを作るという貴重な体験になりました。
でも実はこれ、すべてを一人で書いたわけではありません。
実際には、AI(ChatGPT)にコードの書き方を相談しながら進めていったんです。
【初心者向け】ChatGPTの使いかた完全ガイド|登録から活用法までやさしく解説!
🤖 AIと一緒に作ると、こんなに安心!
最初は、
「支出を記録するだけのアプリを作ってみたい」
というシンプルな要望からスタート。
AIに「tkinterで支出の内容と金額を入力してCSVに保存する方法を教えて」と聞いたところ、必要なコードの例と説明を丁寧に返してくれました。
そのおかげで、何をどんな順番で書けばいいかがすぐに見えてきたんです。
✨ 改造も“わずかな変更”でできた!
支出だけを記録していたアプリに、「収入」や「残高の計算」機能を追加したときも、
- 「収入はどうやってCSVに追加すればいい?」
- 「残高を自動で計算するには?」
と順に聞いていけば、必要な考え方やコードのサンプルをすぐ教えてくれました。
その結果、元のコードを大きく壊すことなく、ちょっと手を加えるだけでアプリの機能を増やすことができました。
💡 初心者こそ、AIを頼っていい!
今回のような開発を通じて感じたのは、
「初心者が一からコードを全部覚えてから作る必要はない」
ということ。
もちろん基本的な文法や考え方は大事ですが、
**「わからないことはAIに聞けばいい」**という安心感があるだけで、ぐっとハードルが下がります。
ちょっとずつ、自分で動かして試してみる。
それを繰り返すうちに、いつの間にか自分で改造できるようになっている。
そんな“プチ開発体験”こそが、最初の一歩としてちょうどいいんです。
🚀「できた!」という体験が自信になる
このおこづかい帳アプリのように、小さくて身近なアプリでも、
「自分で作ったものが動く!」という感動は大きな自信になります。

あなたもぜひ、「Pythonで何か作ってみたいな」と思ったら、今回のようなアプリからチャレンジしてみてくださいね。
6. まとめ|簡単でも作れると楽しい!Pythonの魅力
今回は、Pythonとtkinterを使って、支出と収入を記録し残高を表示できるおこづかい帳アプリを一緒に作ってきました。
「家計簿アプリって難しそう…」と思っていた方も、少しずつ手を動かすことで実際に動くアプリを完成させることができたのではないでしょうか?
💡 小さなステップでも立派なアプリ
今回作ったアプリは、たった数百行のシンプルなコードですが、それでも以下のようなことができるようになりました。
| 機能 | 説明 |
|---|---|
| 支出の記録 | 入力欄から使った項目と金額を登録し、CSVに保存 |
| 収入の記録 | 誰からもらったかと金額を登録し、同じCSVに保存 |
| 一覧の表示 | 収支の履歴をアプリ画面に表示 |
| 残高の計算と表示 | 登録された全データをもとに現在の残高をリアルタイムで表示 |
しかも、データはCSVに保存されるので、後でExcelで集計・グラフ化することも可能です!
🤖 AIと一緒に学べば怖くない!
AIにちょっと質問しながら進めるだけで、
「このコードってどう書くんだろう?」
「関数の分け方ってこれでいいのかな?」
という不安もすぐに解消できます。
初心者のうちは、
“コードが正しいか”よりも“楽しく作ってみる”ことが大切!

ぜひこの体験をきっかけに、もっと自由にPythonを使ったアプリ作りにチャレンジしてみてください。
あわせて読みたい
今回の「おこづかい帳アプリ」でPythonの楽しさを感じた方は、ぜひ以下の記事もチェックしてみてください!
同じように、初心者向けにやさしく解説しています。
🔗 PySimpleGUIでデスクトップアプリを作る方法|見た目も整ったGUIを作成!
🔗 PythonでCSVやExcelに書き込む方法|スプレッドシート以外の選択肢も!
🔗 初心者でもすぐわかる!Pythonのクラス入門ガイド|オブジェクト指向をやさしく解説
🔗 Pythonでグラフを描く!Matplotlibの使い方を初心者向けにやさしく解説
🔗 【Win/Mac対応】Pythonスクリプトをexe化!PyInstallerで実行ファイルを作る方法
よくある質問(Q&A)
- Qこのアプリはスマホでも使えますか?
- A
このアプリはデスクトップ(Windows/Mac)向けに作られています。スマホで使うにはWebアプリ化やKivyなどの別ライブラリを使う必要があります。
- QCSVファイルの中身を編集しても大丈夫?
- A
はい、可能です。ただし、書式(カンマ区切り、3列:日付・内容・金額)を崩すとアプリが読み込めなくなる可能性がありますので注意しましょう。
- Q残高をグラフで表示することはできますか?
- A
できます!Matplotlibなどを使えば、日付ごとの収支を折れ線グラフで描くこともできます。詳しくは関連記事をご覧ください。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。