メインコンテンツへスキップ

不動産管理システムのDX推進

書類作成時間を1/3に削減。41テーブル × 12個のトリガー関数で複雑な不動産業務ロジックをDB側に実装したフルスタック開発。

Tech Stack

Next.js 14 (App Router)React 18TypeScriptSupabasePostgreSQLPL/pgSQLTailwind CSSMaterial-UIRecoilreact-to-print

AI Tools

CursorClaude Code

プロジェクト概要

不動産管理会社のDX推進プロジェクトを担当しました。物件・顧客データがExcelで分散管理され、契約書類作成に多くの手作業が必要だった状況を、システム化により大幅に改善しました。

要件定義からDB設計、フロントエンド・バックエンド、インフラまで、すべて一人で担当しました。

  • 開発期間: 6ヶ月以上の長期継続開発
  • 成果: 書類作成時間を1/3に削減し、営業活動時間の確保を実現
  • 担当範囲: フルスタック全担当(要件定義 → 設計 → 実装 → インフラ)

技術的なチャレンジ

41テーブルのデータベース設計

不動産管理業務の複雑さを理解し、7つの主要ドメインに分けてデータベースを設計しました。

主要ドメインは、物件管理、部屋管理、契約管理、顧客管理(借主)、オーナー管理(貸主)、入出金管理、業者管理の7つです。これらを適切にリレーション設計し、41テーブルの最適化された構造を構築しました。

特に重要だったのは、マルチテナント対応です。Supabaseの**RLS(Row Level Security)**を活用し、JWTのuser_metadataからcompany_idを取得し、テーブルのcompany_idと比較することで、企業ごとのデータ隔離を実現しました。すべてのビジネステーブルにRLSを適用し、セキュアなマルチテナント環境を構築しました。

PL/pgSQLによる業務ロジックの自動化

複雑な業務ロジックは、12個のPL/pgSQLトリガー関数として実装しました。アプリケーション層ではなくDB側にロジックを寄せた理由は、トランザクション内でのデータ整合性を保証するためです。

支払スケジュール自動生成では、請求月と請求期日の複合計算をトリガーで処理しました。契約情報が更新されると、自動的に翌月以降の支払スケジュールが生成されます。

契約ライフサイクル管理では、新規 → 更新 → 解約の状態遷移を制御しました。解約時には、翌月以降の支払いを自動的に無効化する処理も組み込みました。

この設計により、手作業によるミスを防ぎ、データの一貫性を保つことができました。

20種類以上の法的書類の自動生成

react-to-printを使用し、Reactコンポーネントとして書類をレイアウトしました。重要事項説明書、契約書、駐車場契約書、誓約書、入金領収書、精算書、年間支払明細書、解約申入書、契約更新通知、変更届、入居案内書、鍵預かり証、駐車場証明書など、20種類以上の法的書類を自動生成できる仕組みを構築しました。

Supabaseから物件・契約・顧客データを取得し、テンプレートに動的に反映させます。印刷時の改ページ制御にはCSS page-break-afterを使用し、A4用紙に正確に収まるようレイアウトを調整しました。

この仕組みにより、これまで手作業で行っていた書類作成が大幅に効率化され、書類作成時間を1/3に削減することに成功しました。営業担当者は、これまで書類作成に費やしていた時間を、顧客対応やフォローアップに充てることができるようになりました。

AI駆動開発の実践

このプロジェクトは、2024年の開発初期からCursorを使用し、2025年からはClaude Codeに移行しました。

RLS設計の壁打ちでは、AIに設計案をレビューしてもらい、セキュリティホールがないかチェックしました。コード生成では、ガードレールを引きながら活用し、単純な繰り返し作業を効率化しました。

AIツールを積極的に取り入れることで、開発効率を大幅に向上させることができました。一人での長期継続開発において、AIは頼れるペアプログラマーとして機能しました。

失敗と学び

順風満帆だったわけではありません。DB設計のやり直しビジネスロジックの大幅修正という、大きな失敗を経験しました。

要件の認識齟齬により、テーブル構造を大幅に修正する必要が生じました。特に、支払計算ロジックのトリガーを全書き換えする事態になり、マイグレーションファイルが42個に膨れ上がりました。支払い関連だけで複数回の大きな修正を繰り返すことになりました。

この経験から学んだことは、技術要件の仕様書を明確に残しておくことの重要性です。仕様書を作成し、顧客と細かく認識を合わせないと、取り返しのつかないロールバックが起こります。

失敗は辛い経験でしたが、仕様書の重要性を身をもって理解できたことは、今後のキャリアに大きく活きる学びとなりました。

得られた経験

  • ドメイン理解の重要性: 不動産業務の深い理解なしには正しいDB設計・ロジック実装は不可能
  • フルスタック力の向上: DB設計からUI実装まで一貫して担当した経験
  • データ整合性設計: トリガー関数によるビジネスロジックのDB実装
  • AI開発の可能性: CursorからClaude Codeへの移行を通じたAI活用の進化
  • 仕様書の重要性: 技術要件の仕様書を残し、顧客と認識を合わせることの重要性

求職者の方へ

このプロジェクトは、裁量権の大きさが最大の魅力でした。設計から実装まで、自分の判断で進められる環境があります。

一人でこの規模のDB設計、バックエンド、フロントエンド、インフラまで担当する機会は、なかなかありません。

TamaTでは、技術的成長を求める方に最適な環境が整っています。DB設計、フロントエンド、バックエンド、インフラまで幅広い領域に触れることができます。

また、AIツールを積極的に取り入れ、開発効率を追求する文化があります。CursorやClaude Codeを使った開発は、AI活用の最前線を体験できる貴重な機会です。

失敗を経験し、そこから学び、成長する。そういった環境で働きたい方、ぜひ一度お話ししましょう。

一緒に働きませんか?

カジュアルにお話ししましょう。お気軽にお申し込みください。