初心者向けPython記帳システム：100行で作る簡単アプリ

# はじめに

本書では、プログラミング初心者の方を対象に、Pythonを使ったシンプルな記帳システムを通じて、プログラミングの基礎を学んでいきます。記帳システムとは、日々の取引を記録し、データを管理する小規模なアプリケーションのことです。

このプロジェクトの目標は、Pythonで100行程度のコードを書き、実用的な小さなアプリケーションを完成させることです。その過程で、プログラムの基本構造やデータ処理の方法、ファイルの保存・読み込みなど、Pythonプログラミングにおける重要な要素を理解することを目的としています。

具体的には、以下のような機能を実装します：

取引の追加：ユーザーが取引の内容を入力し、記録します。
取引の一覧表示：記録された取引を確認します。
取引の削除：不要な取引を削除します。
データの保存・読み込み：CSVファイルに取引データを保存し、プログラム再起動後もデータを読み込みます。

この記帳システムを通じて、プログラミングの基本を実践的に学ぶとともに、自分で機能を追加したり、カスタマイズする力を養っていきましょう。

# コードの概要

### 1.必要なモジュールのインポート

datetimeとcsvモジュールを使用して、取引の日付管理とデータの保存機能を実現します。
![スクリーンショット 2024-10-24 165312.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/8959530e-b5f8-dc65-5d6a-766932cedb49.png)

### 2.Transaction クラス

 このクラスは各取引を管理するための基本構造を提供します。

⑴ **init**

取引の金額（amount）、説明（description）、カテゴリ（category）、日付（date）を受け取り、取引の各属性を初期化します。
![スクリーンショット 2024-10-24 165521.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/2747c4c3-4665-ef22-e504-7f66f35d98fe.png)

⑵ **str**

取引の情報を文字列として返し、可読性の高い形式で表示します。
![スクリーンショット 2024-10-24 165659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/8162033e-2a95-8634-c497-5cbc4056492a.png)

⑶ **to_dict**

取引データを辞書形式に変換し、CSV形式での保存や他システムとの連携に役立てます。
![スクリーンショット 2024-10-24 171025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/b332b5f9-7c92-a08e-f5c7-a9c8a594fd27.png)

### 3.Ledger クラス：

このクラスは、複数の取引をまとめて管理します。取引の追加、表示、削除、CSVへの保存、読み込みなどを一括で処理します。

⑴ **init**

取引リストの初期化と、CSVファイルからのデータ読み込みを行います。
![スクリーンショット 2024-10-24 171227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/f4dd71b8-a3b5-b122-19b8-ffab2db775be.png)

⑵ **add_transaction**

取引を追加し、そのデータを保存します。
![スクリーンショット 2024-10-24 171344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/a994c47a-1eff-675a-530d-7e727b1aa06a.png)

⑶ **view_and_sum_transactions_by_category**

カテゴリごとの取引をフィルタリングして表示し、カテゴリごとの合計金額を計算します。
![スクリーンショット 2024-10-24 171431.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/e10053fc-dfc2-be0d-a66d-c67e7d1664d8.png)

⑷ **view_transactions**

すべての取引を一覧表示します。
![スクリーンショット 2024-10-24 171524.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/dcf8fec4-02f1-0ae8-f172-dfae2405a6cd.png)

⑸ **sum_transactions**

全取引の合計金額を計算して表示します。
![スクリーンショット 2024-10-24 171603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/019c00c6-c105-3cc4-688e-7f335cb1a6b1.png)

⑹ **delete_transaction**

指定されたインデックスの取引を削除します。
![スクリーンショット 2024-10-24 171713.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/2cd0487e-33d7-448c-afbd-3e579dd8b044.png)

⑺ **save_transactions**

取引データをCSVファイルに保存します。
![スクリーンショット 2024-10-24 171757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/fb8a3c0c-f4af-a18f-fa79-f2b4d0000026.png)

⑻ **load_transactions**

CSVファイルから取引データを読み込みます。
![スクリーンショット 2024-10-24 172126.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/e6030dc4-3402-c748-faa2-dbbe0f69ffaf.png)


### 4.メイン関数

この部分では、ユーザーがメニュー形式で取引の管理を行います。while Trueによる無限ループを使用し、ユーザーが終了を選択するまで操作を続けられる仕組みです。

取引の追加：ユーザーが入力した金額、説明、カテゴリを基に取引を追加します。
取引の表示：登録されたすべての取引を一覧表示します。
カテゴリごとの取引表示と合計計算：特定のカテゴリに属する取引を表示し、その合計金額を計算します。
全取引の合計計算：登録された全取引の合計金額を計算・表示します。
取引の削除：指定したインデックスに基づいて取引を削除します。
終了：プログラムを終了します。

![スクリーンショット 2024-10-24 172633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/a4972fb7-31dc-1ea2-f950-57c07f66568f.png)


# 使い方の具体例

### 1.取引の追加

まず、プログラムを起動すると、メニューが表示されます。取引を追加するには、メニューから「1」を選択します。次に、追加したい取引の金額、説明、カテゴリを入力します。取引が正常に追加されると、「added」のように表示されます。
![スクリーンショット 2024-10-24 173510.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/cb5402b0-714a-023c-be5f-ae047dcf8987.png)

### 2.取引の表示

すべての取引を確認したい場合は、メニューから「2」を選択すると、これまでに追加した取引が一覧で表示されます。
![スクリーンショット 2024-10-24 174131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/66843b96-8b96-9e84-e384-7385d91f4478.png)

### 3.カテゴリごとの取引表示と合計計算

特定のカテゴリに属する取引だけを確認したい場合は、メニューから「3」を選択し、表示したいカテゴリを入力します。カテゴリ「food」に属する取引と、その合計金額が表示されます。
![スクリーンショット 2024-10-24 174301.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/73492393-f870-a73c-04de-b0da792d2d59.png)

### 4.全取引の合計計算

全ての取引の合計金額を計算するには、メニューから「4」を選択します。このように、全取引の合計金額が表示されます。
![スクリーンショット 2024-10-24 174403.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/323aaea0-879c-a605-92d6-9436b51bf2be.png)

### 5.取引の削除

特定の取引を削除するには、メニューから「5」を選択します。まず、削除したい取引のインデックスを確認し、インデックス番号を入力します。
![スクリーンショット 2024-10-24 174510.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/6eb08bb4-55d2-366c-ca12-c9cbbec55ba2.png)

### 6.CSVファイル一覧

取引データは自動的にCSVファイルに保存され、次回起動時に読み込むことができます。
![スクリーンショット 2024-10-24 175025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912377/506d4121-ec34-b39c-204e-a707b56db82f.png)



# 追加機能の提案

### 1.レポート生成機能（月次・年次）

月次レポート：ユーザーの取引データを月ごとに集計し、収支の傾向をレポートとして表示します。支出の多い項目や収入源をわかりやすくまとめることで、ユーザーの家計管理をサポートします。

年次レポート：1年間の取引データを基に、長期的な収支状況を把握できる年次レポートを生成します。

### 2.カテゴリーごとの支出割合を円グラフで表示

各カテゴリに対する支出の割合を円グラフとして視覚的に表示します。例えば、「food」「Entertainment」などのカテゴリ別に、全体の何％を占めるかをグラフ化し、ユーザーが一目で支出のバランスを確認できるようにします。

### 3.月・年ごとの収入と支出をグラフで表示

月ごとの収支グラフ：月ごとの収入と支出を棒グラフで表示し、どの月に支出が多かったか、どの月に収入が多かったかを一目で把握できるようにします。

年ごとの収支グラフ：長期的な収支の変化を把握するために、年単位での収支グラフを表示します。これにより、経済状況の推移を確認することができます。

### 4.ユーザー認証

ユーザーアカウントの作成：各ユーザーが自分のアカウントを作成し、ログインして利用できるようにします。これにより、個別のデータ管理が可能になり、複数のユーザーが同じアプリを使用しても各ユーザーのデータが保護されます。

ログイン機能：ユーザーがアカウントにログインし、自分の取引データを閲覧・操作できる機能を追加します。

### 5.モバイルアプリケーション

スマートフォンアプリ：スマートフォンやタブレットなどのモバイルデバイスでアクセスできるアプリケーションを開発します。これにより、ユーザーはいつでもどこでも取引を記録したり、確認したりできるようになります。

同期機能：デスクトップ版とモバイル版のデータをリアルタイムで同期し、複数のデバイス間で一貫したデータ管理を実現します。クラウドストレージや同期サービスを利用することで、シームレスなユーザー体験を提供します。


# まとめ

このプロジェクトを通じて、初心者でもPythonを使って実用的なアプリケーションを構築できることを示しました。100行程度のコードでも、取引管理システムのような実用的なプログラムを構築することができ、さらに拡張も容易です。この経験を活かし、より複雑なプロジェクトに取り組むことで、Pythonのスキルを向上させていきましょう。