不動産

【2026年最新】不動産AI査定をClaude Codeで自動化|5実装手順

国交省不動産情報ライブラリAPIとClaude Codeで査定レポートを自動生成する実装パターンを5ステップで解説。コピペ可能なPython実装コード付き。

【2026年最新】不動産AI査定をClaude Codeで自動化|5実装手順

事例区分: 実装パターン解説
本記事は、国交省の公開APIと Claude Code を組み合わせた不動産AI査定レポート自動生成の実装パターンを解説しています。掲載数値は特記のない限り試算値です。実際の導入効果は物件種別・データ量・開発体制によって異なります。

結論:国交省 不動産情報ライブラリAPI(XIT001)と Claude Code を組み合わせれば、不動産査定レポートの作成工程を従来の手作業比で試算78%短縮できる実装パターンが構築可能です。

  • 要点1:国交省APIから取引価格・地価公示データを自動取得し、取引事例比較法ベースの査定ロジックをPythonで実装する(API利用は無料・認証不要)
  • 要点2:Claude Code の CLAUDE.md にドメイン知識を定義し、査定レポートの文言生成・PDF出力まで一気通貫で自動化する
  • 要点3:5つの実装ステップを順に追えば、開発者1名・2週間程度で動作するプロトタイプを構築できる(試算)

対象読者:不動産テック企業の開発者・PM、社内ツール開発を検討している不動産会社のDX推進担当

今日やること:Step 1 の国交省API疎通コードをローカルで実行し、自社対象エリアの取引データが取得できることを確認する

「査定書、もう少し早く出せないかな」

不動産仲介の現場で開発を手伝っていたとき、営業担当からこんな話を何度も聞きました。1件の査定レポート作成に平均90分。内訳は、REINS・国交省サイトでの類似事例検索に30分、Excelへのデータ転記に20分、レポート文面の作成に40分。月100件もの査定依頼がある中規模仲介会社では、この作業だけで月150時間以上の工数が費やされていました。

この課題に対して、国交省が2024年4月に公開した不動産情報ライブラリAPIと、Anthropic のClaude Codeを組み合わせることで、データ取得から査定ロジック実行、レポートPDF出力までを自動化する実装パターンを構築しました。本記事では、その実装の全手順をコピペ可能なコード付きで解説します。

不動産AI査定システムの構築パターンについては、不動産仲介の物件情報処理を自動化した事例も参考になります。

不動産AI査定 × Claude Code とは何か

AI査定の基本メカニズム

不動産AI査定とは、過去の取引事例データを機械学習モデルに学習させ、対象物件の推定価格を算出する技術です。主要なデータソースは以下の3つです。

  • 国交省 不動産取引価格情報 — 不動産取引当事者へのアンケートに基づく成約価格データ(四半期更新・API公開)
  • 国交省 地価公示・都道府県地価調査 — 毎年1月1日時点の標準地価格(年次更新・API公開)
  • REINS(レインズ)成約データ — 指定流通機構が保有する成約情報(個別物件特定不可の状態で公表)

2026年現在、都市部マンションでは査定誤差±3%前後まで精度が改善した事例が報告されています(renue社 2026年AI査定解説記事より。ただし物件種別・エリアにより大きく変動するため、この数値は全物件に適用できるものではありません)。

Claude Code が変える開発プロセス

Claude Code は Anthropic が提供するエージェント型コーディングツールです。コードベース全体を読み取り、複数ファイルにまたがる変更を計画・実行・テストまで一気通貫で行います(Claude Code 公式ドキュメント、参照日: 2026-05-18)。

エンタープライズ導入での平均コストは開発者1人あたり1アクティブ日約13ドル、月150〜250ドル程度です(Claude Code コスト管理ドキュメント、参照日: 2026-05-18)。

不動産査定システムの開発において、Claude Code が特に効果を発揮するポイントは以下です。

  1. API連携コードの自動生成 — 国交省APIのレスポンス仕様を読み取り、データ取得・パース・バリデーションまでのコードを一括生成
  2. ドメイン知識の CLAUDE.md 定義 — 不動産用語(坪単価、建ぺい率、容積率等)や査定ロジックのルールをプロジェクトに定義し、全セッションで一貫した実装を維持
  3. レポート文言の生成 — 査定結果を基に、読みやすい日本語の査定レポートテキストを自動生成

なぜ不動産査定に Claude Code が有効なのか

不動産査定システムの開発は「API連携 + 数値計算 + レポート生成」という3レイヤーの組み合わせです。従来はレイヤーごとに別々のツールで実装していましたが、Claude Code のエージェント的な動作により、1つのセッション内でデータ取得コード → 査定ロジック → レポートテンプレート → テストコードまでを連続して生成・修正できます。

特に CLAUDE.md に不動産固有のドメインルールを書いておくと、「坪単価」を平米単価に自動変換する、宅建業法の重要事項説明で必須の項目を漏らさない、といったドメイン固有の制約を全コード生成に反映できる点が強みです。

開発環境の準備とセットアップ

動作環境の要件

以下は本記事のコードの動作確認環境です。

# 動作確認環境(2026年5月18日時点)
# OS: Ubuntu 24.04 LTS / macOS 15.4
# Python: 3.12.4
# Claude Code: v1.0.33(claude-opus-4-6 モデル)
# Node.js: 22.x(Claude Code 動作要件)
# pip パッケージ: requests, pandas, reportlab, jinja2

python3 --version   # Python 3.12.4
claude --version     # claude-code v1.0.33
node --version       # v22.x

Claude Code のインストールと初期設定

# Claude Code インストール(npm 経由)
# 動作環境: Node.js 22.x, npm 10.x
npm install -g @anthropic-ai/claude-code

# 初回起動(認証フロー)
claude

# プロジェクトディレクトリを作成して移動
mkdir realestate-appraisal && cd realestate-appraisal
git init

# Claude Code でプロジェクト初期化
claude "Python プロジェクトの初期構造を作成して。pyproject.toml, src/, tests/ ディレクトリを含む"

CLAUDE.md で不動産ドメイン知識を定義する

CLAUDE.md はプロジェクトルートに配置するマークダウンファイルで、Claude Code がセッション開始時に自動的に読み込みます(Claude Code ベストプラクティス、参照日: 2026-05-18)。不動産ドメインの知識をここに定義しておくことで、生成されるコード全体にドメインルールが反映されます。

# CLAUDE.md の作成例
# 動作環境: Claude Code v1.0.33
# ファイルパス: プロジェクトルート/CLAUDE.md
cat > CLAUDE.md << 'EOF'
# 不動産AI査定プロジェクト

## ドメインルール
- 坪単価 = 平米単価 × 3.30579(1坪 = 3.30579平米)
- 築年数は「建築年月」からの経過年数(月単位で計算、端数切り上げ)
- RC造の法定耐用年数: 47年、木造: 22年、S造: 34年
- 駅距離は「徒歩分数 × 80m」で概算(不動産表示規約準拠)
- 査定額は万円単位で表示(千円以下切り捨て)

## API仕様
- 国交省 不動産情報ライブラリ API: https://www.reinfolib.mlit.go.jp/
- 取引価格 API (XIT001): 認証不要、JSON レスポンス
- レート制限: 明示的な公式制限なし(ただし過度なリクエストは控えること)

## コーディング規約
- Python 3.12+、型ヒント必須
- テストは pytest、カバレッジ 80% 以上を目標
- 金額計算は Decimal 型を使用(float の丸め誤差を回避)
- 個人情報(氏名・住所の番地以降)はログ出力・レポートに含めない
EOF

国交省 不動産情報ライブラリAPIからデータを取得する

API概要と認証

不動産情報ライブラリは、国土交通省が2024年4月に運用を開始した不動産オープンデータプラットフォームです(国土交通省 報道発表資料、参照日: 2026-05-18)。地価公示、都道府県地価調査、不動産取引価格情報、都市計画情報などを、APIを通じてプログラムから直接取得できます。

認証は不要で、誰でも無料で利用可能です。APIの操作説明は公式APIマニュアル(参照日: 2026-05-18)で確認できます。

取引価格情報(XIT001)の取得コード

以下は、Claude Code に「港区の直近1年間のマンション取引データを取得するコードを書いて」と指示して生成し、動作確認を行ったコードです。

# 動作確認環境: Python 3.12.4, requests 2.32.x
# ファイル: src/api/mlit_client.py
# 国交省API仕様: https://www.reinfolib.mlit.go.jp/help/apiManual/

import requests
from decimal import Decimal
from dataclasses import dataclass
from datetime import datetime


@dataclass
class TradeRecord:
    """取引事例レコード"""
    price: Decimal          # 取引価格(円)
    area_m2: Decimal        # 面積(平米)
    unit_price: Decimal     # 平米単価(円/平米)
    building_year: int      # 建築年
    walk_minutes: int       # 最寄駅徒歩分数
    structure: str          # 構造(RC, S, 木造等)
    use: str                # 用途(住宅, 事務所等)
    trade_quarter: str      # 取引時期(例: "20244")


def fetch_trade_prices(
    area_code: str = "13103",   # 港区
    from_q: str = "20241",       # 2024年第1四半期
    to_q: str = "20254",         # 2025年第4四半期
) -> list[TradeRecord]:
    """国交省 取引価格情報APIからデータを取得する。

    Args:
        area_code: 市区町村コード(例: "13103" = 港区)
        from_q: 開始四半期(YYYYQ形式)
        to_q: 終了四半期(YYYYQ形式)
    """
    url = "https://www.reinfolib.mlit.go.jp/ex-api/external/XIT001"
    params = {
        "response_format": "json",
        "area": area_code,
        "from": from_q,
        "to": to_q,
    }

    resp = requests.get(url, params=params, timeout=30)
    resp.raise_for_status()
    data = resp.json()

    records = []
    for item in data.get("data", []):
        try:
            price = Decimal(str(item.get("TradePrice", 0)))
            area_m2 = Decimal(str(item.get("Area", 0)))
            if area_m2 == 0:
                continue
            records.append(TradeRecord(
                price=price,
                area_m2=area_m2,
                unit_price=price / area_m2,
                building_year=int(item.get("BuildingYear", "0").replace("年", "").split("年度")[0]) if item.get("BuildingYear") else 0,
                walk_minutes=int(item.get("TimeToNearestStation", 0) or 0),
                structure=item.get("Structure", "不明"),
                use=item.get("Use", "不明"),
                trade_quarter=item.get("Period", ""),
            ))
        except (ValueError, TypeError):
            continue

    return records


if __name__ == "__main__":
    records = fetch_trade_prices()
    print(f"取得件数: {len(records)}")
    for r in records[:5]:
        print(f"  {r.price:>15,}円  {r.area_m2}平米  築{2026 - r.building_year}年  徒歩{r.walk_minutes}分")

地価公示データの取得と前処理

査定の基準値として地価公示データも取得します。取引事例と地価公示の両方を使うことで、市場実勢と公的評価の乖離を把握できます。

# 動作確認環境: Python 3.12.4
# ファイル: src/api/land_price_client.py

def fetch_land_prices(area_code: str = "13103", year: int = 2026) -> list[dict]:
    """地価公示APIからデータを取得する。"""
    url = "https://www.reinfolib.mlit.go.jp/ex-api/external/XKT001"
    params = {
        "response_format": "json",
        "area": area_code,
        "year": str(year),
    }
    resp = requests.get(url, params=params, timeout=30)
    resp.raise_for_status()
    return resp.json().get("data", [])

この2つのAPI取得コードを Claude Code のセッション内で「テストも書いて」と指示すれば、pytest のテストコードまで自動生成されます。

査定ロジックの実装パターン

取引事例比較法のアルゴリズム設計

不動産査定で最も一般的な手法は取引事例比較法です。対象物件と類似した過去の取引事例を複数選び、面積・築年数・駅距離・階数などの差異を補正して推定価格を算出します。

以下は Claude Code に「取引事例比較法で査定する関数を実装して。類似度スコアで上位5件を使い、加重平均で推定価格を出して」と指示して生成したコードをベースに、手動でバリデーションを追加したものです。

類似物件スコアリングの実装

# 動作確認環境: Python 3.12.4, pandas 2.2.x
# ファイル: src/appraisal/scoring.py
# 注意: 重み付けパラメータは試算値であり、
# 実運用では物件種別・エリアごとのチューニングが必要です。

from decimal import Decimal
from dataclasses import dataclass
import math


@dataclass
class TargetProperty:
    """査定対象物件"""
    area_m2: Decimal
    building_year: int
    walk_minutes: int
    structure: str
    floor: int = 1


@dataclass
class AppraisalResult:
    """査定結果"""
    estimated_price: Decimal
    estimated_unit_price: Decimal
    comparable_count: int
    confidence: str    # "高" / "中" / "低"


def calc_similarity(target: TargetProperty, record: TradeRecord) -> float:
    """対象物件と取引事例の類似度スコアを算出する(0〜1)。

    重み付け(試算値):
      面積差: 40%、築年数差: 30%、駅距離差: 20%、構造一致: 10%
    """
    # 面積差スコア(差が小さいほど高い)
    area_diff = abs(float(target.area_m2 - record.area_m2))
    area_score = max(0, 1.0 - area_diff / 50.0)

    # 築年数差スコア
    target_age = 2026 - target.building_year
    record_age = 2026 - record.building_year
    age_diff = abs(target_age - record_age)
    age_score = max(0, 1.0 - age_diff / 20.0)

    # 駅距離差スコア
    walk_diff = abs(target.walk_minutes - record.walk_minutes)
    walk_score = max(0, 1.0 - walk_diff / 15.0)

    # 構造一致スコア
    struct_score = 1.0 if target.structure == record.structure else 0.3

    return (
        area_score * 0.4
        + age_score * 0.3
        + walk_score * 0.2
        + struct_score * 0.1
    )


def appraise(
    target: TargetProperty,
    records: list[TradeRecord],
    top_n: int = 5,
) -> AppraisalResult:
    """取引事例比較法で査定額を算出する。"""
    scored = [
        (calc_similarity(target, r), r)
        for r in records
        if r.use == "住宅"
    ]
    scored.sort(key=lambda x: x[0], reverse=True)
    top = scored[:top_n]

    if not top:
        raise ValueError("類似事例が見つかりません")

    # 類似度で加重平均
    total_weight = sum(s for s, _ in top)
    weighted_price = sum(
        s * float(r.unit_price) for s, r in top
    ) / total_weight

    estimated_unit = Decimal(str(round(weighted_price)))
    estimated_total = estimated_unit * target.area_m2

    # 信頼度判定
    avg_similarity = total_weight / len(top)
    if avg_similarity >= 0.7 and len(top) >= 5:
        confidence = "高"
    elif avg_similarity >= 0.5 and len(top) >= 3:
        confidence = "中"
    else:
        confidence = "低"

    return AppraisalResult(
        estimated_price=Decimal(str(int(estimated_total / 10000) * 10000)),
        estimated_unit_price=estimated_unit,
        comparable_count=len(top),
        confidence=confidence,
    )

築年数・面積・駅距離の重み付けチューニング

上記コードの重み付け(面積40%、築年数30%、駅距離20%、構造10%)は試算値です。実運用では以下のアプローチでチューニングします。

  1. Claude Code でグリッドサーチを実装 — 「重み付けの4パラメータを0.1刻みでグリッドサーチし、過去データでのMAE(平均絶対誤差)が最小になる組み合わせを探索するコードを書いて」と指示
  2. エリア別パラメータ — 都心部は駅距離の重みが高く、郊外は面積の重みが高い傾向。エリアコード別にパラメータを切り替えるロジックを追加
  3. 定期的な再チューニング — 四半期ごとにAPIから最新データを取得し、パラメータを更新する CI ジョブを設定

金融業界での数値計算自動化のパターンについては、金融リスク計算をClaude Codeで刷新した実装ガイドも参考になります。

Claude Code で査定レポートPDFを自動生成する

テンプレートエンジンの選定

査定レポートのPDF生成には、Jinja2テンプレート + ReportLab の組み合わせが実用的です。Claude Code に「査定結果のデータクラスを受け取り、A4横のPDFレポートを出力する関数を作って。Jinja2 でHTMLテンプレートを書き、ReportLab の xhtml2pdf で変換して」と指示すると、テンプレートからPDF出力までの一連のコードが生成されます。

Claude Code によるレポート文言の自動生成

査定レポートに掲載する「査定コメント」の文言を Claude Code で生成するパターンです。以下は Claude Code のセッション内で使用するプロンプトの例です。

# Claude Code セッション内でのプロンプト例
# 動作環境: Claude Code v1.0.33, claude-opus-4-6 モデル

# ターミナルで以下を実行:
claude "以下の査定結果をもとに、不動産査定レポートの「査定コメント」セクションを
200字程度で書いて。宅建業者向けの専門的なトーンで。

対象: 港区南青山 RC造マンション 65平米 築12年 徒歩5分
推定価格: 8,940万円(平米単価 137.5万円/平米)
類似事例5件の加重平均、信頼度: 高
比較対象の平米単価レンジ: 128万〜152万円/平米

注意: 仮定した点は必ず「仮定」と明記。最終判断は宅建士が行う旨を含めること。"

PDFレンダリングとファイル出力

レポートのHTML → PDF変換のコードです。

# 動作確認環境: Python 3.12.4, jinja2 3.1.x, xhtml2pdf 0.2.x
# ファイル: src/report/generator.py

from pathlib import Path
from jinja2 import Environment, FileSystemLoader
from xhtml2pdf import pisa
from datetime import date


def generate_report_pdf(
    result: AppraisalResult,
    target: TargetProperty,
    address: str,
    output_path: Path,
) -> Path:
    """査定結果からPDFレポートを生成する。"""
    env = Environment(loader=FileSystemLoader("templates"))
    template = env.get_template("appraisal_report.html")

    html = template.render(
        date=date.today().isoformat(),
        address=address,
        area_m2=target.area_m2,
        building_year=target.building_year,
        walk_minutes=target.walk_minutes,
        structure=target.structure,
        estimated_price=f"{result.estimated_price:,.0f}",
        unit_price=f"{result.estimated_unit_price:,.0f}",
        comparable_count=result.comparable_count,
        confidence=result.confidence,
        disclaimer="本査定はAIによる試算値であり、"
                   "正式な不動産鑑定評価ではありません。"
                   "取引の判断は宅地建物取引士にご相談ください。",
    )

    with open(output_path, "wb") as f:
        pisa_status = pisa.CreatePDF(html, dest=f)

    if pisa_status.err:
        raise RuntimeError(f"PDF生成に失敗: {pisa_status.err}")

    return output_path

テスト・CI/CD・運用パターン

単体テストとE2Eテスト

Claude Code でテストコードを自動生成する際のポイントは、CLAUDE.md に「テストは pytest、カバレッジ80%以上」と書いておくことです。以下は Claude Code に「appraise 関数のテストを書いて。正常系・異常系・境界値を含めて」と指示して生成されたコードです。

# 動作確認環境: Python 3.12.4, pytest 8.x
# ファイル: tests/test_scoring.py

import pytest
from decimal import Decimal
from src.appraisal.scoring import (
    TargetProperty, TradeRecord, appraise, calc_similarity
)


@pytest.fixture
def sample_records() -> list[TradeRecord]:
    """テスト用取引事例データ(5件)"""
    return [
        TradeRecord(
            price=Decimal("80000000"), area_m2=Decimal("60"),
            unit_price=Decimal("1333333"), building_year=2015,
            walk_minutes=5, structure="RC", use="住宅",
            trade_quarter="20251",
        ),
        TradeRecord(
            price=Decimal("95000000"), area_m2=Decimal("70"),
            unit_price=Decimal("1357142"), building_year=2012,
            walk_minutes=3, structure="RC", use="住宅",
            trade_quarter="20252",
        ),
        # ... 省略(実際は5件以上用意)
    ]


@pytest.fixture
def target() -> TargetProperty:
    return TargetProperty(
        area_m2=Decimal("65"), building_year=2014,
        walk_minutes=5, structure="RC",
    )


class TestCalcSimilarity:
    def test_identical_property_returns_high_score(self, target, sample_records):
        """完全一致に近い事例は0.8以上のスコアを返す"""
        score = calc_similarity(target, sample_records[0])
        assert score >= 0.7

    def test_different_structure_penalized(self, target, sample_records):
        """構造が異なる場合スコアが下がる"""
        record = sample_records[0]
        record_diff = TradeRecord(
            price=record.price, area_m2=record.area_m2,
            unit_price=record.unit_price, building_year=record.building_year,
            walk_minutes=record.walk_minutes, structure="木造",
            use="住宅", trade_quarter=record.trade_quarter,
        )
        score_same = calc_similarity(target, record)
        score_diff = calc_similarity(target, record_diff)
        assert score_same > score_diff


class TestAppraise:
    def test_returns_valid_result(self, target, sample_records):
        """正常系: 有効な査定結果が返る"""
        result = appraise(target, sample_records)
        assert result.estimated_price > 0
        assert result.comparable_count >= 1

    def test_empty_records_raises(self, target):
        """異常系: 事例0件でValueError"""
        with pytest.raises(ValueError, match="類似事例"):
            appraise(target, [])


# テスト実行: pytest tests/ -v --cov=src --cov-report=term-missing

GitHub Actions での自動化

APIデータの定期取得とテストの自動実行を GitHub Actions で構成します。Claude Code に「四半期ごとにAPIデータを取得し、テストを実行するGitHub Actions ワークフローを書いて」と指示すれば、cronスケジュール付きのYAMLが生成されます。

運用時のモニタリング

運用フェーズで注意すべき指標は以下の3つです。

  • API応答時間 — 国交省APIはSLA非公開。タイムアウト30秒を設定し、リトライロジックを実装
  • 査定精度の経時変化 — 四半期ごとに直近成約データと比較し、MAE(平均絶対誤差)が閾値を超えたらアラート
  • レポート生成の成功率 — PDF生成失敗(フォント欠落、テンプレートエラー等)を Sentry 等で監視

段階的導入のロードマップ

Phase 1(1〜2週間): API疎通とプロトタイプ

Claude Code でAPIクライアントと基本的な査定ロジックを実装。対象を1エリア・マンションに限定し、10件程度の手動検証で精度を確認します。開発者1名で着手可能です。

Phase 2(3〜4週間): レポート自動化と社内テスト

PDF レポート生成を追加し、営業担当3〜5名に試用してもらいます。フィードバックを反映してレポートの文言・レイアウトを調整。この段階で CI/CD パイプラインも整備します。

Phase 3(2〜3ヶ月): 対象エリア拡大と精度改善

対象を複数区・戸建てまで拡大し、エリア別のパラメータチューニングを実施。査定精度のダッシュボードを構築し、継続的な改善サイクルを回します。

段階的導入のアプローチについては、製造業の生産管理データ自動化事例で紹介されている Phase 別の進め方も参考になります。

試算効果(モデルケース)

指標 従来(手作業) 自動化後(試算) 改善幅(試算)
査定レポート作成時間 90分/件 20分/件(確認含む) -78%(試算)
月間処理可能件数(1名) 約50件 約150件(試算) 3倍(試算)
データ入力ミス率 3〜5%(試算) 0.5%未満(試算) -85%以上(試算)
開発コスト(Claude Code) 月250ドル/開発者(試算)

測定条件(試算前提): 対象は都市部マンション、月100件の査定依頼、開発者1名+営業担当5名の体制を想定。Claude Code コストは Anthropic 公式のエンタープライズ平均値(月150〜250ドル/開発者)の上限を採用。人件費削減効果は、1時間あたり人件費5,000円×削減時間で算出。

【要注意】よくある失敗パターンと回避策

失敗1: APIデータの前処理不足で査定が大きくズレる

❌ 国交省APIのレスポンスをそのまま計算に使う。BuildingYear フィールドが「昭和63年」「平成元年」「令和3年」のように和暦文字列で返ってくるケースがあり、パースに失敗して築年数0年として計算される。

⭕ 和暦→西暦の変換関数を必ず実装する。Claude Code に「BuildingYear の和暦パース関数を書いて。昭和・平成・令和・年度なし・空文字のパターンをすべてハンドリングして」と指示すれば、パターン網羅のコードが生成される。テストケースも「昭和63年→1988」「令和3年→2021」「空文字→None」を含めること。

失敗2: 査定精度を過信してレポートに「鑑定評価」と書く

❌ AI査定の結果を「不動産鑑定評価額」とレポートに記載する。不動産鑑定評価は不動産鑑定士のみが行える独占業務であり、AI査定結果を「鑑定評価」と称することは不動産の鑑定評価に関する法律に抵触するおそれがあります。

⭕ レポート上の表記は必ず「AI参考査定価格」「推定価格(試算値)」とし、「本査定はAIによる試算値であり、正式な不動産鑑定評価ではありません。取引の判断は宅地建物取引士・不動産鑑定士にご相談ください」の免責文を記載する。CLAUDE.md にこのルールを明記しておけば、Claude Code がレポート文言を生成する際に自動的に免責文を含めるようになる。

失敗3: Claude Code の生成文にハルシネーションが混入する

❌ Claude Code が生成したレポートコメントに「当該エリアでは再開発計画が進行中」と書かれたが、実際には該当する再開発計画は存在しなかった。LLMは学習データに基づいて尤もらしい文を生成するため、特定エリアの開発計画のような固有事実は誤る可能性がある。

⭕ レポートコメントの生成時に、Claude Code への指示に「APIから取得したデータの範囲内でのみコメントすること。APIデータに含まれない外部情報(再開発計画、将来予測、周辺施設の評価等)は記載しないこと」と明記する。さらに、生成後のレビュー工程を必ず入れ、宅建士が事実確認してからPDFを確定する運用フローにする。

失敗4: 個人情報がログ・レポートに残る

❌ 査定依頼者の氏名・住所(番地以降)・電話番号がデバッグログや生成レポートに含まれ、開発環境のログファイルに平文で保存される。

⭕ CLAUDE.md に「個人情報(氏名・住所の番地以降・電話番号)はログ出力・レポートに含めない」と定義する。ログレベルを適切に設定し、production環境ではDEBUGログを無効化する。レポート上の住所表記は「○○区○○丁目」までとし、番地以降は表示しない。個人情報の取り扱いについては、所属組織のコンプライアンス規程に必ず従ってください。

よくある質問(FAQ)

Q1: 不動産AI査定とは何ですか?

不動産AI査定とは、過去の取引事例データや公示地価データをAI(機械学習モデル)に学習させ、対象物件の推定価格を自動算出する技術です。不動産鑑定士が行う法定の鑑定評価とは異なり、あくまで参考価格の試算です。本記事では、国交省の公開APIとClaude Codeを組み合わせてこの査定システムを開発する実装パターンを解説しています。

Q2: Claude Code の利用料金はいくらですか?

Claude Code は Claude Pro(月額20ドル)、Max(月額100〜200ドル)、Team、Enterprise プランで利用できます。エンタープライズ導入でのClaude Code 平均コストは開発者1人あたり1アクティブ日約13ドル、月150〜250ドル程度です(Anthropic公式ドキュメント「Manage costs effectively」、2026年5月時点)。API経由の場合は、Claude Opus 4.5 が入力$5/出力$25 per million tokens です。

Q3: 無料で試せますか?

国交省の不動産情報ライブラリAPIは無料・認証不要で利用できます。Claude Code 自体は有料プランが必要ですが、Anthropic API のフリーティアで少量のAPI呼び出しは可能です。まずはAPIの疎通確認だけなら、curlコマンドで無料で試せます。

Q4: 従来の不動産査定ソフトと何が違いますか?

従来の不動産査定ソフト(SaaS型)は既製のUI・ロジックで動作しますが、Claude Codeを使ったアプローチは、自社の業務フローに合わせてロジック・レポート形式・データソースをフルカスタマイズできる点が異なります。ただし、開発・保守の工数が発生するため、IT人材がいない場合はSaaS型の方が適切なケースもあります。

Q5: 開発者がいない不動産会社でも使えますか?

本記事の実装パターンはPython開発経験のあるエンジニアを前提としています。社内にエンジニアがいない場合は、不動産テック企業が提供するSaaS型のAI査定サービスを利用するか、外部の開発パートナーに依頼することをお勧めします。Claude Code自体はプログラミング経験がなくても自然言語で指示できますが、不動産査定のドメイン知識と品質管理にはエンジニアリングの判断が必要です。

Q6: 査定精度はどの程度ですか?

精度は物件種別・エリア・データ量に大きく依存します。一般に都市部のマンションは取引事例が豊富なため精度が高く、郊外の戸建て・土地は事例が少なく精度が下がります。本記事の実装パターンで達成可能な精度は、対象エリアのデータ量次第であり、一概に数値を示すことはできません。実運用前に必ず手動検証を行ってください。

まとめ:今日から始める3つのアクション

  1. 今日やること: 国交省 不動産情報ライブラリAPIの公式APIマニュアルを読み、本記事の XIT001 取得コードをローカルで実行する。自社が扱うエリアの市区町村コードでデータが返ってくることを確認
  2. 今週中: Claude Code をインストールし、CLAUDE.md に不動産ドメインルールを定義。査定ロジックのプロトタイプを1エリア・マンション限定で実装
  3. 今月中: 営業担当にプロトタイプを試用してもらい、レポートの文言・レイアウトのフィードバックを収集。精度検証として手動査定結果との比較を10件以上実施

次回予告: 次の記事では、REINS連携が不要なオープンデータだけで構築する「中古マンション価格予測モデル」の実装パターンを解説予定です。


参考・出典


著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。早稲田大学法学部在学中に生成AIの可能性に魅了され、X(旧Twitter)で活用法を発信(@SuguruKun_ai、フォロワー約10万人)。100社以上の企業向けAI研修・導入支援を展開。著書『AIエージェント仕事術』(SBクリエイティブ)。SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

ご質問・ご相談は お問い合わせフォーム からお気軽にどうぞ。

Claude Code の導入を検討中の開発チームには、Claude Code 個別指導プログラムもご用意しています。不動産テック企業での導入支援実績もありますので、技術的なご質問がある方はお声がけください。また、自社での開発リソースが不足している場合は、AI開発受託サービスでプロトタイプからプロダクションまでお手伝い可能です。

最終確認日:2026年5月19日

不動産AI査定をClaude Codeで自動化|5実装手順とは

Claude Codeによる業務自動化とは、既存のコード、ログ、業務データ、手順書をもとに、Claude Codeで実装・検証・改善を進める開発ワークフローです。この記事のテーマである「不動産AI査定をClaude Codeで自動化|5実装手順」も、AIの出力をそのまま正解にするのではなく、人が確認する前提で使うことで実務に落とし込みやすくなります。 この記事では、国交省不動産情報ライブラリAPIとClaude Codeで査定レポートを自動生成する実装パターンを5ステップで解説。コピペ可能なPython実装コード付き。という観点を中心に整理しています。

まず結論

まず結論として、AIは作業を速くする道具ですが、事実確認、個人情報・機密情報の扱い、外部公開前の確認は人が担うべきです。小さな業務から始め、確認手順を残すことで、記事内の手順を現場で再現しやすくなります。

比較・整理表

観点 AIで軽くできること 人が確認すること
要件整理 業務フロー、入力、出力、制約を文章化する 個人情報、契約情報、権限範囲を確認する
実装 スクリプト、テスト、連携処理を作る 本番データで直接試さない
運用 ログ、失敗時の通知、再実行手順を整える 人が確認するレビュー境界を残す

実務で使う手順

  1. 対象業務と成果物を1つに絞ります。
  2. 入力してよい情報と入力してはいけない情報を分けます。
  3. AIの下書きを作り、事実・日付・数字・固有名詞を確認します。
  4. 公開または社内共有の前に、担当者が最終確認します。
  5. 使ったプロンプトと修正点を残し、次回のテンプレートに反映します。

公式ソース

FAQ

Claude Codeの事例をそのまま自社に使えますか?

業務データ、権限、既存システムが異なるため、要件と安全確認を自社向けに調整します。

本番導入前に何を確認しますか?

テストデータでの再現性、ログ、権限、失敗時の戻し方、担当者のレビュー手順を確認します。

Next Step

この事例を、自社の業務に置き換える。

対象業務、利用データ、評価基準、社内展開の順番まで整理すると、Claude Code導入の失敗を減らせます。

導入を相談する