【実録】マネーフォワードの「未分類」を一瞬で消した日 ── 月次集計 15分→3秒、ルールは育てるだけ

未分類、消えた。家計簿の「未分類」を一度覚えさせれば、来月からはAIが自動で仕分けてくれる。第18回アイキャッチ画像。AIワークフローカテゴリー。 AIワークフロー
非エンジニアAIラボ - 第18回

※この記事にはアフィリエイトリンクが含まれます(Amazon・楽天)。

マネーフォワードをエクスポートするたびに、「未分類」の行が必ず残る。先月どこで何に使ったのか集計しようとすると、「セブン-イレブン支払い」「クレジット 12月」「ご利用分」── 店名が分類されていない行が10件、20件と積み重なっていく。それを一つひとつ手で直して、Excelに貼って、合計を出すのに毎月15分かかっていた。

>

そのルーティンが、今月から3秒になった。 自分で育てた「店名の辞書」を持つスクリプト ── mf-categorizer ── が、一度覚えた店を次の月も自動で分類してくれる。設定は初回だけ。あとはルールが育っていく。

この記事は、AIワークフロー連作「自動化レシピ集」 の第4レシピです。第17記事ではブログ運営の書籍CTAを自動化し、第20記事ではテスラ株のニュースをLINEで自動受信する仕組みを作りました。今回は「家計版」── 毎月の支出把握をAIルールで自動化します。

ツールは GitHub で全公開しています: fukuokacolor-web/mf-categorizer


1. 発端 ── 毎月15分の「未分類つぶし」

副業ブログを始めた最初の月、月¥17,078のコストをすべて公開した記事を書きました。あのとき、自分の家計をきちんと把握しようと思い直して、マネーフォワードMEで毎月の支出を集計するようにしました。

ところが、続けてみると毎月同じ問題が起きる。

マネーフォワードのCSVをエクスポートすると、「大項目」「中項目」の列に「未分類」が並んでいる行が必ずある。コンビニで支払ったクイックペイ、クレジットカードの引き落とし明細、近所のスーパーの支払い ── マネーフォワードが自動で分類してくれる店もあるけれど、そうでない店はそのまま「未分類」のまま残る。

最初の月はしかたなく一件ずつ手で直した。「これは食費」「これは日用品」と打ち込んで、Excelに貼り付けて、SUM関数で合計を出す。15分かかった。

翌月も同じ。同じスーパーが、また「未分類」で出てくる。先月直したのに、CSVをエクスポートし直すとリセットされている。

マネーフォワード上での手動修正はCSVに引き継がれない、ということに気づくまでしばらくかかった。毎月15分、同じ作業を繰り返していた。

同じ作業を100回繰り返す前に、自動化する側に回った日 ── 第17記事でそう書いた。まさにこれが、家計版のその状況だった。

毎月エクスポートするたびに同じ店が「未分類」で出てくるなら、自分の手で「この店はこのカテゴリ」と一度覚えさせて、翌月以降は自動で分類させればいい。そう思って作ったのが、mf-categorizer です。


2. 設計 ── 自動化ルールを「辞書で育てる」という考え方

mf-categorizerの発想はシンプルです。

「一度覚えた店は、翌月も同じルールで仕分ける」

マネーフォワードのCSVを読み込んで、自分で用意した「店名 → カテゴリ」の辞書と照合し、分類し直す。辞書に載っていない店は「要確認」シートに出す。要確認を見て、また辞書に追記する。これを毎月繰り返すうちに、自動分類できる件数がどんどん増えていく。

辞書は rules.json というファイルに書きます。こんな形です:

{"match": "セブンイレブン", "category": "食費", "subcategory": "コンビニ"}

match は部分一致で動きます。「セブンイレブン」と書けば、「セブンイレブン 博多駅前店 福岡県 福岡市」のように長い店名でもすべてヒットします。Pythonのコードを書く必要はありません。店名とカテゴリ名を、メモ帳に書く感覚で追加するだけです。

同じ店でも金額帯で振り分けたい場合

少し凝ったルールも書けます。たとえばショッピングモール ── フードコートでランチを食べることもあれば、子ども服を買うこともある。店名は同じでも、金額によってカテゴリが違う。

そういうケースに使うのが「金額帯分岐」です:

{
  "match": "ららぽーと",
  "splits": [
    {"max_amount": 1200, "category": "食費",       "subcategory": "外食"},
    {                    "category": "衣服・美容", "subcategory": "子供服"}
  ]
}

「ららぽーとで1,200円以下なら外食(フードコート)、超えたら子ども服」と読みます。max_amount の設定がないものが最後のデフォルトになるので、上から順番に条件を並べれば多段階の振り分けもできます。

プライバシー設計:ルールは手元にしか残らない

rules.jsonには、自分がよく使う店名が並んでいきます。これは個人の行動パターンそのものなので、外に出てはいけない。GitHubで公開するとき、このファイルは .gitignore に入れて絶対にcommitしない設計にしました。

配布されるのは rules.example.json(全国チェーンのみの汎用サンプル)だけです。使う側は「これをコピーして自分用に育てる」という流れになります。取引データが入ったExcelファイルやCSVも同様に .gitignore で除外しています。


3. 実装 ── Pythonスクリプトの役割

mf-categorizerは1つのPythonスクリプト mf_categorize.py で動きます。処理の流れはこうです:

① MFのCSVを読み込む(cp932/Shift-JIS形式 = マネーフォワードのCSV標準形式)
② rules.jsonのルールと照合して各取引を再分類
③ Excelファイルを3シートで書き出す
   - 取引明細 … MFの分類とAIの分類を並べて表示
   - 月次サマリー … カテゴリ別の合計
   - 要確認 … ルールにヒットしなかった取引

色分けの意味

取引明細シートは行ごとに色が変わります:

色意味
黄色MFの分類とAIの分類が違う(=MFの自動分類を上書きした)
赤ルールにヒットしなかった(=要確認、来月覚えさせる候補)
灰振替(クレジット引き落とし等、収支の集計対象外)
白MFとAIの判定が一致(何も変えていない)

黄色が多いほど「マネーフォワードの分類を自分好みに上書きできている」、赤が多いほど「まだ覚えさせていない店がある」という読み方です。初月は赤だらけでも、毎月要確認を1件ずつ rules.json に追記していけば、翌月の赤が減っていきます。

実装中に踏んだ罠:全角と半角の1文字違い

少し話がそれますが、開発中に1つハマりました。

マネーフォワードのCSVヘッダは「金額(円)」と全角括弧を使っています。Pythonで r.get("金額(円)", "0") と半角括弧で書いてしまうと、キーが一致せず全件0円として処理されてしまう。合計が0円のサマリーが出てきたときは「バグか?」と思いましたが、原因は括弧1文字の全角/半角の違いでした。

見た目では区別がつかないこの手の問題は、非エンジニアには特にわかりにくいと思います。デバッグの手順は「ヘッダを repr() で出力して実際の文字コードを確認する」。このひと手間で解決しました。記事の中に書いたのは、同じところで詰まる人の助けになるかもしれないからです。


4. 実録 ── 初回セットアップから「ゼロ達成」まで

実際にどう使うか、順を追って書きます。

Step 0: インストール

git clone https://github.com/fukuokacolor-web/mf-categorizer
cd mf-categorizer
pip install -r requirements.txt

必要なライブラリは openpyxl だけです。

Step 1: ルールファイルを作る

cp rules.example.json rules.json

rules.example.json には全国チェーンの基本ルールが入っています。これをコピーして、自分がよく行く店を追記していきます。書き方は:

{"match": "よく行くスーパーの名前", "category": "食費", "subcategory": "食料品"}

「category」に使えるのは自由です。自分がわかりやすい名前で作ればいい。「食費」「日用品」「交通費」「サブスク」「自動車」「教養・娯楽」「衣服・美容」あたりを最初に揃えておくと月次サマリーが見やすくなります。

Step 2: マネーフォワードからCSVをエクスポート

マネーフォワードME → 家計簿 → 対象月 → 「収入・支出詳細」→「ダウンロード」→ CSVを選択します。ファイル名は「収入・支出詳細_2026-05-01_2026-05-31.csv」のような形になります。

Step 3: スクリプトを実行

python mf_categorize.py ~/Downloads/収入・支出詳細_2026-05-01_2026-05-31.csv

数秒で output/ フォルダにExcelファイルが出てきます。

出力されたExcelを見てみる

実際の出力(サンプルデータによる出力例)がこちらです。

取引明細シート — 黄=MFとAIで判定が違う行、赤=要確認、灰=振替
mf-categorizer 出力 ① 取引明細シート(サンプルデータ)

MFが「未分類」としていた「ENEOS ○○ SS」「スターバックス ○○店」「ダイソー ○○店」などが、AIの列では「自動車/ガソリン」「食費/カフェ」「日用品/日用品」に分類されています。「ららぽーと ○○ フードコート」(-1,100円)は金額帯ルールが効いて「食費/外食」に、「ららぽーと ○○ キッズ衣料」(-6,800円)は「衣服・美容/衣服」に自動振り分けされています。

月次サマリーはこうなります:

月次サマリーシート — カテゴリ別合計
mf-categorizer 出力 ② 月次サマリーシート(サンプルデータ)

「食費 -10,540円 / 衣服・美容 -6,800円 / 自動車 -5,500円 / サブスク -3,890円 …」と、カテゴリ別の合計が一覧で出ます。件数も表示されるので、「食費が多いのは件数が多いから?それとも1件が高い?」という確認がすぐできます。

そして「要確認」シートがこちら:

要確認シート — ルールに無かった取引
mf-categorizer 出力 ③ 要確認シート(サンプルデータ)

Amazonと給与の2件が「要確認」に出ています。Amazonはルールに書いていないのでヒットせず、給与は収入なのでデフォルトで未分類扱い。「ヒント」列には「Gmail の注文確認メールと突合すれば品目わかる(Phase B)」と表示されています。これについては後述します。

学習サイクル:赤を1件ずつ潰していく

「要確認」に出た店を rules.json に追記すると、来月からその店は自動で分類されます。毎月このシートを見て、1〜3件追記するだけ。月を重ねるごとに赤が減り、初月に赤だらけだった取引明細が、半年後にはほぼ白と黄色だけになります。


5. 限界の正直開示 ── クイックペイ・Amazon・イオン問題

このツールが苦手なことを正直に書いておきます。

クイックペイ / Apple Pay は店名が落ちている

クイックペイやApple Payで支払うと、マネーフォワードには「クイックペイプラス決済」「iD決済」のような決済方法名しか来ません。どのお店で使ったかは記録されない。

rules.example.json には「クイックペイプラス」→「食費/コンビニ」というルールを入れてありますが、コンビニ以外でクイックペイを使うと分類がズレます。スーパーで使っても「食費/コンビニ」になる。

これはMFのAPI仕様の限界で、現時点では解決策がありません。クイックペイの件数が多い場合は、金額帯で「少額 = コンビニ系」「高額 = スーパー系」に振り分けるルールを書くと精度が上がります。

Amazon / 楽天は品目が不明

Amazon.co.jpの支払いはMFに金額と「Amazon.co.jp」の店名しか来ません。本を買ったのか、日用品を買ったのか、子ども服を買ったのかは分からない。

デフォルトでは「ショッピング/その他」に分類されますが、「実は食費と日用品が混ざっている」という状況はよく起きます。

将来的にはGmailの注文確認メールと突合することで品目を特定できるかもしれません。これがPhase Bです(後述)。

スーパー兼日用品店は「食費 vs 日用品」の比率が不明

イオンやイトーヨーカドーのようなスーパー兼日用品店は、レシートを見ないと「食費と日用品がどの割合か」分かりません。ルールでは「イオン → 食費/食料品」と割り切っていますが、日用品を買っていた月は実際より食費が多く出ます。

これはレシート連携がないかぎり解決できない問題です。「大まかに把握できればいい」という用途には支障ありませんが、「日用品費を正確に追いたい」という場合は手動修正が必要になります。


6. GitHub公開 ── プライバシー設計と配布判断

このツールを公開するにあたって、一番気になったのがプライバシーでした。rules.jsonには自分がよく行く店の名前が並ぶ。家計データのExcelには実際の支出金額が入っている。これをうっかりGitHubに上げてしまったら大変です。

そこで4つのファイルを .gitignore で除外しています:

ファイル内容対策
rules.json自分専用の店名辞書.gitignore で除外
output/*.xlsx再分類済みExcel.gitignore で除外
*.csvMFエクスポートの取引データ.gitignore で除外
.env将来API連携時のキー.gitignore で除外

GitHubリポジトリに上がるのは:

  • mf_categorize.py(メインスクリプト、個人情報なし)
  • rules.example.json(全国チェーンのみのサンプル)
  • README.md / LICENSE / requirements.txt

使う側は「rules.example.json をコピーして自分用に育てる」という流れです。自分でカスタマイズしたルールは、手元にしか存在しない。この設計なら、フォークして自分のリポジトリに置いても、個人の行動パターンが外に漏れることはありません。

まずは README だけ見てみるだけでもイメージが掴めます: fukuokacolor-web/mf-categorizer

rules.example.json を見てみれば、自分の行きつけの店名を追加するだけだと分かります: rules.example.json


7. 次のステップ ── 家計版AIワークフローの全体像

このツールを作って、月次の財務確認の流れがこうなりました。

まず試してみるなら、rules.example.json を開いて、自分がよく行くコンビニやスーパーの名前を1行追加するだけで始められます。GitHub から clone してすぐ動かせます: fukuokacolor-web/mf-categorizer

以前:

  • マネーフォワードを開く → CSVエクスポート → 未分類を手で直す(15分) → Excelで集計

今:

  • マネーフォワードを開く → CSVエクスポート → スクリプト実行(3秒) → Excelを確認

未分類をつぶす作業がなくなったので、月次確認の時間が大幅に短くなりました。

第20記事のテスラLINEレポートと組み合わせると、月次の財務確認がこうなります:

  • 投資監視: 毎朝8時にLINEでテスラ株+原油+金利の状況を把握
  • 支出把握: 月末にスクリプト1本でカテゴリ別の支出サマリーを確認

この2本が揃うと、「入ってくるお金(投資)」と「出ていくお金(支出)」を月10分以内で確認できる体制になります。

Phase B の予告

今のツールには正直な限界があります。「ならぽーと方式」で金額帯で振り分けても、Amazon/楽天の支出が何に使ったお金なのか、品目まではわかりません。月の食費が2万円なのか、子ども服が3万円なのか、家計の本当の内訳はAmazonとQuicPayの中に埋まっています。

Phase B では、GmailのAmazon注文確認メールを自動で読んで、mf-categorizerの出力と突き合わせる仕組みを作る予定です。これが実現すると、「Amazon ¥3,580」の行が「Amazon / 書籍 ¥2,100 + 日用品 ¥1,480」として品目ごとに分解できるようになります。

自動化レシピ集に随時追加していきます。


おわりに

マネーフォワードを入れても未分類が残る ── そのイライラは、「ツールが悪い」のではなく「自分用の辞書が育っていない」というだけでした。

一度覚えさせれば来月は自動。来月また覚えさせれば再来月も自動。ルールは月を重ねるごとに育っていく。半年後の自分は、今の自分が積み上げたルールに乗っかって、何もしなくても家計が整理されている状態になっています。

「未分類ゼロ」は目的ではなく、毎月の家計把握を普通の習慣にするための入口でした。

📚 関連書籍で深掘りしたい方へ
『AI 思考 技法』
今回のツール設計の発想も、ルールを「育てる」という考え方も、この本に背中を押された。AIを「相棒」として使うための56の技法が一冊に。1人で考えるのが苦手な方や、自分の思考の型を増やしたい方に。
Amazonで中身とレビューを見る ▶
楽天市場でポイント還元を見る ▶
※Amazonアソシエイト・楽天アフィリエイト・PR

続編記事

タイトルとURLをコピーしました