うっかりエンジニアのメモ

未来の自分に宛てたメモ

Google SpreadsheetからGASでSwitchBot API v1.1にアクセスして消費電力を可視化する

古来より、自作erはマシンを組み上げるとベンチマークと消費電力を計測するものという言い伝えがある(要出典)

私の家にも「ワットチェッカー」がある。自作er御用達の消費電力測定ツールだ。ただ、ワットチェッカースタンドアロン。つまり、測定データをCSVで出力したり、リアルタイムに他システムに送信したりといったことは当然できない。

ちょっと探してみるとIoT隆盛の今をときめくスマート家電の中に、あるじゃないですか、消費電力を計測できるスマートプラグが。しかも測定データはREST APIで取得可能? …便利な世の中になったものよ。

SwitchBotプラグミニ、これは面白そう。

この記事の対象読者

  • SwitchBotのAPIから取得したデータをGoogle Spreadsheetで触りたい人
  • かつ、SwitchBot API v1.1を使いたい人

記事を書いている2022/09/24時点ではv1.0も生きているのでそちらを使うこともできたのだけど、基本この手の仕組みは一度作ったらほったらかし運用をしたいので、よりdeprecatedになるのが遅いであろうv1.1を使うことにした。

必要な機材

Google Spreadsheetの準備

Switchbot API アクセストークン/シークレットの取得

こちらの記事で手順をまとめてくださっている。10回タップというのがスーファミの裏技っぽくて良かった。 qiita.com

v1.1からAPI呼び出し時のお作法が変更

従来は単にtokenをAuthorizationヘッダーに付与すればよかったが、v1.1からsecretを用いたリクエストへの署名(signature)が必須になった。

How to Sign?

We have attached a python script for you to quickly generate a sign. If you prefer to write your own script or routine, here is the procedure.

  1. Print the 13 digit timestamp and concatenate it with your token
  2. Create a signature using your secret and the string produced in the previous step
  3. Convert the signature to upper case

引用: GitHub - OpenWonderLabs/SwitchBotAPI: SwitchBot Open API Documents

v1.1では下記のように処理が増える。

  1. 13桁のタイムスタンプとnonceを連結した文字列を、シークレットによりHMAC-SHA256で署名する
  2. 署名をbase64エンコードし、大文字にする
  3. リクエストヘッダのAuthorizationtokenを、signに署名を、t13桁のタイムスタンプ を、nonceにnonceの文字列を格納してAPIを呼び出す

Google Apps Scriptの作成

スクリプトプロパティにトークン/シークレットを格納

トークン/シークレットのスクリプトへのベタ書きは避ける。具体的にはあらかじめGASのIDE
プロジェクトの設定 > スクリプトプロパティトークン/シークレットを登録する。ここではそれぞれ SWITCHBOT_API_TOKEN SWITCHBOT_API_SECRET とした。 スクリプトで利用する際は PropertiesService.getScriptProperties().getProperty() で取得する。

実装

流れは以下。最終的な実装はgistに載せた。

  • GET /v1.1/devices を呼び出し、ミニプラグのdeviceIdを取得する(最初に1回だけ)
  • GET /v1.1/devices/{deviceId}/status を呼び出し、ミニプラグの現在の測定値を取得する
  • 測定値を整形してspreadsheetの末尾行に書き込む

考慮点1: GASにおける署名生成のやり方

前述の通り、SwitchBotのAPIではv1.1からHMAC-SHA256による署名が必要だ。公式ドキュメントにはpythonJavaScriptのサンプルコードはあるが、Google Apps Script用のサンプルコードはない。JavaScriptのサンプルは部分的に参考になるものの、GASで使える関数は限られるのでその制約のもと、実装する必要がある。(たとえばcryptoはGASでは使えない)
GASにおけるHMAC-SHA256署名処理の実装をググると、様々な記事で「Utilities.computeHmacSha256Signature()の戻り値はByte[]でありそのまま署名文字列として使えないので、下記のコードでbase64に変換する」と書かれている。おそらく2017年のこのStackoverflowの回答を参考にしているっぽい。

var byteSignature = Utilities.computeHmacSha256Signature(message, secret);
// convert byte array to hex string
var signature = byteSignature.reduce(function(str,chr){
  chr = (chr < 0 ? chr + 256 : chr).toString(16);
  return str + (chr.length==1?'0':'') + chr;
},'');

ところが上記gistの通り、2022年9月時点ではこのような回りくどい実装は不要で、Utilities.base64Encode() でシンプルにbase64エンコードできた。昔はByte[]を引数に取るbase64Encode()は実装されてなかったのかもしれない。

考慮点2: データの書き込み先シートを月ごとに分ける

シートに毎分1行データを追加するということは、1日あたり1440行、1ヶ月あたり44640行増えていくので、Spreadsheetの制約が気になった。 探し方が下手くそなのか、唯一公式ドキュメントで見つけられた制約は「1スプレッドシートは1000万セルまで、または18278列まで」というもの。それ以外は野良サイトが「1シートに18278行まで」「1シートに65536行まで」「 行数の上限はない」などと書いていて、よくわからなくなってきたので、とりあえず1ヶ月毎に書き込み先シートを分けることにした。これなら4.5年くらいは持つ。

トリガーを設定

スクリプトのトリガーはタイマー(定期実行)とする。GASの仕様では最短の実行周期は1分ごと。SwitchBotプラグミニではおそらく数秒単位でデータ測定がされているが、毎分でも実用上問題ないので、毎分のトリガーを設定する。

出力の様子

消費電力だけでなく電圧変動もわかる

単に可視化するだけでなく、様々な分析ができて楽しい。
たとえば、私の環境ではプラグミニをPCに接続しているので、PCだけで毎月1000円くらい電気代がかかるだろうということが分かる。

まとめ

  • SwitchBotプラグミニとGoogle Spreadsheetを組み合わせて消費電力を可視化する仕組みを作れる
  • SwitchBot API v1.1はAPI呼び出し時のお作法含め、Google Apps Scriptの実装例を紹介した

参考

HaswellおじさんがAlder Lake買うとみせかけてケースとCPUクーラーだけ買い替えた話

どうも、Haswellおじさんです。

最近PCのファンがうるさくて、ケース開けてみたらあらびっくり。CPUクーラーにホコリがびっしり。嫌な予感がしてBIOSでCPU温度確認するとアイドル時に57℃!!真夏でもないのに。

ホコリまみれ なんかねっとりしてる

思えばこの構成も7年前に組んでからそのまま。この調子だとグリスも固まってるだろうから、CPUクーラーを買い直すことにした。

CPUクーラーを買おうと久々にTSUKUMOやらパソコン工房やらのサイトを巡ってる内に懐かしい自作erの気持ちを思い出してしまい、そうだ、以前から負圧で隙間という隙間からホコリが入りまくって困っていたケースもこの際買い替えよう、中身も掃除し直そう…とあれよあれよと買い物が増えた。

今回買ったもの

  • Fractal Design Define 7 Compact Black Solid
  • Noctua NH-U12S
  • Fractal Design Dynamic X2 GP-14 PWM Black

Define 7 Compactはフロントに14cmファン、リアに12cmファンが付属している。ここではP183の反省を踏まえて絶対にケースを正圧にすべく、フロント用に付属品と同種のケースファンを追加した。

組む

CPUクーラーの交換

マザボをケースから取り外してCPUクーラーを交換する。

7年物のグリス
消毒用アルコールとウェットティッシュで古いグリスを拭き取る
Noctuaの説明書に従って、新しいグリスを5mm程度出す
装着する デカい

新しいケースに中身を移し替える

新しいケースに移し替えるタイミングは、パーツ類の棚卸しの絶好のチャンスだ。
結論としては、下記を引退させることにした。

ケーブル数が減りエアフローが良くなる、消費電力が減って省電力PCになるなど、いい事ずくめ。

SATAで接続するデバイス数が大幅に減って驚いた。ネットの情報を読んでいくと、最近はHDDが不要ならストレージはすべてM.2のSSDで賄って"SATAレス"な運用ができるのだそう。凄い。

裏配線の効果もあってスッキリした印象

艶消しアルミニウムの微妙な表情が美しい

CPU温度が20℃低下!

BIOS起動して数分後のCPU温度を計測したところ、57℃→37℃まで大幅に低下。

これは嬉しい

満足。無事にHaswellおじさんもWindows 10のサポートが切れる2025年まで延命されました。
beforeのデータ取り忘れたけど消費電力もアイドル時50W弱でいい感じじゃなかろうか。

2022年9月現在の構成

CPU Intel Core i7-4770
CPUクーラー Noctua NH-U12S
マザーボード ASUS H87-PRO
メモリ Team TED316G1600C11DC [DDR3 PC3-12800 8GB 2枚組]
Team TPRD316G1600HC11DC01 DDR3 PC3-12800 8GB 2枚組
ストレージ Sandisk SDSSDH3-250G-J25
PLEXTOR PX-256M5S
WDC WD30EFRX-68EUZN0
グラフィックボード 玄人志向 GF-GTX1050Ti-4GB/OC/SF
電源ユニット Seasonic SS-660XP2S
PCケース Fractal Design Define 7 Compact Black Solid
OS Windows 10 Pro

子供の頃、ガンプラを黙々と作っていていつの間にか何時間も経っていることがあった。大人になった今も、PCのパーツを入れ替えるだけで似たような体験ができることは新鮮な発見だ。なんかメンタルにもいい気がする。折を見てまたやりたい。

NURO光でF660Aへの接続台数が10台を超えると不安定になる事象を解決する

我が家のインターネット回線はnuro光 for マンションです。この回線はベストエフォートで下り最大2Gbpsを謳っており、実際、帯域にはまったく不満がありません。
しかし半年前くらいからスマホやPCの無線接続が時折切れてしまう現象が起こり、最近はほぼ毎日スマホがいつの間にか4G回線に切り替わっていて、このままだとスマホ用に5GB/月のプランに加入している私はwi-fiに繋がっていないことに気づかずにYouTubeを見続けてパケ死(死語)してしまうので、対策してみました。
この記事は備忘録的に残したものなので、目新しい情報はありません。下記記事が解決にとても役立ちました。ありがとうございました。

同時接続台数にまつわるネット上の情報

同様の問題はF660Aを利用している日本中の家庭で起きており、トラブルシューティングしたブログやTwitterの投稿が沢山あります。 どの記事も「F660Aの同時接続台数」が原因ではないかと言及している点は一致しているのですが、細かい表現には差異がありました。

  1. F660Aの同時接続台数上限が10台(→だからルーターを別に用意しよう)
  2. F660Aの無線LAN接続での台数上限が10台(→だからできるだけ有線LANに繋ごう)
  3. F660Aの1つのSSIDあたりの台数上限が10台(→だからSSIDを増やそう)

ルーターを買うとそれなりにお金がかかるので、できれば2 or 3で解決しないかなと思って実際試してみたのですが、SSIDを増やしても有線LAN接続に切り替えても、不安定なまま改善されませんでした。どうやら、F660AのCPU/メモリ的に捌ける最大台数が10台で、それを超えると無線が不安定になり始めるようです。

※ただし、我が家では有線接続したデバイスは一貫して通信が安定していました。となると「有線接続のデバイスのみで10台超接続するとどうなるのか?」が気になります。誰か実験してほしいです

解決方針

そもそもF660Aに様々な役割を担わせすぎているので、これをできるだけ他所にオフロードする方針にします。

  • 光信号⇔デジタル信号の変換(本来のONUの役割。これに専念させたい)
  • ルーター機能
  • 無線アクセスポイント機能
  • DHCP機能
  • DNSクライアント機能
  • セキュリティ機能(ファイアウォール、フィルタリング)

まずはルーター機能を外出ししたいのですが、なんとF660Aはルーター機能のみ無効化することができません。

NURO 光でレンタルされるONUには、ルーター機能のオン・オフを切り替えるための電源はありません。ONUの電源を入れると同時に、自動でルーターも機能する仕組みになっています。 このようにルーター機能のみをオフにすることはできないので、NURO 光では自前ルーターを使うということはできません。 www.nuro.jp

何も考えずに新しいルーターを導入すると二重NAT(二重ルーター)状態になってしまうので、今回はDMZ機能を活用した構成にすることにしました。

必要なもの

同時接続可能な台数が十分なルーター(兼無線AP)だけです。慣れ親しんだASUSルーターを買いました。同時接続台数は64台なので十分です。

ネットワーク構成(To-Be)

やったこと

ルーターのWAN側IPアドレスを固定する

192.168.1.1/24 のセグメントにおける新ルーターIPアドレスを固定します。F660Aには新ルーターの他には何も接続しないので、2~254まで何でも良いです。今回は「192.168.1.200」にしました。また、NUROのDNSサーバーをあまり信頼していないので、WAN側DNSサーバーをCloudflare Public DNSにする設定も合わせて行っています。

F660Aの管理画面で

ルーターの管理画面で

DHCP機能の停止とDNS設定 [F660A]

DHCPはすべて新ルーターで行うので、F660AのDHCP機能を停止します。合わせて、Cloudflare Public DNSを利用するように設定を変更します。

F660Aの管理画面で

  • ネットワーク > LAN > ダイナミックアドレス管理(IPv4)
    • DHCPを有効」をoff
    • 「アプリケーション:DNSサービスの設定を優先にする」をonにして DNSアドレス指定 を選択
  • ネットワーク > LAN > ダイナミックアドレス管理(IPv6)
    • DHCPを有効」をoff
    • 「アプリケーション:DNSサービスの設定を優先にする」をonにして DNSアドレス指定 を選択

DMZの設定 [F660A]

インターネットからF660への通信を全ポートそのまま新ルーター横流しして、実質的なルーティングを新ルーターにやってもらいます。

F660Aの管理画面で

IPv6の設定 [新ルーター]

ルーターの管理画面で

  • 接続タイプは パススルー
  • DNSサーバーに自動接続する」は 無効
  • IPv6 DNSサーバー1にCloudflareのプライマリーDNSサーバーのアドレス
  • IPv6 DNSサーバー2にCloudflareのセカンダリDNSサーバーのアドレス

無線AP機能の停止 [F660A]

F660Aの管理画面で

  • ネットワーク > 無線LAN RF2.4G > 基本設定 > 「無線LANを有効にする」をOFF
  • ネットワーク > 無線LAN RF5G > 基本設定 > 「無線LANを有効にする」をOFF

これでF660Aは無線APとしての仕事からも解放されました。

5GHz帯でDFSの回避 [ルーター]

これはやってもやらなくてもOKです。5GHzの周波数帯では「DFS」による通信断の可能性があります。

Wi-Fiの5GHz帯で利用する特定のチャネルは、気象レーダーなども利用しており、それらレーダー波を検知した場合には、他のチャネルへ変更する機能が「DFS」このとなり、本機能の搭載は法的に義務付けられた機能となります。DFSは、通信前にレーダーがいないかの確認し、また、通信中にレーダーが到来した場合、直ちにそのチャネルの使用を中止し、別のチャネルへの変更を行います。プロセス中は1~10分程要し、チャンネル変更時にコネクションの切断が発生します。使用状況によっては、DFSによるチャンネルに伴う切断を回避する必要があるため、下記ではDFSの設定をオフにする手順を解説しています。 www.asus.com

DFSを回避し利用チャネルをW52に絞ることによるデメリットは、160MHzをフルに使った最大2402Mbpsの通信速度が得られなくなる点です。ただし我が家の場合はそもそも1Gbps程度で十分すぎる帯域なので、DFSの設定をOFFにします。

ルーターの管理画面で

  • ワイヤレス > 全般 > バンド 5GHz
    • チャンネル帯域「160MHzを有効化」をOFF
    • チャンネル「DFSを含むチャンネルの自動選択」をOFF
    • 「適用」をクリック

結果

快適そのものです。スマホがいつの間にか4Gに繋がってることも無くなりました。

fast.comの測定結果(有線) 相変わらず速い
IPv6の接続性も問題なし

まとめ

  • NURO光でレンタルされるONU「F660A」は同時接続台数が10台を超えると無線通信が不安定になる
    • 無線LANを有線LANに変えても、SSIDを増やしても意味はない
  • F660AのDMZ機能を活用して、別のルーター兼APに処理をオフロードすると、二重ルーターを回避しつつ通信を安定化できる

NUROに言いたい

  • 今後スマート家電が増えていくのだから、同時接続台数がわずか10台のONUを配布しないで
  • 百歩譲って配布するにしても、契約時にONU機種を選択できるようにして
  • ONUルーター機能を無効化できるようにして

ONUガチャ次第で32台まで安定かも

2022年1月よりF660Aの後継機種であるF660Pの提供が始まっています。同時接続台数は32台でWi-fi 6にも対応しているので、ガチャ次第ではこの記事の対策一切不要で安定した環境が手に入るかもしれません。グッドラック。

www.nuro.jp

SaaS型ライフプラン作成ソフト「FP-UNIV」をFP2級の素人が使ってみた

FP2級を取得しました。私の本業はIT企画なのでこの資格を取ったところで仕事には何も影響しないのですが、勉強の過程でマネーリテラシーが上がり、資産形成の意思決定の質が上がったのでとても満足しています。

さて、そろそろ家庭を持つということで、ライフプランの作成をちゃんとやろうと決めました。 ライフプランとはライフイベント表キャッシュフローの2つを時間軸を揃えて見れるようにしたものです。ライフイベント表には人生でやりたいこと(結婚する、家を買う、車を買う、など)を、キャッシュフロー表には世帯の収入/支出を記載することで、将来にわたって家計が破綻しないかどうかが分かります。

ライフプラン

一旦、自分の手で上記のようなライフプランを作れたのですが、FP3級を取ったとはいえ、素人のライフプラン表をもとに人生計画を決めていくのは怖いな~と感じて有料の独立ファイナンシャルプランナー(以下FP)にライフプラン作成を依頼することにしました。

その結果、やはりプロのライフプランと自分のライフプランにはかなりの差異がありました。私のライフプランでは40才以降ある程度の貯蓄をキープしたまま寿命を迎えていましたが、FPの最初の試算では60代であっさり家計が破綻しました😄

ライフプランの差異の原因

  • 年金の支給開始年齢を間違えていた
  • 将来のマクロ経済状況の想定がFPと異なった
  • 生活費の物価上昇率を想定していなかった

年金の支給開始年齢を間違えていた

恥ずかしながら、年金の支給開始年齢を60才としてキャッシュフローを計算していました。FPはここでさらに年金制度の改悪まで織り込んで支給開始年齢を68才と設定していたので、これが老後破綻という結果に繋がりました。他にも小さなミスがあり、チリツモでライフプランに影響を与えていました。これが判っただけでもプロに相談してよかったと言えます。

将来のマクロ経済状況の想定がFPと異なった

FPは住宅ローン変動金利が10年ごとに0.5%上昇する設定にしていました。返済1年目を0.5%とすると11年目に1.0%、21年目に1.5%、31年目に2.0%となります。 さきほどの年金支給開始年齢は法律で定められているパラメータなので議論の余地はありませんが、変動金利のようなマクロ経済状況が反映されるパラメータは、ライフプラン作成者の未来の展望によって変わってきます。直近20年間の変動金利(店頭金利)の推移を見ると、10年で0.5%上昇することは十分ありえそうですが、私はずっと0.5%のままという想定だったので、キャッシュフローが大きく異なりました。

ちなみに、面談中に「10年おきに繰り上げ返済したほうがいい」とアドバイスされましたが、そりゃ変動金利が10年につき0.5%も上がる前提なら誰でも繰り上げ返済するよと言いたくなります。このあたり、コンサルティングというよりはマッチポンプにしか感じられず残念でした。このFPはYouTuberでもあるんですが、とある動画では変動金利が10年につき0.25%上がる設定でライフプラン作成を実演してました。変動金利の将来想定を顧客によって変えるってどういう理由なのか、いまいち分かりませんでした…。

生活費の物価上昇率を想定していなかった

FPは物価上昇率を0.8%と設定してキャッシュフローを計算していました。 www.nli-research.co.jp こちらのニッセイ基礎研究所のレポートによると、2020年~2030年の消費者物価上昇率(予想)は平均1.3%とのことなので、たしかに0.8%はそれなりに妥当なパラメータに見えます。一方で、総務省の家計調査年報(家計収支編)2019年(令和元年)によると、二人以上の世帯の1世帯あたり1ヶ月間の支出について、2005年~2019年までの対前年比の平均は-0.2%であり、若干下落傾向にあります。したがって、直近のトレンドが継続すると仮定するなら物価上昇率はむしろマイナスで見積もっても良いと言えます。(もちろんこの仮定が誤りの可能性も十分ありますし、生活費支出と物価上昇率を並べて扱って良いのかという問題もあります)
ちょっと悩みましたが、間を取って物価上昇率は0.3%で良いのではないかという結論になりました。

そもそも、なぜ差異が生まれるのか

  • ライフプランニングソフト自体の質
  • プランナーのソフトを扱うスキル
  • プランナーの将来経済展望

に原因があると思いました。

まずソフトがしょぼいと、計算ロジックにバグがある、詳細な前提条件を入力する方法がそもそも存在しないなどの理由で出力されるライフプランの信頼性が低くなるのは自明かと思います。また、ソフトの質が良くても、使い手のパラメータ設定が非現実的だったり、対象者の状況に即していないとやはり信頼性が低くなってしまいます。ここはファイナンシャルプランナーの経験とノウハウによって差が出てくるところではないでしょうか。さらに、さきほど差異の理由でも触れましたが、住宅ローン変動金利物価上昇率といったパラメータはプランナーの将来経済展望により変わり、出力されるキャッシュフローに長期的に影響を与えます。

今回依頼したFPは3つのライフプランを作成してくれましたが、それ以上のパターンは別料金でした。作成していただいたライフプランに大きな不満は無いのですが、たとえば変動金利の利率推移を変えてライフプランを再出力してもらうだけで追加料金が取られるというのが釈然としませんでした。いっそ自分でライフプランをパラメータを変えながら何通りも作成できるようになりたいと思い、いろいろと探してたどり着いたのがSaaS型ライフプラン作成ソフト「FP-UNIV」でした。

FP-UNIVの素晴らしい点

fp-univ.net

UIが気持ちいい

FP-UNIVの操作画面

ライフプラン作成ソフトという性質上、どうしても入力項目が多く複雑になってしまいがちなのですが、FP-UNIVはタブ型のインターフェースによって何をどこに入力すればよいのか、素人でも初見でおおよそ見当がつきます。また、前提条件やパラメータを入力する際も上記のようにサクサク入力できるのであまりストレスを感じません。

あと、SaaSなのでブラウザさえ動けば幅広い環境で使えるのもGoodです。MacはもちろんiPadでもライフプラン作成できます。

キャッシュフローが正確

study.fp-univ.net

FP-UNIV公式によると、ライフプラン作成ソフトによって将来支出が1億円変わることもあるらしいです。1億円のブレってやばいですね。普通に人生変わります。子供をもうひとり希望してた夫婦がしょぼいライフプラン作成ソフトのシミュレーションのせいで夢を諦めて、何年か経ってから「なんか思ったより貯蓄がたまるな…?」とライフプランの誤差に気づいた頃には高齢になって産めなくなってた、なんてケース悲劇でしかないです。

あと、税制法制への追従度が半端ないことの副産物(?)として、ふるさと納税のシミュレーション機能もまためちゃくちゃ精緻です。たぶん日本一かと思います。たまに住宅ローン控除の影響を忘れてふるさと納税をMAXでやって爆死している人がいますが、そういう人はFP-UNIVに任せれば上限ビッタビタに寄附できます。

本当の必要保障額が判る

詳しい解説記事をFP-UNIV公式が出しているので、以下の記事を読んでください。 study.fp-univ.net

従来の必要保障額算出ロジック(積み上げ方式)では、人生の後半にどんどん貯蓄が増えるパターンでは真の必要保障額を過少に見積もるので、不幸が発生したタイミングによっては必要保障額では実は全然足りません。こわい。

FP-UNIVが出力する必要保障額と死亡保障額のグラフ

FP-UNIVでは万が一がもし今年起きたら、1年後に起きたら、2年後に起きたら、x年後に起きたら…をすべて計算して、上記のようなグラフを出力します。赤い折れ線グラフはその年に万が一が起きた時の必要保障額で、積み上げグラフは死亡保障額です。つまり、この赤い折れ線グラフに追従するような形の積み上げグラフになっていれば、無駄のない必要十分な死亡保障額になっているということになります。めちゃくちゃわかりやすい。このグラフの場合は、5年目以降は最適な死亡保障額になっていますが、2年目は保障額が1200万円程度不足しているので、この時だけ保険や金融商品を検討する必要があることがすぐに分かります。

収入保障保険を除外したグラフ

ちなみに、この積み上げグラフは個別に保険を除外することもできます。例えば紫の積み上げグラフで表されている収入保障保険を消してみるとこんなグラフになり、現在~51才まで赤い折れ線グラフにまったく届いていないので、収入保障保険は必須ということが分かります。いやー凄い。この計算ロジックExcelで組もうとしたら発狂しますよ。

FP-UNIVの改善してほしい点

まだ2週間ほどしか触っていませんが、こうだったらいいなと思うところを書きます。

教育費のデフォルト金額が安すぎる

FP-UNIVが参照している統計が古いのだと思われますが、子どもの進学パターンを入力した時にデフォルトで入力される教育費が安すぎます。 たとえば、大学私立(理系)を選択すると入学金として265,595円、年間授業料として1,043,212円がデフォルト値として入力されますが、2021年時点で、年104万円では私立大学の理系学部に通学させるのは厳しそうです。参照する統計の質には気を遣ってほしいのでここはちょっと残念でした。

例:早稲田大学基幹理工学部の年間授業料は約170万円 www.waseda.jp

私はマネーフォワード社の記事にあった数値を使いました。現実的な数字かと思います。 media.moneyforward.com

あと、自宅外通学チェック欄もあったらいいなと。チェック入れると通学している間の住居費仕送りなどが年間90万円くらい計上されるような感じで。

必要保障額分析のカバー率が相対値

FP-UNIVの必要保障額分析は本当に素晴らしいのですが、一点だけ要望を。 必要保障額に対して死亡保障額がどの程度カバーできるのかという指標として、右側に「カバー率」が百分率で表示されますが、ここは単純に(死亡保障額-必要保障額)の絶対値で表示してほしかったです。なぜなら、保険の見直し時に結局、(死亡保障額-必要保障額)の計算をするからです。
なんらかの法規制が理由でないのなら、ここは絶対値で表示してほしいと思いました。

産休育休の設定が手軽にできない

産休育休中は社会保険料の免除もあるなど、税制と絡んできて手取りの計算が複雑になってくるので、FP-UNIVで自動計算してくれるとありがたいです。子どもの誕生日(=出産予定日)と育休期間を入れるとよろしく計算してくれるイメージです。出産手当金については健保の付加給付率の入力欄まであったら最高ですね。

死亡退職金の設定が固定金額

社員が在籍中に亡くなった場合、遺族に「死亡退職金」として、仮にそのタイミングで本人が退職していれば受け取るはずだった金額(またはその一部)を支給する制度がある会社があります。 一般的には、退職金というのは在籍年数に比例して増加する性質があるので、不幸が起こるタイミングによってその支給額は変わるはずです。ところがFP-UNIVでは死亡退職金が固定金額でしか設定できないので、うまくライフプランに反映させることができずにいます。 保険の設定画面を活用すれば(1年につき1つの定期保険を設定するようなイメージ)できなくもないですが、非常に面倒なので、死亡退職金が独立した項目でかんたんに設定できるとGoodですね。

税制法制の改悪をシミュレーションする機能がほしい

厚生年金保険料率は現在18.3%です。保険料の負担は労使折半なので、会社員であれば標準報酬月額の9.15%が毎月の給料から控除されています。この保険料率は2004年の13.93%からこっそり段階的に引き上げられて今に至っています。これがどの程度のインパクトかというと、標準報酬月額が仮に50万円の人がいたとき、保険料率が4%引き上げられると月2万円、つまり年間24万円の支出upになります。10年なら240万円。エグいですね。

少子化が改善する気配は無いので、保険料率が今後さらに上がる可能性は十分にあります。なので、そこをシミュレーションする機能がほしいと思いました。保険料率50%とかでシミュレーションして「こんな国で誰も働かないわ!」とかツッコみたい。同様の理由で、児童手当も改悪の可能性を織り込みたいです。支給額を自動計算してくれるのは有り難いのですが、「2025年で廃止」とか設定できると尚いいですね。

まとめ ライフプランニングも完全オーダーメイドの時代に

いろいろ書いたものの、FP-UNIVには感動してます。20年後も使いたい。

FP-UNIVの宣伝文句には「本当の」というフレーズがよく登場します。本当の必要保障額。本当の節税額。 これはソフトを使うほどにしっくりと来るフレーズで、他のソフトでは到達し得ないレベルで税制法制に追従し、私個人の前提条件に合わせてシミュレーションしてくれるので、目の前に現れる数字こそが「本当の」数字であると感じられます。この信頼感は素晴らしいです。

ふと、製薬業界で働いていることもあって「Precision Medicine」という言葉を思い出しました。
新型コロナで「治験」という言葉が身近になりましたが、薬の効果を証明するプロセス「治験」では、○○という疾患の患者という母集団に対して○○%効果があったのでこの薬は効能があります、というエビデンスの取り方をします。でも、十把一絡げに同じ疾患の患者さんと言いますが、患者さんひとりひとりは年齢、性別、身体的な性質、生活習慣、ヒトゲノム…etc.など様々な面で多様性がありますよね。医療の発展により、これからは患者さんひとりひとりの身体や状況に応じて治療計画がオーダーメイドに設計されるようになると言われています。これがPrecision Medicineです。Precision Medicineが現実的になるためには、個人のヒトゲノムを高速安価に解析するためのゲノムシーケンス技術のブレークスルーが必要でした。

ライフプランニングも同じで、今までは技術的な制約(あるいは故意)により、統計データを援用したり平均的な人物を想定したりして「ざっくり」シミュレーションするしかなかったところに、「FP-UNIV」というブレークスルーが起こり、個々人の希望や状況に応じた「本当の」ライフプランニングが可能になった、という時代の変遷を感じます。

私はFPでも保険募集人でもなんでもない素人ですが、これからも応援しております。

fp-univ.net

本当に美味しい浅草のグルメ&スイーツ

東京・台東区に延べ5年ほど住んでいます。

街がいい意味で洗練されすぎていないので、落ち着きます。 都内どこに行くにもアクセスが良く、その割には家賃相場も高すぎないので、都内勤務の若い人、とりわけ山手線の東側勤務の方にはおすすめの街です。

最近はコロナの影響でまったく見なくなりましたが、台東区にある浅草は都内で日本らしいアクティビティができる街として外国人観光客にも人気です。 (都営浅草線浅草駅は成田空港・羽田空港どちらにも直通しているので、出国前に立ち寄ることが多いらしい)

浅草はその歴史的背景からディープな一面もあり、決して小綺麗ではないですが、多様なジャンルの美味しい飲食店が沢山ある街でもあります。 今日はそんな浅草にある「本当に美味しいグルメ&スイーツ」を紹介します。2回以上訪問したお店しか載せてません。割と奥浅草エリアが多いかも…浅草に来たら浅草寺のお参りで帰らずに、言問通りを渡っていろいろ探索してみてください~

グルメ

THE BURGER CRAFT

パンはほんのり焼いてあり食感と香ばしさが最高。粗挽きのバンズは存在感があり幸せになれます。付け合せのポテトフライも大きめで食べごたえあって、序盤中盤終盤隙がない。今まで生きてきて一番美味いハンバーガーかも。

tabelog.com 予算:1500円/人

焼肉BEAST

浅草には美味しい焼肉屋が沢山あります。昔なら賭け事で儲かった人が後輩とか連れてきたりしたのかな。
但馬牛をいろんな食べ方で楽しめます。(肉寿司も旨いです)BEASTさんの店内は明るく綺麗で煙かったりもしないので、カップルで焼肉デートもいいと思う。

すだち冷麺が清涼感たっぷりで超うまいので、ぜひ〆にどうぞ。

店内はあまり広くなく席数制限もしていないので、この時勢に行くのは少しリスクあるかもしれない。

tabelog.com 予算:7000円/人

丹想庵 健次郎

奥浅草の静かな裏路地に店を構えるお蕎麦屋さんです。 料理と日本酒を楽しみ最後に蕎麦で〆る。そんな蕎麦屋飲みを楽しめるお店です。 浅草の蕎麦屋は観光客相手に殿様商売しているお店も多いのですが、ここは本当に丁寧な仕事です。上のツイートにも写真あるように、一品料理何頼んでも美味しいです。

tabelog.com 予算:5000円/人

小柳

鰻が食べたくなったらここに行きます。軒先の枝垂れた柳の木がなんか味がある。

tabelog.com 予算:4000円/人

ごはん×カフェ madei

大根まつりで有名な待乳山聖天の目の前にある定食屋さん兼カフェ。 鶏大根は出汁が尋常じゃなく素晴らしく、いつも煮汁を完飲してしまいます。 小鉢も丁寧に作られていて、シンプルに「和食っていいな」と思います。

tabelog.com 予算:1000円/人(ランチ)

みつヰ

実は醤油ラーメンって浅草発祥らしい。素晴らしい醤油ラーメンを楽しめるお店です。 細麺or平打手揉み麺を選べます。手揉みを選ぶと、目の前で実直そうな主人が揉んでるところを見れます。 6席と狭く行列必至だったのですが、最近、整理券制になったので、長時間並ばずとも楽しめるようになってさらに行きやすくなりました。

tabelog.com 予算:1000円/人

ピッツェリア ロマーノ エ マリーノ

実はイタリアンがあまりない浅草。2020年にオープンしたばかりのお店で、マルゲリータ美味しいです。 全メニューテイクアウトOKのお店なので、緊急事態宣言中のZoom飲みではよくお世話になりました。生ハム×赤ワインで優勝。

tabelog.com 予算:1500円/人(ランチ)

スイーツ

ラ・パティスリー・ドゥ・ナツ

奥浅草にある小さなケーキ屋さんです。ショートケーキが本当に美味しい。甘すぎない生クリームと苺。 焼き菓子のハリネズミクッキーも可愛いです。

tabelog.com 予算:500円/個

気ままなキッチン

味は日替わり(気まぐれ?)。 なぜか店主のマダムに気に入られて、よくおまけで切れ端のシフォンケーキをもらう(嬉しい)

tabelog.com 予算:500円/個

亀十

雷門通りにある超有名店ですが、どら焼きが好きなのでどうしても紹介してしまう。パンケーキみたいなふわふわな生地がGood。おすすめは白餡。

tabelog.com 予算:400円/個

壽々喜園 浅草本

静岡のななやの抹茶ジェラートを東京で唯一食べられるお店。 ほうじ茶と抹茶のダブルが好き。

tabelog.com 予算:500円/人

テラサワ・ケーキ・パンショップ

f:id:entropiajp:20201117150309j:plain

昔ながらのパン屋さん。生クリームコロネが美味しいのなんの…(お腹周りは気にしない) 惣菜系のパンも充実してて、お昼に行くときは焼きそばパンと生クリームコロネをよく買います。 tabelog.com 予算:500円/人

スイーツスタジオベルノー

ベルギー在住18年のシェフが営む奥浅草のスイーツ屋さん。おすすめはやっぱりベルギーチョコワッフル。

tabelog.com 予算:500円/個

Fuglen Asakusa

JRAの場外馬券売り場や酒クズにはたまらない飲み屋街「ホッピー通り」の至近に突如現れるおしゃれカフェ。ノルウェーが本拠地で日本進出2号店らしい。 カフェオレ大好きです。SAZA COFFEEの系統が好きな人は好きだと思います。

tabelog.com 予算:1000円/人

カフェ・オトノヴァ

合羽橋道具街と浅草寺の間のエリア(西浅草)にあるカフェ。2階建てで天井吹き抜けが気持ちいい。

tabelog.com 予算:1000円/人

APFSでフォーマットしたSSDの4K random writeがexFATより遅くなる件

趣味は音楽制作です。DAWで読み込むソフトウェア音源は大容量なので、今までUSB 3.1接続の外付けSSDに格納していました。この度MacBook Proを新しく購入したタイミングでSSDファイルシステムを確認したところ、exFATでした。 MacOS標準のファイルシステムであるAPFSやHFS+でフォーマットした方が絶対パフォーマンス上がるやろ、と思ったら、ちょっと不思議な結果になったので調査しました。

実験概要

外付けSSDをAPFS, HFS+, exFATの3通りでフォーマットしたときの、ストレージのRead/Writeの速度を測定します。

  • マシン: MacBook Pro 16-inch(2019)
  • 対象ストレージ: SANDISK SDSSDEX2-960G-J25
    • USB3.1/USB-C接続の外付けSSD
    • ※メーカー公称のシーケンシャルread/writeは最大850MB/s
    • 内部的にはNVMe SSDだと思われる
  • 測定ソフト: AmorphousDiskMark2.5
  • テストデータ: ランダム
  • テストデータサイズ: 512MiB
  • 測定項目:
    • Sequential 128 KiB block read/write tests with Queue Depth=32
    • Random sequence 4 KiB block read/write tests with Queue Depth=32
    • Sequential 1 MiB block read/write tests
    • Random sequence 4 KiB block read/write tests

結果

f:id:entropiajp:20200531024517p:plain

考察

音源置き場としてのSSDに求められる性能は、ランダム読み出しの性能です。音源は一旦書き込みしたら後はほとんど書き込みが起こらないので、書き込み性能はあまり重要ではありません。DAWで楽曲をプレイバックするたびにそれぞれのMIDIノートに対応した小さい音源サンプルファイルがあちこちから大量に読み出されるので、高速なランダム読み出し性能があるとストレスなく制作に臨むことができます。

random read性能の結果を見ると、QD=32の場合はAPFSがexFAT比で6.4倍高速、QD=1の場合は逆にexFATがAPFS比で約13%高速ということがわかりました。 QDの値によって結果が逆になりましたが、Queueingが効かない(QD=1)状況というのは現代のSSDでは非現実的なので、より現実に即した値はQD=32の結果だと言えます。

従って、音源置き場としてのSSDは、APFSでフォーマットするのが良い、ということになります。
HFS+も同等に速いですが、APFSはストレージがSSDであることを前提とした設計になっている新しいフォーマットなので、今から使うのであればAPFSが第一選択肢になります。

APFSのrandom 4K writeの性能がやたら低い

さて、当初の目的は達成しましたが、グラフでひとつ気になる点があります。 APFSとHFS+のrandom 4K writeの性能がやたら低いところです。

f:id:entropiajp:20200531025143p:plain

exFAT比でHFS+が75%低速、 APFSに至っては92%減という結果になっています。これは一体何が起きているんでしょうか。

いろいろ調べてみたところ、今回測定ソフトとして使用したAmorphousDiskMarkの作者が詳細に説明されていました。 下記は、AmorphousDiskMarkの作者であるkatsura氏のフォーラム投稿を翻訳したものです。(意訳あり)

FAQ: 一貫性のないrandom 4K writeの測定結果

5秒間という測定時間制限は、下記の理由でAmorphousDiskMark2.5に導入されました。

  • もともと読み書き速度が遅いHDDに対して、測定時間が非現実的に長時間になってしまうことを避けるため
  • SSD上への不要な書き込みを避けるため
  • CrystalDiskMarkとの動作の整合性を保つため

この5秒間という測定時間制限によって、random 4K writeの測定結果が異なったり、一貫性のないものになったりすることがあります。

random 4K writeの測定結果は、5秒制限によって速くなったり、遅くなったり、ほぼ同じになったりします。
これは、SSDバイス自体の書き込みキャッシュの挙動によるものと思われます。

  • 速くなる場合:5秒間の測定中に書き込みキャッシュを使用していた可能性があります。(書き込みキャッシュが使用された場合は)実際にはフラッシュメモリに書き込まれていません。
  • 遅くなる場合:5秒間の測定中に書き込みキャッシュがキックインしなかった可能性があります。
  • 同じ場合:最初の5秒の間とその後の5秒の間に同じレートで書き込みキャッシュが使用された可能性があるか、またはデバイス上に有意な書き込みキャッシュがない可能性があります。

つまり、random 4K writeの測定結果は、SSDバイスの書き込みキャッシュの挙動によって変動し、デバイスの本来の性能を反映した値になっていない可能性が高いということです。これはAmorphousDiskMarkの仕様上、仕方がないものです。

ここで、フォーマットごとのBlock Sizeの違いを確認するとAPFS, HFS+では4KBiですが、exFATでは32KBiでした。
おそらくこれが結果の差を産んでいるんじゃないかと思うんですが、ここで力尽きてしまいました。この記事を読んでくださった有識者の方、いろいろ教えていただければ幸いです。

参考

クリーンインストール後のCatalinaにMojaveのiTunesライブラリを"綺麗に"移行する方法

macOS CatalinaではiTunesが廃止され、音楽管理アプリは「ミュージック」になりました。

iTunesという素晴らしいアプリ名をあろうことか「ミュージック」という、驚異的にググラビリティの低い名称に変えたAppleは本当にアホだと思います(社名も大概だけど)
通名詞をアプリ名や会社名にする行為は邪悪だと思うので、IT企業のお偉いさんの皆様におかれましてはぜひ控えていただきたく存じます。

※もう昔話ですがサーバー自動構成ツール「Chef」の開発元Opscode社が社名を「Chef」に変えた時も世界中の開発者から顰蹙買ってましたね〜 www.publickey1.jp

状況設定

  • 移行元マシンはMojave 10.14.6
  • 移行先マシンはCatalina 10.15.4
  • Apple Musicは未契約
  • 楽曲はほとんどがCDをリッピングしたもので、iTunes Music Storeから購入したものは非常に少ない
  • 外付けストレージを経由して、iTunesライブラリを移行したい
  • ただし、楽曲ファイル自体は最終的には移行先マシンに保存されている状態にしたい(外付けストレージを参照する形にはしたくない)

この記事を読んでいる方は、CatalinaではiTunesアプリが廃止されたせいで移行に際していろいろトラップがある、ということはご存知かと思います。しかし、ネット上のCatalina移行レポートのほとんどは、Catalinaが出たばかりの頃、つまり10.5.0とか10.5.1の時点での試行錯誤をまとめています。私はCatalinaがリリースされても人柱になりたくなかったのでしばらくMojaveにいましたが、おそらく、その頃のミュージックアプリの不安定さは現在(10.5.4)では解消されています。

手順

移行元マシンでの作業

iTunesライブラリを整理する

iTunesは賢いので、物理的な楽曲ファイル(.mp3とか.aacとか.wavとか)の保存場所があちこちに散らばっていても、ユーザーは普段気にせずに使うことができます。
が、このまま外付けストレージに移行すると爆死します(FAQで後述します)
まずはiTunesライブラリを整理しましょう。

  1. iTunesアプリケーション で、「ファイル」メニュー>「ライブラリ」>「ライブラリを整理」と選択します。
  2. 「ファイルを統合」と「“iTunes Media”フォルダ内のファイルを整理し直す」の両方にチェックを入れます。
  3. 「OK」を選択します。

ファイルは元の場所に残り、そのコピーが「iTunes」フォルダに置かれます。物理的な楽曲ファイルが「iTunes」フォルダ以下に集約されました。

移行元マシンのiTunesフォルダを外付けストレージにコピーする

Finderで ユーザー > ミュージック > iTunes の位置にある「iTunes」フォルダを丸ごと外付けストレージにコピーします。
これで移行元マシンでの作業は終わりです。

移行先マシンでの作業

ライブラリを選択する

optionキーを押しながらミュージックを起動すると、以下のウィンドウが表示されます。

f:id:entropiajp:20200530163701p:plain

「ライブラリを選択…」を選択します。すると、ファイルを選択するウィンドウが現れるので、外付けストレージの「iTunes」フォルダ直下にある iTunes Library.itl を選択して、「選択」をクリックします。

デフォルトでは ユーザー > ミュージックの直下にMusic Libraryファイルが作成されます。 私はLogicなど他の音楽アプリケーションも使っているため、階層を揃えたいという意図で、(ややこしいのですが)「ミュージック」フォルダの直下に「Music」フォルダが作成されるようにしました。

f:id:entropiajp:20200530164224p:plain

Mediaフォルダの場所を変更する

このままでもミュージックアプリに全ての楽曲が表示され、再生できますが、今はまだ外付けストレージの楽曲ファイルを参照している状態です。外付けストレージの接続を解除すると楽曲が再生できないはずです。(ただしiTunes Music Storeで購入した楽曲は除く)
冒頭に書いた通り、私は外付けストレージを外した状態でもミュージックアプリで楽曲を聴ける状態にしたいので、この一手間を加えます。

  1. Finderで、Music Library のある階層に「メディア」という名前のフォルダを作成します。
  2. ミュージックアプリで、「ミュージック」メニュー>「環境設定」>「ファイル」タブに移動します。
  3. 「"Music Media"フォルダを整理」と「ライブラリへの追加時にファイルを"Music Media"フォルダにコピー」の両方にチェックを入れます。
  4. 「変更」を選択し、1で作成したフォルダを選択します。
  5. 「""Media"フォルダの整理"の設定に従って、新しい"Media"フォルダにあるファイルを移動してファイル名を変更しますか?」のウィンドウが出たら「はい」を選択します。
  6. ミュージックアプリで、「ファイル」メニュー>「ライブラリ」>「ライブラリを整理」と選択します。
  7. 「ファイルを統合」と「“メディア”フォルダ内のファイルを整理し直す」の両方にチェックを入れます。
  8. 「OK」を選択します。

楽曲ファイルが外部ストレージから移行先マシンにコピーされます。楽曲数に応じて多少時間がかかります。

最終確認

外付けストレージを移行先マシンから外した状態でミュージックを起動して、楽曲の再生と、アルバムアートワークの表示が正常にできることを確認します。
これで移行作業は完了です。お疲れ様でした。

FAQ

以上の手順に従えば、全ての楽曲を、アルバムアートワークや追加日などのメタデータも維持した状態で綺麗に移行できますが、この手順で実施せずに移行がうまくできなくてインターネットを彷徨っている方向けにFAQを残しておきます。

Q. iTunes Library.xmlをインポートする方法で移行したら楽曲の追加日が全部インポートした日になったんだけど?

discussions.apple.com

これはAppleのフォーラムに投稿されていた質問で、今回とドンピシャな状況設定。
しかし、ここで回答されている解決方法は間違っています
iTunes Library.xmlをインポートしてしまうと、楽曲の追加日が全て「インポートを実施した日付」になってしまいます。 そうすると、例えばスマートプレイリストで「最近追加した曲」とか作成してた場合、全曲がそのプレイリストに表示されるようになって破綻します。同様に「2018年に買った曲」とかスマートプレイリストで作っててもぶっ壊れます。

Q. 大体のファイルは移行できたんだけど、一部の楽曲がミュージックアプリに表示されない

残念ながら、あなたは移行元のマシンで行う最初の作業「iTunesライブラリを整理する」をし忘れてしまったのだと思います。この作業を忘れてしまうと、「iTunes Media」フォルダではない別の場所に保管されていた楽曲ファイルは、外付けストレージにコピーされないので、当然移行先マシンにも存在しません。

参考にしたサイト

MacでiTunesファイルの保存場所を変更する - Apple サポート