0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

インストール不要、1枚のHTMLで動く「未来体重予測シミュレータ」をWASMで構築した執念の設計思想

0
Last updated at Posted at 2026-04-19

はじめに

「自分の体重や体組成データは、誰にも渡したくない。でも、科学的な予測は手軽にやりたい」
そんな矛盾する願いを、1枚のHTMLファイルで解決しました。

今回、記念すべき10個目のプロジェクトとしてリリースした『WASM-PFC Simulator (The Body Projection)』は、サーバーレス、維持費0円、そして 情報漏洩リスク物理的0% を実現した、WebAssembly(WASM)ベースの本格ボディメイク支援ツールです。

本記事では、marimo v0.19.0 というリアクティブなノートブック型開発環境を用い、いかにして「業務アプリとしての品質」を追求したか、その設計思想の舞台裏を公開します。

1. 「Scipy を捨てて、オイラー法を実装した理由」:起動速度への執念

通常、体重推移の微分方程式を解くには scipy.integrate などの強力なライブラリが定石です。
しかし、WASM (Pyodide) 環境下では、Scipy のような巨大なC拡張ライブラリをロードするだけで、数十秒のロード遅延(コールドスタート問題)が発生します。

「ブラウザを開いて、一瞬でシミュレーションを始めたい」
このUXを死守するため、私は Scipy を捨てました。

人間の体重変化は、ロケットの軌道計算とは異なり、1日単位の緩やかなステップです。
1日を1ステップとする オイラー法(数値積分) を標準ライブラリ(math/numpy)のみで自作実装することで、実用十分な精度を保ちつつ、起動速度を数秒から数ミリ秒へと劇的に短縮しました。

さらに、marimo の有向非巡回グラフ(DAG)の純度を保ち、一時変数の漏洩(Loop Leak)を防ぐため、動的ループは副作用のない「純粋リスト内包表記マッピング」へと昇華させています 。

sample_code
# 代謝適応とForbesモデルを統合した1日単位の数値積分(Euler Method)
# セル内のグローバルスコープを汚染しないための内包表記マッピング
_proj_data = [
    _calculate_next_state(
        _day, 
        _target_kcal, 
        _current_params
    ) for _day in range(_simulation_days + 1)
]

2. 「Decimal 徹底による数値の整合性」:業務アプリとしての矜持

「$0.1 + 0.2 \neq 0.3$」
浮動小数点誤差は、栄養学や健康管理を扱う業務アプリにおいて、ユーザーの信頼を損なう致命的なノイズです。

本プロジェクトでは、内部計算ロジックの全工程で decimal.Decimal を一貫して使用する「Financial Precision(金融精度)」設計を徹底しました。

入力値を取得した瞬間から、マクロ栄養素の算出、エネルギーバランスの積分計算に至るまで Decimal で精度を保護。
可視化ライブラリ(Altair)に渡す直前まで float キャストを許容しないことで、100% の計算整合性を担保しています。

3. 「UI/UX のパラノイア」:スライダーを廃した指先の哲学

モダンなUIといえば「スライダー」ですが、スマホの小さな画面で「タンパク質 2.1g/kg」や「脂質 24%」といった微細な数値を狙い撃ちするのは、指が画面を隠すこともあり、ストレスの温床となります。

私は、開発の利便性よりもユーザーの操作精度を優先しました。
主流の mo.ui.slider をあえて捨て、mo.ui.number(step指定あり)に統一。
直接入力とスピンボタンによる確実な操作感を、モバイル環境の「指先」に提供しました。

また、モバイルでの表示崩れを防ぐため、ラベル名は 1 文字単位で削り、hstack(wrap=True) を駆使した Semantic Compression(意味論的圧縮)を施しています。

なぜ、今 WASM なのか?

情報漏洩が叫ばれる時代、最も安全なデータ管理とは「データを預からないこと」です。
WASM は、あなたの PC やスマホを強力な計算サーバーに変えます。データはブラウザの外へ一歩も出ません。

この「完全ローカル実行」という選択は、ユーザーに「プライバシー」という究極の自由を与えるための必然でした。


実機の動作を確認する

今回解説した設計思想に基づき、1枚のHTMLファイルで完結させたシミュレータの動作は、以下のページから確認いただけます。

[ WASM-PFC Simulator (The Body Projection) ]

技術スタック:

  • marimo v0.19.0 (WASM / Pyodide)
  • pandas / numpy / altair
  • Kevin Hall 博士の動的エネルギーバランスモデル
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?