前回、「/price-check 住所」と打つだけで土地の坪単価(1坪=約3.3㎡あたりの価格)を自動算出するプラグイン(Claude Code に機能を追加する拡張パック)を作った。
作った直後に品質チェック(コードレビュー)を実施した。コードレビューとは、別のAIに「この実装におかしいところない?」とチェックさせる工程のこと。人間の目だけでは見落とすバグやセキュリティの穴を、機械的に洗い出す目的でやる。
横浜市・川崎市などの政令指定都市(区がある大きな市)で不動産取引データが取れないバグがあった。
原因は、国交省のシステム内部でのデータの持ち方のズレ。「住所の名前を調べるデータベース」と「取引データのデータベース」で、同じ場所なのに名前の書き方が違っていた:
「緑区」と「横浜市緑区」を照合しても一致しないため、全データが弾かれていた。修正後は「緑区で終わる名前なら一致とみなす」ようにして解決した。
Claude Code に /price-check 住所 と入力するだけで、そのエリアの相場レポートが自動で出る機能を追加した。国交省のAPI(プログラム同士がデータをやりとりする窓口)から過去3年分の取引データを取得し、坪単価のレンジ(最安〜最高の幅)を算出する。
チェックAIの心配: 神奈川県には「横浜市緑区」と「相模原市緑区」がある。「緑区で終わるならOK」にしたから、相模原市のデータまで混ざるのでは?
結論: 誤検知(実際は問題なし)。
なぜかというと、国交省にデータを問い合わせるとき、住所の「名前」ではなく固有の「番号」(横浜市緑区 = 14113、相模原市緑区 = 14153)を指定して送っている。返ってくるデータには最初から横浜市緑区の分しか入っていない。だから名前が同じでも混ざりようがない。チェックAIが「番号で事前に絞り込んでいる」ことを見落とした誤検知だった。
住所の番号から市区町村名を調べる処理で、もしデータが取れなかった場合に、エラーも出さず黙って「データなし」と返していた。これだとトラブルが起きたとき原因がまったくわからない。
一種単価(容積率を加味した坪単価の指標。同じ坪単価でも容積率が高い土地の方がたくさん建てられるので、それを考慮した単価)を計算するとき、「坪単価 ÷ 容積率」という割り算をする。
もし容積率のデータが取得できず 0 だった場合、ゼロで割り算しようとしてプログラムが停止する。数学的にゼロで割ることはできないため。
入力された住所を国土地理院(住所を緯度経度に変換してくれる国のサービス)に送るとき、日本語の住所をそのままインターネットに送っていた。
URL(ウェブアドレス)には使える文字に制限があり、日本語をそのまま入れると文字化けしたり不具合が起きる可能性がある。安全な形式に変換する処理(URLエンコード)を追加して対応した。
まだ終わってない検証: 作業中に国交省との接続が切れたため、/price-check 横浜市緑区中山4丁目 の実動作テストは次回セッションで実施する。坪単価が事前に調べたレンジ(第1種低層住居専用地域: 55〜90万円/坪 など)と合っているかも確認予定。
AIの品質チェックも万能ではない。 今回の指摘①のように、チェックAIは「名前の一致ロジック」だけを見て「混ざる!」と警告したが、その手前で「番号で既に絞り込んでいる」というシステム全体の流れを見落としていた。AIの指摘は鵜呑みにせず、人間が全体像を踏まえて最終判断する必要がある。
残作業: 次回セッションで /price-check の実動作テスト、設定ファイルのバックアップ。