AIの業務活用

Claude Codeで最初のツールを作る:家計簿CSVの月別合計

これまでに作った架空のexpenses.csvと要件メモを使い、最初の小さなPythonツールを作る流れを練習します。依頼文に入力例・期待出力・制約をまとめて入れ、完成したsummarize.pyをClaude CodeではなくGPTチャットのPythonツールで実際に実行し、結果を確認します。

目次を表示

対象読者Claude Codeのインストールと最初の読み取り練習を終え、小さな1ファイルを対象に初めてコード生成を試したい初心者

準備するもの
  • vibe-expenses練習フォルダーと架空のexpenses.csvが用意されていること
  • Claude Codeでファイルを変更する前に変更内容を確認する流れを理解していること
  • Pythonがインストールされており、ターミナルでpythonコマンドを実行できること
  • 実際の個人情報や実際の決済履歴ではなく、架空データだけを使うこと

01最初のツールは入力1つ・出力1つから小さく始める

最初の実習の目標は、多機能な家計簿アプリではなく、expenses.csvを読み込んで月別のamount合計だけを出力するsummarize.pyという1ファイルです。範囲を小さくすると、AIが作った結果が正しいかを人が直接確認しやすくなります。入力ファイルはUTF-8 CSVで、列名はdate, category, amountです。dateはYYYY-MM-DD形式、amountは整数とします。

項目今回の実習で固定する内容確認基準
入力ファイルexpenses.csv元ファイルを変更しない
入力列date, category, amount別の列を勝手に要求しない
出力月別amount合計2026-09 = 26600, 2026-10 = 9800
実装範囲summarize.py 1ファイル不要な設定ファイルやパッケージを追加しない
ライブラリPython標準ライブラリ外部パッケージをインストールしない

この段階で重要なのは、「家計簿を作って」のような広い依頼をしないことです。AIがUI、データベース、グラフ、ログインなどの機能を勝手に追加する余地を減らし、1回の実行で正解と照合できる作業だけを任せます。

02依頼文に入力・期待出力・制約をまとめて入れる

Claude Codeに作業を依頼するときは、入力ファイルの構造と正解を一緒に提示します。期待出力があれば、AIがコードを書いた後に何を満たすべきかが明確になり、ユーザーは結果を目で比較できます。また、「標準ライブラリだけを使う」「元のCSVを変更しない」「summarize.pyだけを書く」のように、してはいけない範囲も一緒に書きます。

プロンプト
現在のフォルダーにあるexpenses.csvを読み込み、月別のamount合計を出力するsummarize.pyを作ってください。

入力:
- UTF-8 CSV
- 列名: date, category, amount
- date形式: YYYY-MM-DD
- amountは整数

期待出力:
2026-09 = 26600
2026-10 = 9800

制約:
- Python標準ライブラリだけを使用
- expenses.csvは変更しない
- 実行コマンドは python summarize.py expenses.csv
- 必要なファイルと変更内容を先に説明した後、summarize.pyだけを書いてください。

このコードブロックはClaude Codeの応答ではなく、ユーザーが入力する依頼文です。依頼文にはすでに正解として確認する値が含まれているため、後で結果がもっともらしく見えるかだけではなく、2つの数値が正確に一致するか比較できます。

03ファイルを変更する前に、何を作ろうとしているか確認する

Claude Codeは必要なファイルを読み、ファイル変更やコマンド実行の前に承認を求めることがあります。承認画面が出たらすぐYesを押すのではなく、どのファイルを読んだのか、新しく作るファイルがsummarize.pyだけか、expenses.csvに触れないかを確認します。初めて見るコマンドを実行しようとしている場合は、その目的を説明してもらっても構いません。

プロンプト
変更する前に確認します。
1) 読むファイルと作るファイルをそれぞれ教えてください。
2) expenses.csvを変更しないことを確認してください。
3) 外部パッケージをインストールしないことを確認してください。
4) 実行後に期待出力と比較する方法を1行で教えてください。

Claude Codeの実際の回答は環境や時期によって変わる可能性があるため、この記事では特定の応答を成功例のようには作りません。確認すべき対象は応答の文体ではなく、ファイルの範囲とコマンドの範囲です。

04検証用の完成コードと実行コマンドを確認する

以下のsummarize.pyは、この記事の要件を満たす検証用の完成コードです。csv.DictReaderで各行を読み、dateの先頭7文字からYYYY-MMを取り出し、amountを整数に変換して月ごとに加算します。出力順を固定するため、月のキーを並べ替えます。このコードはClaude Codeで実際に生成された応答をコピーしたものではなく、記事の実習結果を再現するために作成し、別途実行確認したコードです。

プロンプト
import csv
import sys
from collections import defaultdict

def summarize_monthly(path):
    totals = defaultdict(int)

    with open(path, "r", encoding="utf-8", newline="") as f:
        reader = csv.DictReader(f)
        for row in reader:
            month = row["date"][:7]
            amount = int(row["amount"])
            totals[month] += amount

    return totals

def main():
    if len(sys.argv) != 2:
        raise SystemExit("Usage: python summarize.py expenses.csv")

    totals = summarize_monthly(sys.argv[1])
    for month in sorted(totals):
        print(f"{month} = {totals[month]}")

if __name__ == "__main__":
    main()

標準ライブラリだけを使うため、追加パッケージのインストールは不要です。実行コマンドは以下のとおりで、Windows環境でpythonの代わりにpyが設定されている場合は`py summarize.py expenses.csv`を使えます。

プロンプト
python summarize.py expenses.csv

05実行結果を期待値と1行ずつ照合する

GPTチャットのPythonツールで上のコードと架空のexpenses.csvをファイルとして保存し、`python summarize.py expenses.csv`を実際に実行しました。標準出力は下の2行と正確に一致しました。この検証はClaude Codeで行ったものではありません。

プロンプト
2026-09 = 26600
2026-10 = 9800
期待値実行値判定
2026-092660026600一致
2026-1098009800一致

この段階では、2行が一致したという事実だけを確認します。今後、別形式のCSV、空の値、不正な数値まで全部処理できると拡大解釈してはいけません。現在のテストデータと現在の要件に対してのみ、結果が一致したという意味です。

合計は手計算でも一度確認できます。9月は12000 + 1450 + 8500 + 3200 + 1450 = 26600で、10月は9800が1件なので9800です。このような小さな例では、プログラム出力と人が計算した基準値が同じかを相互確認しておくと、後で機能を拡張したときにどこから結果が変わったか追跡しやすくなります。

06正解が合っていれば機能を追加せず止める

最初のツールでよくある範囲拡大は、「せっかく作ったのでカテゴリ別合計、グラフ、自動保存も追加しよう」といったものです。しかし今回の記事の完了条件は、月別合計の2行が合っていることです。完了条件を満たしたら、現在の状態を基準点として残し、次の機能は別の依頼に分ける方がよいでしょう。

  • summarize.py以外に想定外のファイルが増えていないか確認する。
  • expenses.csvの内容が変わっていないか確認する。
  • 外部パッケージのインストールが追加されていないか確認する。
  • 実行結果の2行が期待値と正確に一致するか確認する。
  • 追加機能は今回の依頼に混ぜず、次の作業として分ける。

次の記事では、毎回長い制約を書き直さなくて済むよう、プロジェクトのルールをCLAUDE.mdに整理します。このファイルも強制設定ではなく、Claude Codeがセッション開始時に読むプロジェクトの文脈なので、短く具体的に保つことが重要です。

自分で確認する項目

GPTチャットのPythonツールでPython 3を使い、summarize.pyと架空のexpenses.csvを保存した後、`python summarize.py expenses.csv`を実行 · Claude Codeの実行なし

  • Pythonコードが標準ライブラリのcsv, sys, collections.defaultdictだけを使っているか確認
  • expenses.csvをUTF-8の読み取り専用で開き、元ファイルを変更していないか確認
  • dateの先頭7文字で月を求め、amountをintに変換して合計しているか確認
  • 実際の実行stdoutが`2026-09 = 26600`と`2026-10 = 9800`の2行に正確に一致するか確認
  • 依頼文に入力・期待出力・標準ライブラリ制約・元ファイル変更禁止が含まれているか確認
  • Claude Codeで実行または検証したと誤って表現していないか確認
検証範囲の限界

検証はこの記事の6行の架空CSVだけを対象に実施しました。空の値、不正な日付、数値ではないamountなどの例外入力まで検証した結果ではなく、Claude Code自体の生成結果や画面も実際にはテストしていません。