| 領域 | 採用 | 選定理由 | 不採用とした代替案(理由) |
| 言語 | TypeScript 5系(strict) | データ駆動UI(型=single/comp/flow/point で分岐)は型検査の恩恵が大きい。any/unknown 不使用、判別可能ユニオンで dtype を表現 | 素のJS(規模拡大時の回帰リスク) |
| UI構成 | React 19(関数コンポーネント+フック。状態は useReducer+Context)+描画は純TSレンダラのハイブリッド | フィルタ8軸以上×複数パネルの連動・お気に入り復元など「状態→画面の同期」が本番の複雑性の中心であり、宣言的UIに任せるのが最も安全。保守要員の調達性(国内市場でReact経験者が最多)を優先。SVGは全てJSXで宣言的に生成し、.svgファイルのインポートを行わない設計(インポート起因のビルド問題を構造的に排除)。複雑図形のパス計算は純TS関数に分離し、プロトタイプの描画資産を温存 | フレームワークレス(当初案。状態同期の手動管理が保守リスクのため改訂)、Preact(軽量だが調達面でReact優先)、Vue/Svelte(同等成立するが同上)、Next.js(SSR不要・静的1画面に過剰) |
| ビルド | Vite 7系(base:'./' 相対パス出力)+ esbuild/Rollup(内蔵) | 静的一式の出力が容易・高速。相対パス出力のため、統合サーバの任意ディレクトリ配下に置ける(※file://での直接起動は不可:データのfetch読込とログインが成立しないため) | webpack(設定コスト)、ビルドなし素配布(TS・分割・最適化を諦めることになる) |
| 地図描画 | topojson-client 3 + d3-geo 3(投影・パス生成のみ)+ 自前SVG | TopoJSON展開と正距円筒/メルカトル投影だけ借り、描画は既存プロトタイプのSVG方式を継続。合計~30KB程度と軽量 | MapLibre GL(WebGL・タイル基盤前提で低スペックPCと閉域配布に不向き)、Leaflet(ラスタタイル前提。背景地図が不要な塗り分け中心の本件では過剰) |
| グラフ描画 | 自前SVG(プロトタイプ流用)+ d3-scale / d3-shape(軸・スケール計算のみ) | 14ビュー中サンキー・二変量・OD行列など汎用ライブラリで作れない図が多く、既に自前実装が存在。ライブラリは計算ユーティリティに限定 | Chart.js(特殊図非対応で二重実装になる)、ECharts(~1MBでバンドル目標超過・Apache-2.0は可だが過剰) |
| CSV解析 | Papa Parse 5 | RFC 4180・BOM・引用符の実績あるパーサ。データパックのCSVをブラウザ内で直接読む本設計の要 | 自前パーサ(モックでは使用したが、本番はエッジケース実績を優先) |
| ローカル保存 | localStorage + IndexedDB(idb 8系ラッパ)+ File System Access API(非対応時は通常ダウンロードにフォールバック) | 県回答Q2-2-3で両ストレージ利用可を確認済み。設定ファイルの「前回の場所へ上書き保存」はEdgeがFile System Access API対応のため成立 | サーバ保存(要件で明示的に除外)、Cookie(容量不足) |
| フォント・配色 | BIZ UDPゴシック(SIL OFL)同梱/CUD配慮パレット | UD書体で可読性確保。JIS X 8341-3(要否確認中)に先回りしコントラスト比4.5:1以上を基準化 | システムフォント任せ(端末差で表崩れ) |
| 候補 | 不採用の理由 |
| Power BI/Tableau 等のBI製品 | 県にライセンスなし(Q5-5)。職員全員分の継続ライセンス費が発生し、データパック後入れ・ローカル保存要件との適合も低い |
| Next.js 等のSSRフレームワーク | 静的1画面のSPAにSSR・ファイルルーティング基盤は過剰(ReactそのものはSPAとして採用。ビルドはViteで静的出力) |
| .svgファイルのインポート(svgr等のローダ経由) | ビルド設定依存でトラブルが多い(実際に発生)。地図・図形はTSデータモジュール+JSX生成に統一し、本番はTopoJSONからの実行時生成へ移行するためSVGファイル自体を持たない |
| MapLibre/Leaflet(地図基盤) | 背景タイル前提・WebGL負荷。本件は境界塗り分け+点+フローのみで、TopoJSON→SVGで十分軽い |
| サーバサイドDB(PostgreSQL等のRDBMS) | 分析データは集計値CSV数MBでファイル配信のまま扱える。サーバが保持するのはアカウント情報とデータパックの版数履歴だけで、SQLite等の単一ファイルDBで足りる(別プロセスのDBサーバを庁内に増やさない) |
| WebSocket/SSE によるライブ機能 | SSLインスペクション実施(Q2-3-2)で遮断リスク。要件上も不要 |