概要
不動産会社向けの査定システム。管理画面から査定ルールを変更でき、エンジニアによる改修なしで査定基準を更新できる動的ルールエンジンを搭載。
想定利用シーン
- 不動産会社の物件査定業務
- 中古住宅販売における価格算出
- 土地査定シミュレーション
- 収益物件の価格査定
- 査定基準の社内統一・可視化
Demo / GitHub
🔗 Demo を試す | GitHub
スクリーンショット
トップページ — 3つの機能カード + システムの特徴フロー図
査定画面 — 土地の情報入力 + 査定結果・評価内訳
ルール管理画面 — ルール一覧テーブル + 編集モーダル
査定履歴画面 — 履歴一覧 + 展開表示
開発背景
不動産査定の現場では、市場動向や社内方針の変更に応じて査定基準を頻繁に変更する必要がある。しかし従来のシステムではロジックがコードに埋め込まれており、変更のたびにエンジニアの改修が必要だった。営業担当者でも査定ルールを変更できる運用を目指し、本デモを開発した。
解決した課題
- 査定基準の変更のたびにエンジニアの改修が必要 → 管理画面からリアルタイムに変更可能
- 査定の根拠が不透明 → 評価内訳を項目ごとにスコア表示
- 物件種別ごとに査定基準が異なる → 土地・中古戸建・収益不動産の3種別に対応
- 過去の査定結果が残らない → 査定履歴の保存・閲覧機能
主な機能
- 物件情報入力 → ルールベースの査定価格算出(基準価格 + スコア加算方式)
- 評価内訳の可視化(条件マッチ/不一致をスコア付きで一覧表示)
- ルール管理画面(追加・編集・削除、条件/閾値/配点の変更が即座に反映)
- 3種類の物件種別対応(土地・中古戸建・収益不動産)
- 査定履歴の保存・展開表示
- ルールから入力フォームを動的生成(ルール追加時にフォームも自動追加)
- 初期データへのリセット機能
使用技術
- フロントエンド: React 19 / TypeScript / Tailwind CSS 4 / Vite / React Router
- データ: LocalStorage
- デプロイ: Vercel
設計上の工夫
- 動的ルールエンジン: 査定ロジックをコードに固定せず、JSONデータとして外部化。ルールの追加・変更・削除がコード修正なしで可能。新しい査定項目を追加する場合も、ルールを追加するだけで対応できる
- 動的フォーム生成: ルールデータからフォームフィールドを自動生成。ルール追加時に査定画面の入力欄も自動で追加される
- 物件種別の独立管理: 土地・中古戸建・収益不動産で異なるルールセット・基準価格・スコア単価を独立管理
システム構成
ルールデータ(JSON、LocalStorage)
→ ルール管理画面で編集
→ 査定エンジン(ruleEngine.ts)が動的評価
→ 条件マッチ判定 → スコア加算 → 基準価格に反映
→ 評価内訳を可視化
→ 査定結果をLocalStorageに履歴保存
開発周期
約1日(集中開発)
担当範囲
要件定義 → 設計 → フロントエンド → ルールエンジン設計 → デプロイ(全工程を一人で担当)
成果・実現したこと
- 査定ロジックをコードから分離し、運用担当者だけで査定基準を変更できる仕組みを実現
- 物件種別ごとに異なるルールセット・基準価格・スコア単価を設定可能
- ルール追加時に入力フォームが自動生成される柔軟な設計
- サーバーレス構成により、バックエンドを用意せず軽量に運用できるアーキテクチャを実現
- Vercel無料枠での運用コスト0円
開発で直面した課題と解決方法
- 査定ロジックのデータ化: 査定ロジックをコードではなくデータとして設計する必要があった → JSONベースのルール定義に統一し、評価エンジンを共通化することで、ルールの追加・変更がコード修正なしで可能に
- ルールとフォームの同期: ルール管理画面で新しいルールを追加した際、査定画面のフォームにも対応する入力欄を自動で表示する必要があった → 静的フィールド定義とルールデータを統合し、動的にフォームフィールドを生成する設計を採用
- 複数ルールの同一フィールド対応: 「築年数10年以内 +100点」「築年数20年以内 +50点」のように、同じフィールドに複数の閾値ルールが必要 → ルールごとに独立した評価を行い、すべてのマッチを加算する方式で解決
このプロジェクトで学んだこと
- ルールエンジン設計 — ビジネスロジックをコードから分離し、データとして管理するアーキテクチャ。SaaS開発で頻出するパターン
- 動的フォーム生成 — データ構造からUIを自動生成する手法。管理画面やCMS開発で応用可能
- ルール変更を想定した設計 — 要件変更が多い業務システムでは、変更頻度の高い部分をデータ化することで保守性を大きく向上できること