AI作CLI家計簿アプリのコードを自分なりに解釈して解説した。【家計簿アプリ開発#3】

プログラミング初学者の家計簿アプリ開発#3

2025/10/8

1.前回の振り返り

前回の投稿はこちらから

⬛︎AIに聞いたCLI家計簿アプリのコードを模写コーディングした。
→模写コーディングまではできたけれど、コードの理解まではできなかった。ここまで。

2.本日の作業内容

⬛︎前回模写コーディングしたコードを理解して、自分なりに解説。

3.実際のコードと解説

コードが長いので、まず小分けに解説してから最後に全体のコードを貼ります。

①今回使いたいモジュールをインポートしておきます(csv, datetime)。
 csvファイルをFILENAMEという変数に格納しておき、使いやすくしておきます。

import csv
from datetime import date

FILENAME = 'money_diary.csv'

②input関数を使って「日付」「項目」「金額」「メモ」の入力を受け取る関数を作ります。

def add_record():
d = input("日付(空欄で今日): ") or str(date.today())
category = input("項目: ")
amount = int(input("金額(支出はマイナスで記入): "))
note = input("メモ: ")

with open(FILENAME, "a", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow([d, category, amount, note])
print("記録しました。")

・日付は空欄入力だった場合自動的に今日の日付が記入されるように、datetimeモジュールで対応しています。
・金額は、受け取った値を計算で使えるようにintを使って型変換しておきます。支出をマイナスで記入してもらうことで、残高を計算できるようにしておきます。
・受け取った値はcsvファイルに追記していきます。

③残高を計算して表示するための関数を作ります。

def show_records():
total = 0
print("\n=== 家計簿一覧 ===")

try:
with open(FILENAME, "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
total += int(row[2])
print(f"\n合計残高: {total}円\n")
except FileNotFoundError:
print("記録がありません。\n")

・try, exceptを使うことで、もし記録がなかったときにエラーでプログラムが止まることを防ぎます。
・受け取った値をcsvファイルに追記しているので、row[2]で金額の列を指定し合計(つまり残高)を計算します。

④アプリを開いた時にメニューを表示し、数字を入力することでメニュー選択ができる関数を作ります。

def main():
while True:
print("=== 家計簿アプリ ===")
print("1. 収支を追加")
print("2. 履歴を表示")
print("3. 終了")
choice = input("番号を選んでください: ")

if choice == "1":
add_record()
elif choice == "2":
show_records()
elif choice == "3":
print("アプリを終了します。")
break
else:
print("無効な入力です。もう一度入力してください。\n")

if __name__ == "__main__":
main()

・while Trueを使うことで、収支を連続して記入する際や続けて履歴(残高)を確認する際にも、何度もアプリを開かなくていいようにしています。終了選択時はbreakで抜けるようにして、無限ループを防ぎます。
・main関数内にそれぞれのメニューについてのコードを記入すると、複雑でわかりにくくなってしまうため、それぞれのメニューに関しては別の関数にまとめておき、ここで関数を呼び出すようにしています。

最後に全体のコードです

import csv
from datetime import date

FILENAME = 'money_diary.csv'

def add_record():
d = input("日付(空欄で今日): ") or str(date.today())
category = input("項目: ")
amount = int(input("金額(支出はマイナスで記入): "))
note = input("メモ: ")

with open(FILENAME, "a", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow([d, category, amount, note])
print("記録しました。")

def show_records():
total = 0
print("\n=== 家計簿一覧 ===")

try:
with open(FILENAME, "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
total += int(row[2])
print(f"\n合計残高: {total}円\n")
except FileNotFoundError:
print("記録がありません。\n")

def main():
while True:
print("=== 家計簿アプリ ===")
print("1. 収支を追加")
print("2. 履歴を表示")
print("3. 終了")
choice = input("番号を選んでください: ")

if choice == "1":
add_record()
elif choice == "2":
show_records()
elif choice == "3":
print("アプリを終了します。")
break
else:
print("無効な入力です。もう一度入力してください。\n")

if __name__ == "__main__":
main()

4.学びと今後の課題

 関数ってこういう風に使うのかっていうのが理解できたのと、便利さを知った。
 このコードで実際にアプリを動かしてみると、ちゃんと動いた!使い方さえちゃんとわかっていれば特に問題なく使えるのかなとは思うけれど、もっと自分好みに変えていきたい!まずは何を変えたいのか(修正や追加など)について明確にしていく必要がある。

5.次回の予定

⬛︎AI作家計簿アプリをわだの家計簿アプリに変えていくために、現時点で改善したいことを明確にする。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

どうもこんにちは、わだです。プログラミングなんて未知の世界。そんなわだがエンジニアになるまでを綴っていきます。

コメント

コメントする