ClaudeCodeで自分専用家計簿システムを作ってみた!

投稿者: | 2026-04-03

こんにちは!

以前から「市販の家計簿アプリは機能が多すぎる」「逆に少なすぎて使いにくい」という悩みがありました。そこで今回、ClaudeCodeを使って自分専用の家計簿Webシステムを一から作ってみました!その試行錯誤の記録をまとめます。

🏦 システム概要:OpenHAB とは?

今回作ったシステムの名前は OpenHAB(Open Household Account Book)。家族みんなで使える家計簿Webアプリです。

  • PHPで実装したWebアプリケーション(サーバー:CORESERVER CoreX)
  • 家族全員がスマホやPCからアクセス可能
  • LINEと連携して、スマホだけで操作できる
  • AIを活用した支出分析・アドバイス機能付き

コード量はPHPファイルだけで約6,500行、19ファイルという規模になりました。

🛠️ 主な機能(10機能)

① 収支管理

収入・支出の基本的な登録・編集・削除。カテゴリ分けして一覧表示できます。

② 予算管理・アラート

カテゴリごとに月次の予算を設定。予算超過が近づくと通知を受け取れます。

③ 定期支出の自動登録

家賃や通信費など毎月固定の支出をcronジョブで自動入力。手動登録の手間がゼロに。

④ 立替管理

家族間の立替を記録して精算。誰がいくら立て替えているかが一目でわかります。

⑤ LINEレシートOCR(←ここが一番のポイント!)

LINEにレシートの写真を送るだけで、AIが自動読み取りして支出を登録してくれます。詳しくは後述します。

⑥ リマインダー通知

1回限り・毎週・毎月のリマインダーをLINEで受け取れます。支払い忘れ防止に活躍。

⑦ グラフ・レポート分析

Chart.jsを使った月次・カテゴリ別グラフで支出傾向を可視化。

⑧ 家族アカウント管理・権限制御

オーナーは全員の収支を閲覧、メンバーは自分の分のみ表示など、細かな権限設定が可能。

⑨ AIアドバイス・月次予測

Claude AIが支出傾向から月末予測と節約アドバイスを自動生成。毎日配信されます。

⑩ セキュリティ機能

2段階認証(TOTP)、レート制限(3回失敗で30分ブロック)、日本国内IPのみアクセス許可(ip-api.comで国判定)など、セキュリティもしっかり実装しました。

💻 技術スタック

区分 技術
バックエンド PHP 7.4+、MySQL/MariaDB、PDO
フロントエンド Chart.js 4.4.0、Vanilla JS、CSS
外部API Anthropic Claude(Opus/Sonnet/Haiku)、LINE Messaging API
インフラ CORESERVER CoreX(LiteSpeed Webサーバー)

😅 苦労した点・試行錯誤

問題①:OCR処理のタイムアウト

最初はLINEからレシート画像を受け取ったタイミングで、そのままClaude Vision APIを呼んでOCR処理をしようとしました。しかしLINEのWebhookは応答タイムアウトが短いうえ、共有サーバー(LiteSpeed)での長時間処理には制限があります。

解決策:非同期キューシステムの導入

  1. Webhookは受け取ったらすぐ ocr_queue テーブルにキューイング
  2. cronジョブ(process_ocr_queue.php)が定期的にキューを処理
  3. OCR完了後、LINEプッシュで「登録完了」を通知

キューテーブルの構造はシンプルです:

CREATE TABLE ocr_queue (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    user_id     INT NOT NULL,
    line_user_id VARCHAR(100) NOT NULL,
    image_url   TEXT NOT NULL,
    status      ENUM('pending','processing','done','error') DEFAULT 'pending',
    result_json TEXT,
    created_at  DATETIME DEFAULT CURRENT_TIMESTAMP,
    processed_at DATETIME
);

Webhookは画像URLをキューに積むだけで即座にレスポンスを返します:

// line_webhook.php - 画像メッセージ受信時
if ($message['type'] === 'image') {
    $imageUrl = "https://api-data.line.me/v2/bot/message/{$message['id']}/content";
    $stmt = $pdo->prepare(
        "INSERT INTO ocr_queue (user_id, line_user_id, image_url) VALUES (?, ?, ?)"
    );
    $stmt->execute([$userId, $lineUserId, $imageUrl]);
    // すぐに200 OKを返す(タイムアウト回避)
    http_response_code(200);
    exit;
}

この非同期設計でタイムアウト問題を完全に解消できました。

問題②:Claudeモデルの使い分け

コストとパフォーマンスのバランスを取るため、用途によってモデルを使い分けています:

  • Claude Opus:月次財務予測・予算計画(精度優先)
  • Claude Sonnet:LINEレシートOCR(速度と精度のバランス)
  • Claude Haiku:毎日の節約アドバイス(コスト優先)

📸 LINEのOCR機能の詳細

この機能が一番気に入っています。仕組みはこうです:

  1. LINEでレシートの写真を送信
  2. line_webhook.php がHMAC-SHA256で署名を検証してリクエストを受け付け
  3. 画像URLと情報を ocr_queue テーブルに保存(即レスポンス返却)
  4. cronが定期実行され process_ocr_queue.php がキュー処理を開始
  5. Claude Vision APIに画像を送り、金額・店舗名・カテゴリ・日付を自動抽出
  6. 支出トランザクションとして自動登録
  7. LINEプッシュ通知で「〇〇円(〇〇)を登録しました」と通知

cronで実行される処理のコアはこんな感じです:

// process_ocr_queue.php - Claude Vision APIでOCR処理
$response = $client->messages()->create([
    'model'      => 'claude-sonnet-4-5',
    'max_tokens' => 512,
    'messages'   => [[
        'role'    => 'user',
        'content' => [
            ['type' => 'image', 'source' => [
                'type'       => 'base64',
                'media_type' => 'image/jpeg',
                'data'       => base64_encode($imageData),
            ]],
            ['type' => 'text', 'text' =>
                'レシートから以下をJSON形式で抽出してください:' .
                '{"amount": 金額(数値), "vendor": "店舗名", "category": "カテゴリ", "date": "YYYY-MM-DD"}'
            ],
        ],
    ]],
]);
$ocr = json_decode($response->content[0]->text, true);

レシートをパシャっと送るだけで支出が記録される体験は、想像以上に便利でした。財布からレシートを出してアプリを開いて…という手間が完全になくなります。

🤖 ClaudeCodeで作った感想

今回のシステムはほぼすべてClaudeCodeとの対話で実装しました。特に良かった点:

  • セキュリティを自動的に考慮してくれる:CSRFトークン、セッション管理、SQLインジェクション対策など、指示しなくても実装してくれた
  • 既存コードとの整合性を保ってくれる:ファイルを読んでから「この設計に合わせて実装する」という動き方をしてくれる
  • エラーを自分で発見して修正する:実装後に「あ、これだとXXの場合に問題が起きる」と自分で気づいて直してくれることが多かった

一方で課題も感じました。大規模なシステムになると、前の会話の文脈を忘れてしまうことがあり、その都度「前回こう実装したから今回はこうして」と補足が必要でした。

✅ まとめ

ClaudeCodeを使って、ゼロから本格的な家計簿Webシステムを構築することができました。市販アプリでは実現できない「自分家族専用の仕様」「LINEで完結するUI」「AIによる自動分析」を1つのシステムに詰め込めたのは、自作ならではの強みです。

今後は以下の機能追加も検討中です:

  • 銀行明細の自動取込
  • 音声入力での支出登録
  • 家族間チャット機能

コードはまだ非公開ですが、ご興味のある方はお問い合わせください!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です