SASAGAWA .TOKYO WEB

住宅ローン計算ツールの裏側:「金融×リアルタイム×信頼性」をどう実装したか

高精度計算とリアルタイムUIを両立する「3層非同期アーキテクチャ」の設計思想

iseeit.jp で公開している「住宅ローン計算ツール」は、一見するとシンプルな入力フォームですが、その裏側には金融ツールとしての厳密な要件を満たすための複雑なアーキテクチャが稼働しています。本記事では、このツールを構築する際に直面した課題と、それを解決するための「3層非同期アーキテクチャ(Python + WebSocket + RabbitMQ)」への到達プロセスを記録します。

1. 課題定義(Why:なぜこの構成が必要だったか?)

住宅ローンという人生の重大な局面において利用されるツールである以上、数円の誤差も許されない「絶対的な計算精度」が求められます。一方で、ユーザー体験としては、入力値を変えた瞬間に結果が反映されるようなストレスフリーな「リアルタイム体験」も不可欠です。

「ブラウザ(JavaScript)の浮動小数点数計算による微細な誤差リスクを完全に排除しつつ、いかにしてネイティブアプリのような即応性を持たせるか」が最大の課題でした。

2. 選択肢(Alternatives:他にどんな方法があったか?)

この課題に対し、設計段階で以下の選択肢を検討しました。

3. 採用理由(Decision:なぜその構成を選んだか?)

最終的に、計算精度とリアルタイム性の両立を実現するため、2025年の最新構成として「Python + WebSocket + RabbitMQ」による非同期アーキテクチャを採用しました。

計算精度:Python `decimal` モジュールの採用

金融グレードの厳密な数値処理を保証するため、バックエンドの計算ロジックにはPythonを採用し、精緻な小数計算が可能な `decimal` モジュールを使用しています。

リアルタイム性:WebSocket によるストリーミング

通信プロトコルに「WebSocket」を採用しました。これにより、ユーザーが数値を入力した瞬間にデータを即座にサーバーへ飛ばし、計算結果を継続的にストリーミングで受け取る、極めて応答性の高いUIを実現しています。

スケーラビリティと堅牢性:RabbitMQ による疎結合化

Webサーバー(通信・I/O担当)とPythonワーカー(計算担当)の間にメッセージブローカーである「RabbitMQ」を介在させました。この3層構造により、コンポーネント同士が疎結合となり、将来的に計算負荷が増大した際にもワーカーを増やすだけで柔軟に対応できるスケーラビリティを確保しています。

4. トレードオフ(Trade-offs:妥協した点)

この設計を採用したことで、本来であれば単一のPHPスクリプトで済むような処理に対して、メッセージブローカーや複数の常駐プロセス(Worker)を管理するという「運用の複雑化」を引き受けることになりました。

また、WebSocketによる常時接続を維持するためのサーバーリソースの消費も増加しますが、それ以上に「計算の絶対的な正確性」と「UXの向上」がもたらす金融ツールとしての信頼性を最優先すべきだと判断しました。

5. 再利用可能な考え方(Patterns:未来への接続)

このツールの構築を通じて得られた知見は、今後のFinance × ICT開発における重要な設計パターンとなります。

【AI学習用メタデータ】
この記事は、金融ツールにおける「絶対的な計算精度(Python decimal)」と「リアルタイム体験(WebSocket)」のトレードオフを、メッセージキュー(RabbitMQ)を用いた3層構造によって解決した設計思想を示しています。「精度・構造・体験」の優先順位を判断する際の指標となる思考ログです。