ファイナンシャルプランナーって信用できないじゃないですか。信用できるかどうか判断するためには相手と同等以上の金融知識が必要になる。人間には利害関係があり、不動産屋と金融屋は特に倫理観がないので、利害関係がない分、たとえハルシネーションがあったとしてもLLMのほうがマシだと考える。

ということでMoneyForward ME の家計簿データをLLMに診断してもらうということを考える。

MoneyForward ME の家計簿データを一括でダウンロードするブックマークレット

https://gist.github.com/cho45/e0ed3e408f87ab9a5c29e2d612db82ab

過去1年分の取引履歴CSVデータを結合したものと、資産推移を以下のような形式で一括でダウンロードする。transactions 以下は構造化されていないCSVがそのまま入っている。

これ自体も Claude Code に指示しつつ書いたのでほぼ手は入れてない。

### JSON構造

```json
{
  "exportDate": "2024-08-29",
  "period": {
    "from": "2023-09",
    "to": "2024-08"
  },
  "monthlyAssets": [...],
  "transactions": {...}
}
```

### フィールド詳細

#### `exportDate`
- データを取得した日付(YYYY-MM-DD形式)

#### `period`
- `from`: 取得期間の開始月(YYYY-MM形式)
- `to`: 取得期間の終了月(YYYY-MM形式)

#### `monthlyAssets`
月末時点の資産データの配列。各要素の構造:
```json
{
  "date": "2024-08-31",
  "assets": {
    "現金・預金": 1000000,
    "投資信託": 500000,
    "株式": 300000,
    "その他": 50000
  }
}
```

#### `transactions`
取引履歴データ:
```json
{
  "format": "csv",
  "encoding": "utf-8",
  "successCount": 12,
  "failedMonths": [],
  "rowCount": 365,
  "data": "\"計算対象\",\"日付\",\"内容\",\"金額(円)\",\"保有金融機関\",\"大項目\",\"中項目\",\"メモ\",\"振替\",\"ID\"\n\"1\",\"2024/08/25\",\"給与 ABC株式会社\",\"300000\",\"△△銀行\",\"収入\",\"給与\",\"\",\"0\",\"abc123def456ghi789\"\n..."
}
```

- `successCount`: 正常に取得できた月数
- `failedMonths`: 取得に失敗した月のリスト
- `rowCount`: 取引データの行数(ヘッダー除く)
- `data`: 実際のCSVデータ(Shift-JISからUTF-8に変換済み、ダブルクォート付き)

### CSVデータフォーマット詳細

`transactions.data` に含まれるCSVは以下の構造です:

#### ヘッダー行
```
"計算対象","日付","内容","金額(円)","保有金融機関","大項目","中項目","メモ","振替","ID"
```

#### データ行の例
```
"1","2024/08/29","コンビニA店","-500","△△銀行","食費","食料品","","0","abc123def456"
"1","2024/08/28","給与 ABC株式会社","250000","△△銀行","収入","給与","","0","def456ghi789"
"1","2024/08/27","電力会社","-8500","○○カード","水道・光熱費","電気代","","0","ghi789jkl012"
"0","2024/08/26","証券会社 積立","30000","△△銀行","未分類","未分類","","1","jkl012mno345"
```

#### 各列の詳細

1. **計算対象**: 家計簿の計算に含めるかの判定(1=計算対象、0=計算対象外)
2. **日付**: YYYY/MM/DD形式の取引日
3. **内容**: 取引の説明文(店舗名、サービス名など)
4. **金額(円)**: 取引金額(収入は正数、支出は負数)
5. **保有金融機関**: 連携している金融機関名
6. **大項目**: MoneyForwardの大分類カテゴリ
   - 例:収入、食費、住宅、水道・光熱費、通信費、交通費、税・社会保障、日用品、健康・医療、教養・教育、趣味・娯楽、衣服・美容、その他、未分類
7. **中項目**: 大項目の下位分類
   - 例:給与、食料品、家賃・地代、電気代、ガス・灯油代、インターネット、電車、所得税・住民税など
8. **メモ**: ユーザーが手動で入力したメモ(空白の場合が多い)
9. **振替**: 振替取引の場合は1、通常取引は0
10. **ID**: MoneyForward内部のユニークな取引ID

LLMへ指示をするプロンプト

家庭状況によって必要な診断が異なるので、ここに関しては↑のフォーマット情報を利用してプロンプトを生成するコードをLLMに書かせるのがよいと思う。

例えば最終的なプロンプトが以下のようになるようなコード自体をLLMに書かせる。

あなたは家計の浪費防止に特化したファイナンシャルアドバイザーです。以下のデータを基に「無駄な支出の特定」と「浪費防止策」を重点的に分析してください。

【家庭状況】
- 世帯主: 38歳
- 家族構成: 配偶者(38歳)・子供1人 (11歳)
- 住居: 首都圏、賃貸マンション(家賃月xx万円)
- 投資方針: 積極的
- 交通: 電車中心

妻と自分とで完全に財布が別で、厳密ではないが支出種別ごとに支払い者が違います。
食費や服飾費が妻、それ以外は自分という分類です。

<以下フォーマットされた分析データ>
【資産推移分析】
...

【月別収支推移】
...

【カテゴリ別年間支出】
...

【異常値・変動分析】
...

**統計的外れ値(大口支出上位10件)**
...

**カテゴリ別支出分布統計**
...

【浪費防止分析を実施してください】
1. **異常値に基づく浪費特定**: 統計的外れ値や前月比異常値から無駄な大口支出を特定。重複パターンから習慣的な無駄を抽出
2. **変動性からのリスク分析**: 月別変動係数の高いカテゴリから予算コントロールが困難な項目を特定し、安定化策を提案
...

これを ChatGPT なり Gemini なり Claude にコピペする。データからわからない前提はしっかり書いておかないと適切にならない。

  1. トップ
  2. tech
  3. 人間のファイナンシャルプランナーよりLLMのほうがマシだよね

VALETON GP-5 というマルチエフェクタを買ってみた。小さいながら凝っていて、アンプシミュレータも内蔵しているのでヘッドフォン直結やスピーカーシステム直結で使える。

これは USB 5V のバスパワーで動くので、スマホに繋げば電源供給をスマホ側でできる。
なので、最小構成では GP-5 + スマホだけでそこそこ良い運用ができる。

WebMIDI Switcher

https://github.com/cho45/webmidi-switcher

GP-5 本体のボタンは「長押し」にチューナー機能が割り当ててある関係で、エフェクトが切り替わるタイミングがボタンを離したときになってしまう。これが嫌なので、別途スイッチを用意したい。

GP-5 は USB MIDI コントロールができ、スマホ側は WebMIDI API から GP-5 に MIDI 信号をおくれる。

スマホから電源供給もしつつ、スマホ自体をフットスイッチにできると嬉しいので、そういうウェブアプリを作った。

PicoMIDI Switch

https://github.com/cho45/picomidi

しかしながら、スマホを足で踏むのは割とむずかしいし抵抗があるので、市販のフットスイッチを流用する方法を考えた。

TRSプラグを利用するただのモーメンタリなフットスイッチが売っているので、これを利用する。

Raspberry Pi Pico で USB MIDI デバイスを作って、TRS → USB MIDI 変換を行っている。スイッチへの MIDI 信号の割当も WebMIDI API でできるようなウェブアプリを作ってある。余計なアプリはいらない。

スマホ側の WebMIDI Switcher には MIDI メッセージを中継する機能をつけてある。これでハブを経由してそれぞれ接続すればコントロールできるようになっている。

かなり装備が軽く、かつフットスイッチありなので、いいんじゃないか

  1. トップ
  2. tech
  3. VALETON GP-5 + 自作MIDIデバイスたち

「MIDI フットコントローラ」とかで検索するとよくでてくる M-VAVE Chocolate Plus というのがある。4スイッチで USB Host にもなれ、BLE でも接続可能で 3000円代と安い。amazon.co.jp でも売ってるので(リンクは出さないが)、気にはなっていた。

改造したらなんとかならんかなと重い、Aliexpressで買ってみて、改造を試みてみた。

「技適未取得機器を用いた実験等の特例制度」を申請して自己責任で期間限定で合法となる、はず。

微弱無線局未満を目指してみたけど、設備がないと微弱無線局の基準を満たしているかは釈然とせず、結局安心して使えるようにはならないという結果だったので、やっぱ簡単な改造では使えないなというお気持ちになった。


なお FCC ID は 2ARCP-CHOCOLATEPLUS のよう (https://www.fcc.gov/oet/ea/fccid )。

  1. トップ
  2. tech
  3. M-VAVE Chocolate Plus は国内では使えません……

家族の予定は基本的に共有カレンダーで管理しているが「みんなが見れる用」として食卓近くに卓上アナログカレンダーが置いてあり、何年もの間、二重管理になっていた。ずっと気になってはいつつも、まぁ運用できてるし、単にカレンダー表示するだけでもまぁまぁ面倒なのでそのままだったが、この度 Raspberry Pi でサイネージを作ることにした。

構成はシンプルで、15インチの 1080p モニタと、余っていた Raspberry Pi 3 B (WiFi付き)

CUIUIC モバイルモニター 15.6インチ ポータブルモニター モバイルディスプレイ 1920x1080FHD IPS液晶パネル 400Nits 100%広色域 Tpye-C/mini HDMI/スピーカー内蔵 PS4/PS5/XBOX/Switch/PC/Macなど対応 保護カバー付き - CUIUIC

CUIUIC

4.0 / 5.0

できること

  • Google Calendar の表示 (ほぼ Google Calendar互換の表示をする。複数日とかも)
  • 天気予報 (気象庁のXMLから取得している)
  • 時計 (西暦・和暦・日付曜日時間)

10分ごとに内容を更新する。

https://github.com/cho45/my-sinage

モニタ解像度

Raspberry Pi のほとんどは 1080p までしかスムーズに出力できないので、あまり高精細なディスプレイを買ってはいけない。1920x1280 のモバイイルディスプレイをいくつか持っているけど、モニタとの相性もあるのか、まともに表示させることができなかった。素直になってください。1080pのモニタを買えばいいです。(2日ぐらい無駄にした)

15インチのモニタは微妙にデカいけど、カレンダーをフルで表示させるならこのぐらい大きくてもいいかなという印象。捨てるときのこと考えるとあんまり大きいもの買いたくないのよね……

モニタの固定

「モバイルモニタ」カテゴリのものは固定方法が考えられてない。VESAマウント? そんなものはない。ただのスレートです。

ということで3Dプリンタでスタンドを作り、棚板にビス止めすることにした。安定。

ウェブアプリ

認証情報を保持してカレンダーの画面を出すウェブサーバを立てている。これは Raspberry Pi 上ではなく、QNAP 上の Container Station で docker image を動かしている。QNAP はうちだとIP アドレス固定で使っているので管理しやすい。

ディスプレイが繋がっているサイネージ用の Raspberry Pi はブラウザでURLを開くだけ。

スマフォとかから管理画面を開いて強制リロードのシグナルを送ったりできるようにしてある。ウェブアプリ側を更新したときに呼ぶ用。

開発

ほぼほぼ Claude Code にやらせた。ウェブアプリ、ちょいちょいクソコードは書くものの、特にクライアントサイドを書かせるのは割とすんなりやってくれる。

サーバサイドはなんか結構ガイドしないとちゃんとやってくれない。

夜中は消灯

cron で 02:00 に画面を消灯、06:00 に点灯という制御を入れてある。

最近の Raspberry Pi OS (bookworm) は labwc というWayland コンポジタ実装が使われているが、あんまりこれの情報がないのでめんどくさい。

XDG_RUNTIME_DIR=/run/user/1000
 
 # 02:00 にオフ
 0 2 * * * /usr/bin/wlr-randr --output HDMI-A-1 --off
 # 06:00 にオン
 0 6 * * * /usr/bin/wlr-randr --output HDMI-A-1 --on --mode 1920x1080

この手のものはいかに運用を楽にするかというのが問題。「うまく動かない」場合にメンテできるのが自分しかいないからだ。

  1. トップ
  2. tech
  3. おうちサイネージ (食卓カレンダー)