月1万円の支出削減は資産400万円に相当する
経済的独立 (FIREのFIの部分)の文脈では「月1万円の支出削減は資産400万円を増やすのと同じ効果」があるといえる。
これは いわゆる「25倍ルール」 ないし 「33倍ルール」 から考えられる。
25倍ルール・33倍ルールとは
25倍ルールは、年間支出の 25倍の資産 があれば、資産の4%を毎年取り崩しても一生暮らせるという目安。「4%ルール」に基づくもの。
より安全に見積もりたい場合、資産の3%しか取り崩さないとすると、必要資産は 年間支出の33倍。国内だと税制やらなんやらで3%で計算しろとかなんとか。
たとえば年間400万円の支出 (税金や社会保険料なども含む) がかかるとすると
- 25倍ルール → 1億円(400万 × 25)
- 33倍ルール → 1.32億円(400万 × 33)
で無収入でも破綻しなくなる (破綻するかどうかは実際は確率の問題だが)
月1万円削減が資産400万円に相当する、とは
月1万円の支出を減らすと
- 月1万円の支出削減 → 年間で12万円の削減
- 1万円 × 12ヶ月 = 12万円
- 25倍ルールを適用すると、必要な資産は:
- 12万円 × 25 = 300万円
- 33倍ルールを適用すると:
- 12万円 × 33 = 396万円(約400万円)
月額1万円を得るのために400万円の資産が必要、ということは、逆に見れば「月1万円の支出を減らすと、300〜400万円の資産を持っているのと同じ効果」といえる。
なぜこの考え方が重要なのか?
資産を300〜400万円増やすのは自明に大変だが、月1万円の削減なら比較的簡単である。見方を変え、月あたりの1万円には資産換算で400万円という価値があると感じることができれば浪費により強いブレーキをかけることができる。
逆に月1万円の収入には400万円の資産と同等の効果があるともいえる。キャッシュフローの重要さが身に染みる。
関連エントリー
- 資産運用の基本的な考えかたを勉強してる 特に資産をドル建てで持つことの意味をちゃんと理解しているとはいえなかったので自分なりに整理してみる。 運用の基本的な考えかた 購買力の維持ま...
- 人間のファイナンシャルプランナーよりLLMのほうがマシだよね ファイナンシャルプランナーって信用できないじゃないですか。信用できるかどうか判断するためには相手と同等以上の金融知識が必要になる。人間には利...
- 基準電圧源とマルチメータの精度 基準電圧源 Aliexpress でいくつか買ったやつで考える。 AD584JK Aliexpress で売っている AD584JH 基準電...
- カメラバッグ沼にハマっている ほんと定期的にカメラバッグ探して、買ったり買わなかったりしてるんですが、30になって考えかたが変わった部分もあるので、追加で買ってみました。...
- 電力表示付きの Type-C 充電ケーブル 100W だと 20V 5A になる。1m 室温25℃で90Wの表示が出てる場合、しばらくすると52℃ぐらいまで上がる。 手元のケーブルテス...
人間のファイナンシャルプランナーよりLLMのほうがマシだよね
ファイナンシャルプランナーって信用できないじゃないですか。信用できるかどうか判断するためには相手と同等以上の金融知識が必要になる。人間には利害関係があり、不動産屋と金融屋は特に倫理観がないので、利害関係がない分、たとえハルシネーションがあったとしても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万円の支出削減は資産400万円に相当する 経済的独立 (FIREのFIの部分)の文脈では「月1万円の支出削減は資産400万円を増やすのと同じ効果」があるといえる。 これは いわゆる「...
- 金融政策が不安定なのは「遅すぎる」からか 国債発行がやたら悪役扱いされるのを不思議に思って調べていくうちに、どうも「政府は古いデータでしか判断できない」という構造的な遅さが背景にある...
- おうちサイネージ (食卓カレンダー) 家族の予定は基本的に共有カレンダーで管理しているが「みんなが見れる用」として食卓近くに卓上アナログカレンダーが置いてあり、何年もの間、二重管...
- NanoVNA を WebUSB を使ってブラウザから見る NanoVNA の USB のコミュニケーション方法が USB-CDC で、プロトコル自体は簡単そうだ、というのを前に書きました。なぜそんな...
VALETON GP-5 + 自作MIDIデバイスたち
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 メッセージを中継する機能をつけてある。これでハブを経由してそれぞれ接続すればコントロールできるようになっている。
かなり装備が軽く、かつフットスイッチありなので、いいんじゃないか
関連エントリー
- Ampero Control でのスイッチを押した瞬間のMIDIメッセージ送信 Ampero Control は Bluetooth / USB / DIN で MIDI メッセージを出せるフットスイッチ。かなり汎用性が...
- HOTONE Ampero II STOMP を買った HOTONE AMPERO II STOMP cho45 HOTONE ★ 5.0 / 5.0 cho45 競合としては BOSS GT-1...
- ウェブページ(JavaScript)からDAWへのノート入力 ウェブページ上からDAWへ簡単にノート入力できないかというのを考えた。結局 Web MIDI API でできた。わかってから検索すると同様の...
- JSで書いたメトロノームの MIDI 対応 https://cho45.stfuawsc.com/metronome/ あいかわらず自分で書いたメトロノーム実装を使っているが、フットス...
- mbed USBMIDI で Lightroom 用の MIDI インターフェイスを作る MIDI デバイスを Lightroom のコントローラとして使えるプラグインとして MIDI2LR というのがある。市販のMIDIコントロ...
M-VAVE Chocolate Plus は国内では使えません……
「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 )。
関連エントリー
- HackRF One で遊ぶ HackRF という SDR 用の無線フロントエンドがある。オープンソースハードウェア。この手のものは他に LimeSDR (高い) や R...
- YONGNUO YN600Air 5500K モデルを買ってみた YONGNUO YN600Air LED ビデオライト 5500K SMD LED搭載 超薄 カメラ ビデオカメラ用 補助照明 撮影用 Ca...
- ウェブページ(JavaScript)からDAWへのノート入力 ウェブページ上からDAWへ簡単にノート入力できないかというのを考えた。結局 Web MIDI API でできた。わかってから検索すると同様の...
- 電力計交換でBルートサービスが繋がらなくなった (解決済み) 結論 Bルートサービスの「パスワード変更」を申請したらなおった。 追記:最大一週間停止するがほうっておけば設定してくれるらしいので手続は不要...
- BLE のエラーコード一覧 Bluetooth Explorer とかで見ることができる disconnect 時などのエラーコード Bluetooth 4.2 の S...
妻の財布を修理した
関連エントリー
- 洗濯機が壊れたので買い替えた パナソニック ドラム式洗濯乾燥機 幅63.9cm 洗濯12kg/乾燥6kg 左開き NA-LX125CL-W マットホワイト トリプル自動投...
- シチズン Q&Qのバンドを交換した2 シチズン Q&Qのバンドを交換した - 氾濫原 から1年半ぐらい。バンドがボロボロになったので交換 [シチズン Q&Q] 腕時計 フォルコン...
- Bryon 750E バッテリー交換 充電中の過熱 充電中に異常過熱していることに気付いた。さわるとかなり熱いと感じるが触れないわけではないので50~60℃程度。 挙動をすこし観...
- キッチンの棚 DIY 面倒なので塗装なし カットはホームセンターでやってもらったので特に苦労なし。 自転車のトレーラーで運んだ。910mm ぐらいなら内側におさめ...
- 長年の悩みだったレンズ前玉の汚れが落ちた…… 5年ぐらい前 (というか買った直後ぐらい)に EF 100mm F2.8 MACRO に傷をつけてしまっていて、ずっとそのことについては心に...
富士山
Gecko
おうちサイネージ (食卓カレンダー)
家族の予定は基本的に共有カレンダーで管理しているが「みんなが見れる用」として食卓近くに卓上アナログカレンダーが置いてあり、何年もの間、二重管理になっていた。ずっと気になってはいつつも、まぁ運用できてるし、単にカレンダー表示するだけでもまぁまぁ面倒なのでそのままだったが、この度 Raspberry Pi でサイネージを作ることにした。
構成はシンプルで、15インチの 1080p モニタと、余っていた Raspberry Pi 3 B (WiFi付き)
できること
- Google Calendar の表示 (ほぼ Google Calendar互換の表示をする。複数日とかも)
- 天気予報 (気象庁のXMLから取得している)
- 時計 (西暦・和暦・日付曜日時間)
10分ごとに内容を更新する。
モニタ解像度
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
この手のものはいかに運用を楽にするかというのが問題。「うまく動かない」場合にメンテできるのが自分しかいないからだ。
関連エントリー
- GPSDO のメトリクス なかなかやる気が湧かなくてやってなかったが GPSDO のメトリクスをしばらくとってみることにした。そのへんに転がっていた NanoPI N...
- 起動中の Raspberry Pi のモデルを調べる cpuinfo に含まれる Revision を見る。 $ cat /proc/cpuinfo | grep Revision Revisi...
- Raspberry Pi で別のマシンと有線LANを直結して通信 スイッチを介さず直接イーサネットケーブルを接続して相互通信を行いたいというケースがあった。あんまりやらないので不安に思ったけど簡単にできた。...
- Raspberry Pi から HDMI-CEC コントロール サイネージ HDMI CEC 連携 カレンダーを表示するおうちサイネージ というのを作っていたがモニタの置き場がなくなってしまったので、テレ...
- ネットワーク内の Raspberry Pi の IP アドレスを調べる いちいちモニタ繋いで確認とかするのは面倒ですが同じネットワーク内なら簡単に調べることができます。 まず ifconfig で所属するネットワ...
QNAP を VOICEVOX 音声合成サーバにする
昨今の QNAP には Container Station というコンテナイメージを実行するためのオフィシャルなアプリケーションが提供されている。これを使えば特にQNAP用というわけではないコンテナイメージも自由に動かせて嬉しい。
例えば VOICEVOX のAPIを自宅内で自由に使えたらな~ と思うと、サーバとして常時動いていて、CPU的にも比較的遊びのある QNAP で動かせると嬉しい。HTTP リクエストさえできれば自宅内の Raspberry PI だろうがなんだろうが低スペPCからも音声合成ができる。
https://hub.docker.com/r/voicevox/voicevox_engine
Docker Hub にオフィシャルなイメージがあるので、これを pull する

Create Container で Publish New Port して 50021 を指定する。これで 192.168.5.250:50021 でアクセス可能になる。これだけ

curl -X 'GET' \
'http://192.168.0.177:50021/speakers' \
-H 'accept: application/json'
[
{
"name": "四国めたん",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"styles": [
{
"name": "ノーマル",
"id": 2,
"type": "talk"
},
{
"name": "あまあま",
"id": 0,
"type": "talk"
},
{
"name": "ツンツン",
"id": 6,
"type": "talk"
},
{
"name": "セクシー",
"id": 4,
"type": "talk"
},
{
"name": "ささやき",
"id": 36,
"type": "talk"
},
{
"name": "ヒソヒソ",
"id": 37,
"type": "talk"
}
],
"version": "0.15.9",
"supported_features": {
"permitted_synthesis_morphing": "SELF_ONLY"
}
},
{
"name": "ずんだもん",
"speaker_uuid": "388f246b-8c41-4ac1-8e2d-5d79f3ff56d9",
"styles": [
{
"name": "ノーマル",
"id": 3,
"type": "talk"
},
{
"name": "あまあま",
"id": 1,
"type": "talk"
},
{
"name": "ツンツン",
"id": 7,
"type": "talk"
},
{
"name": "セクシー",
"id": 5,
"type": "talk"
},
{
"name": "ささやき",
"id": 22,
"type": "talk"
},
{
"name": "ヒソヒソ",
"id": 38,
"type": "talk"
},
{
"name": "ヘロヘロ",
"id": 75,
"type": "talk"
},
{
"name": "なみだめ",
"id": 76,
"type": "talk"
}
],
"version": "0.15.9",
"supported_features": {
"permitted_synthesis_morphing": "SELF_ONLY"
}
},
関連エントリー
- Ubuntu LTS 16 → 18 → 20 一応バックアップ sudo parted -l Model: Virtio Block Device (virtblk) Disk /dev...
- Klipper のメニューを完全にカスタマイズする デフォルトで設定されているメニュー を完全に無効化して設定しなおす方法 デフォルトのメニューは type: disabled にすると部分的...
- GitHub Pages を GitHub Actions で PDF 化して releases にアップロード GitHub Pages を GitHub Actions で PDF 化して releases にアップロードするというのをやってみた。 ...
- DNS HTTPS レコードを確認する dig lowreal.net type65 で存在は確認できるがパースしてくれない。dns.google 使うのが簡単っぽい。JSON で...
- LAN 内の mDNS に応答するホストを列挙したい PTR _services._dns-sd._udp.local. A/AAAA [ソースアドレス].in-addr.arpa. をやりたい...










