Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
不動産データの複雑さをRustで解きほぐす話
Search
estie | エスティ
April 04, 2023
Programming
0
1.1k
不動産データの複雑さをRustで解きほぐす話
estie | エスティ
April 04, 2023
Tweet
Share
More Decks by estie | エスティ
See All by estie | エスティ
Platformに“ちょうどいい”責務ってどこ? 関心の熱さにあわせて考える、責務分担のプラクティス
estie
2
650
事業価値を作る「攻めるPM、守るPM」
estie
0
120
プレイングにマネジメントに。広がる役割と向き合う中での学び
estie
0
290
デザインと開発を変える、 生成AIとの向き合い方
estie
0
450
Snowflake ML モデルを dbt データパイプラインに組み込む
estie
0
380
ユーザー価値を最大化するための爆速開発
estie
0
190
10年PMをやって気付いた4つのPMタイプ
estie
0
480
自動と手動の両輪で開発するデータクレンジング
estie
2
410
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
380
Other Decks in Programming
See All in Programming
開発生産性が組織文化になるまでの軌跡
tonegawa07
0
140
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
340
Module Harmony
petamoriken
1
110
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
140
Bakuraku E2E Scenario Test System Architecture #bakuraku_qa_study
teyamagu
PRO
0
690
Register is more than clipboard
satorunooshie
1
460
チーム開発の “地ならし"
konifar
5
3.2k
AI駆動開発ライフサイクル(AI-DLC)のホワイトペーパーを解説
swxhariu5
0
510
Kotlin + Power-Assert 言語組み込みならではのAssertion Library採用と運用ベストプラクティス by Kazuki Matsuda/Gen-AX
kazukima
0
110
Phronetic Team with AI - Agile Japan 2025 closing
hiranabe
2
440
Inside of Swift Export
giginet
PRO
1
530
Atomics APIを知る / Understanding Atomics API
ssssota
1
120
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
76
5.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Code Reviewing Like a Champion
maltzj
527
40k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
The Invisible Side of Design
smashingmag
302
51k
The Language of Interfaces
destraynor
162
25k
RailsConf 2023
tenderlove
30
1.3k
How GitHub (no longer) Works
holman
315
140k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.1k
Visualization
eitanlees
150
16k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Writing Fast Ruby
sferik
630
62k
Transcript
不動産データの複雑さを Rustで解きほぐす話 2022/03/15 Rust、何もわからない… #7 yassan
1 発表者紹介 Kazushige Ando (yassan) estie Software Engineer 東京大学情報理工学系研究科中退後、 ノーコードツールの開発に従事。
2022年4月estieに入社。主に不動産デー タの管理を担当。Rustで新規データ の管理システムを開発中。
2 estie (エスティ) は オフィス賃貸業の羅針盤となる 不動産データ分析基盤の構築を 目指す不動産テック企業です
3 複雑な不動産データを 正確に扱いたい!
不動産データの複雑さ
データソースからのデータの例 募集ビル名,階,募集面積,募集賃料,貸付予定日,募集開始日,… テストビル,1F,123.45坪,@12345円,即入居可能,2023/01/02,… テストビル,2F,123.45坪,@12345円,即入居可能,2023/02/03,… テストビル,3F,123.45坪,@12345円,2023年07月,2023/03/04,… テストビル,4F,123.45坪,@12345円,2023年08月,2023/04/05,… テストビル,5F,123.45坪,@12345円,2023年09月,2023/05/06,… テストビル,6F,123.45坪,@12345円,2023年10月,2023/06/07,… … 5
不動産データはどう複雑なのか?
データソースからのデータの例 募集ビル名,階,募集面積,募集賃料,貸付予定日,募集開始日,… テストビル,1F,123.45坪,@12345円,即入居可能,2023/01/02,… テストビル,2F,123.45坪,@12345円,即入居可能,2023/02/03,… テストビル,3F,123.45坪,@12345円,2023年07月,2023/03/04,… テストビル,4F,123.45坪,@12345円,2023年08月,2023/04/05,… テストビル,5F,123.45坪,@12345円,2023年09月,2023/05/06,… テストビル,6F,123.45坪,@12345円,2023年10月,2023/06/07,… … 6
税込? 税抜? 共益費は いくら? 坪単価? 総額? 税込? 税抜? 坪単価? 総額? 賃料xヶ月分? 不動産データはどう複雑なのか?
データソースからのデータの例 募集ビル名,階,募集面積,募集賃料,貸付予定日,募集開始日,… テストビル,1F,123.45坪,@12345円,即入居可能,2023/01/02,… テストビル,2F,123.45坪,@12345円,即入居可能,2023/02/03,… テストビル,3F,123.45坪,@12345円,2023年07月,2023/03/04,… テストビル,4F,123.45坪,@12345円,2023年08月,2023/04/05,… テストビル,5F,123.45坪,@12345円,2023年09月,2023/05/06,… テストビル,6F,123.45坪,@12345円,2023年10月,2023/06/07,… … 7
税込? 税抜? 共益費は いくら? 坪単価? 総額? 税込? 税抜? 坪単価? 総額? 賃料xヶ月分? データを正確に扱うには隠れた属性の管理が必要 しかも隠れた属性はある日突然現れる 不動産データはどう複雑なのか?
8 それ、Rustで解決できますよ!
Rustのenumでのデータ管理
データソースからのデータの例 募集ビル名,階,募集面積,募集賃料,貸付予定日,募集開始日,… テストビル,1F,123.45坪,@12345円,即入居可能,2023/01/02,… テストビル,2F,123.45坪,@12345円,即入居可能,2023/02/03,… テストビル,3F,123.45坪,@12345円,2023年07月,2023/03/04,… テストビル,4F,123.45坪,@12345円,2023年08月,2023/04/05,… テストビル,5F,123.45坪,@12345円,2023年09月,2023/05/06,… テストビル,6F,123.45坪,@12345円,2023年10月,2023/06/07,… … 10
税込? 税抜? 共益費は いくら? 坪単価? 総額? 税込? 税抜? 坪単価? 総額? 賃料xヶ月分? // 共益費 // Common Area Maintenance Fee enum CamFee { // 共益費なし None, // 共益費(総額, 税有無) TotalAmount(u32, bool), // 共益費(坪単価, 税有無) PerArea(u32, bool), // 共益費(賃料比) Relative(f64), } 共益費をenumで表してみる
• 選択肢と値を一緒に持てる • C++だと選択肢だけ • Pythonだとできなくはないが煩雑 11 Rustのenumの良さ // 共益費
// Common Area Maintenance Fee enum CamFee { // 共益費なし None, // 共益費(総額, 税有無) TotalAmount(u32, bool), // 共益費(坪単価, 税有無) PerArea(u32, bool), // 共益費(賃料比) Relative(f64), }
• match式で網羅性チェックされる • C++もPythonも網羅性チェックなし 12 Rustのenumの良さ let total_cam_fee = match
cam_fee { CamFee::None => ..., CamFee::TotalAmount(_, _) => ..., CamFee::PerArea(_, _) => ..., CamFee::Relative(_) => ..., }; C++ですら網羅性チェックがあったとしても危険 CamFee fee = (CamFee)12345; が合法なため
• 気軽にシリアライズできる • C++はライブラリ組み込みが大変 • Pythonはデシリアライズの前後で 型を合わせるのが大変 13 Rustのenumの良さ #[derive(Serialize,
Deserialize)] enum CamFee { ... } let json: String = serde_json::to_string(&old_fee)?; let new_fee: CamFee = serde_json::from_str(&json)?; JSONのままDBに保存すればいいし、 型がそのままスキーマになる
14 複雑なデータでも Rustのenumで解きほぐせる!
新規プロダクトでのデータ管理
16 • estieではWhole Product構想で新規プロダクトを複数開発中 • 新規プロダクトの開発では、未知の属性に次々遭遇する • データは正確に表現しつつ、状況の変化への柔軟な対応が必要 新規プロダクトの立ち上げ時は特に大変!
17 • 最初はデータ管理処理をPythonで実装した • 主な理由は、スキルセットと実装初速の速さ • 賃料よりも格段に複雑なデータと判明し、やがて実装が破綻 • 強力なenumの使えるRustに移行して実装を進められるように 新規プロダクトの立ち上げ時の言語選定
18 • 鬼門とされる所有権システムは意外と気にならない • 変数をあちこちで書き換えないスタイルに慣れていれば十分 • 人間の注意力に頼っていた部分をコンパイラに任せられて楽 • enumの選択肢を追加したときの影響範囲の考慮など •
他のRustチームから飛び地的に使ってもメリットのほうが勝る Rustに移行した感想
19 型の強力さだけでも Rustを選ぶ価値は十分ある!
まとめ
21 • プロダクトの立ち上げ時のデータ管理は特に大変 • Rustのenumは複雑な構造のデータを扱うのに便利 • 型の強力さだけでRustを選ぶ価値は十分ある まとめ
22 プロダクトの立ち上げ時こそ Rustを使おう!