レシートを撮ったあとの家計簿の見方。Obsidianで月ごとの支出を自動で集計する方法

iPad miniを使いたい

レシートを撮るだけで、家計簿のファイルはどんどん増えていきます。
でも、ファイルが増えるだけでは「今月いくら使ったか」は分かりません。

我が家では、月ごとの集計ページを1枚作っています。
月に1回くらい、iPadでそのページを開きます。
開くだけで、費目ごとの合計が表で出てきます。

この記事では、集計ページの作り方を紹介します。
コードはコピーして、2か所を書き換えるだけで使えます。

レシートを撮って記録する仕組みは、こちらの記事に書いています。
→ レシートを撮るだけでObsidian家計簿に。iPhoneショートカットで自動登録する方法

集計ページで分かること

集計ページを開くと、表が4つ並びます。

  1. 全体:その月の費目ごとの合計・件数・割合
  2. 家計:家計の分だけの表
  3. お小遣い:お小遣いの分だけの表
  4. 明細:1件ずつの日時・家計かお小遣いか・費目・金額

費目は、合計金額の多い順に並びます。
一番下の行が、その月の合計です。

明細には、記録したファイルへのリンクが付いています。
タップすると、そのレシートのファイルが開きます。
「この日用品費、何を買ったんだっけ?」と思ったら、すぐ中身を確認できます。

用意するもの

  • Obsidian:前の記事の家計簿フォルダがある保管庫
  • Dataview:Obsidianのコミュニティプラグイン(無料)

Dataviewは、ノートの中の情報を集めて、表にしてくれるプラグインです。
今回は、Dataviewの「JavaScriptのクエリ」という機能を使います。
iPadやiPhoneのObsidianでも使えます。

集計ページの作り方

手順は4つです。

  1. Dataviewを入れる
    設定の「コミュニティプラグイン」を開き、制限モードをオフにします。
    「閲覧」から「Dataview」を探して、インストールして有効にします。
  2. JavaScriptのクエリをオンにする
    Dataviewの設定で「Enable JavaScript queries」をオンにします。
  3. 新しいノートを作り、下のコードを貼る
    ノートの名前は自由です。我が家は mrec_202610 のように、年と月にしています。
  4. コードの2か所を書き換える
    集計する月と、家計簿フォルダの場所です。

書き換えるのは、コードの最初にある2つの値だけ。

  • month:集計する月。"2026-10" のように書きます。
  • folder:家計簿のファイルが入っているフォルダ。保管庫の中の場所を書きます。

次の月のページは、前の月のページをコピーして作ります。
書き換えるのは month の1か所だけです。

コピーして使えるコード

我が家で使っているコードです。
作ったのは私ではなく、Claude(AI)です。
私はコードの中身はほとんど分かりませんが、問題なく使えています。

```dataviewjs
// 集計する月(別の月を見たいときはここだけ変える)
const month = "2026-10";
const folder = '"家計簿"';

// spend フィールド「月,カテゴリ,金額」を1件ずつ取り出す
let rows = [];
for (let p of dv.pages(folder)) {
    if (!p.spend) continue;
    let items = Array.isArray(p.spend) ? p.spend : [p.spend];
    for (let item of items) {
        let parts = String(item).split(",");
        if (parts.length < 3) continue;
        if (parts[0].trim() !== month) continue;
        let dt = p.dt && p.dt.toFormat ? p.dt.toFormat("yyyy-MM-dd HH:mm") : String(p.dt ?? "");
        rows.push({
            source: p.file.name.startsWith("mpkt") ? "mpkt" : "mrec",
            category: parts[1].trim(),
            value: Number(parts[2].replace(/[^0-9.-]/g, "")) || 0,
            dt: dt,
            link: p.file.link
        });
    }
}

const yen = v => `${v.toLocaleString()}円`;

// カテゴリ別の合計・件数・割合の表
function summary(title, list) {
    dv.header(2, title);
    if (list.length === 0) {
        dv.paragraph(`${month} のデータはありません。`);
        return;
    }
    let map = {};
    let total = 0;
    for (let r of list) {
        if (!map[r.category]) map[r.category] = { sum: 0, count: 0 };
        map[r.category].sum += r.value;
        map[r.category].count += 1;
        total += r.value;
    }
    let tableData = Object.entries(map)
        .sort((a, b) => b[1].sum - a[1].sum)
        .map(([cat, m]) => [
            cat,
            yen(m.sum),
            `${m.count}件`,
            total > 0 ? ((m.sum / total) * 100).toFixed(1) + "%" : "-"
        ]);
    tableData.push(["**合計**", `**${yen(total)}**`, `**${list.length}件**`, "**100%**"]);
    dv.table(["カテゴリ", "合計", "件数", "割合"], tableData);
}

summary("全体(家計+お小遣い)", rows);
summary("家計(mrec)", rows.filter(r => r.source === "mrec"));
summary("お小遣い(mpkt)", rows.filter(r => r.source === "mpkt"));

// 明細
dv.header(2, "明細");
dv.table(
    ["日時", "記録", "種類", "カテゴリ", "金額"],
    rows
        .sort((a, b) => a.dt.localeCompare(b.dt))
        .map(r => [r.dt, r.link, r.source, r.category, yen(r.value)])
);
```

フォルダの場所は、'"家計簿"' のように、ダブルクォートの外をシングルクォートで囲みます。
書くのは、保管庫の一番上から見た場所です。
iCloud Driveから見た場所ではありません。

たとえば、保管庫の「お金」フォルダの中に家計簿フォルダがあるとします。
そのときは '"お金/家計簿"' と書きます。
最後に「/」は付けません。

ブログからコピーするときは、```dataviewjs の行から最後の ``` の行までを貼ってください。

集計の仕組み

このコードが読んでいるのは、各ファイルの中の spend の行だけです。

[spend::2026-11,日用品費,1080]

前の記事のプロンプトで、AIにファイルの最後に書かせている行です。
「月・費目・金額」の順に、カンマで区切っています。
1つのファイルに spend の行が2つ以上あれば、全部集計されます。

集計ページは、この行の月を見て、指定した月の分だけを集めます。
ファイル名の日付では絞っていません。

前の月のレシートを、あとから撮ることがあるからです。
たとえば10月に撮った9月のレシートは、9月の集計に入ります。

費目は、spend の行に書いてあるものがそのまま表に出ます。
プロンプトの選択肢にない費目でも、同じ形で書けば集計されます。

お小遣いも同じフォルダで分けて見る

我が家では、お小遣いで買ったものも同じ仕組みで記録しています。
家計と違うのは、ファイル名の頭だけ。

  • 家計:mrec_ で始まる
  • お小遣い:mpkt_ で始まる

お小遣い用にも、撮影版・写真版・テキスト版の3つを作っています。
中身は家計用と同じで、ファイル名の頭だけ変えています。
集計ページは、この頭の文字で家計とお小遣いを分けます。
そのため、全体・家計・お小遣いの3つの表が出ます。

お小遣いを分けない人は、そのままでも大丈夫です。
お小遣いの表に「データはありません」と出るだけです。

使ってみて気をつけていること

1. 中身のないファイルは集計に出ない

集計ページは、spend の行がないファイルを数えません。
AIが「生成が完了しました。」「ファイルを作成しました。」だけのファイルを作ることがあります。
そのときは、その買い物が集計から抜けます。

2. 同じレシートを2回記録すると、二重に数えられる

同じレシートを2回記録すると、そのまま2件として足されます。
合計がいつもより多いときは、明細で同じ金額が並んでいないか見てみてください。

3. 集計ページを作りすぎない

Dataviewのページを作りすぎると、Obsidianが重くなると感じています。
そのため、なるべく増やさないようにしています。
昔の月の集計ページは、使わなくなったら消しています。

消すのは集計ページだけです。
レシートのファイルは残るので、見たくなったら月を書き換えればまた出せます。

まとめ

レシートを撮るだけの家計簿は、記録するところまでは自動です。
集計ページを1枚作っておけば、見るほうも開くだけになります。

コードは、月とフォルダの2か所を書き換えるだけ。
中身が分からなくても使えます。
表が全部「データはありません」になったら、まずフォルダの場所を見直してください。

我が家が開くのは、今は月に1回くらいです。
本当は、もっとこまめに見たほうがいいと思っています。
開くだけで見られるので、まずは月1回から始めてみてください。

コメント