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.2k
不動産データの複雑さをRustで解きほぐす話
estie | エスティ
April 04, 2023
Tweet
Share
More Decks by estie | エスティ
See All by estie | エスティ
dbt×Snowflakeで始めるデータコンペ
estie
0
28
企業価値に繋がるAI事業の創り方
estie
2
2.9k
データの価値を最大化する DaaSのUIデザイン
estie
0
230
エンジニアリングをやめたくないので問い続ける
estie
3
1.5k
第2回 国⼟交通省データコンペ参加者向け勉強会 Snowflake x estie編
estie
1
540
マルチプロダクトを支えるスケーラブルなデータパイプライン設計
estie
1
6.8k
Platformに“ちょうどいい”責務ってどこ? 関心の熱さにあわせて考える、責務分担のプラクティス
estie
2
820
事業価値を作る「攻めるPM、守るPM」
estie
0
220
プレイングにマネジメントに。広がる役割と向き合う中での学び
estie
0
340
Other Decks in Programming
See All in Programming
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
Raku Raku Notion 20260128
hareyakayuruyaka
0
370
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
270
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
AI & Enginnering
codelynx
0
120
Package Management Learnings from Homebrew
mikemcquaid
0
230
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
740
CSC307 Lecture 06
javiergs
PRO
0
690
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
240
Featured
See All Featured
Abbi's Birthday
coloredviolet
1
4.8k
First, design no harm
axbom
PRO
2
1.1k
Six Lessons from altMBA
skipperchong
29
4.2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
57
Practical Orchestrator
shlominoach
191
11k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
72
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
Speed Design
sergeychernyshev
33
1.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
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を使おう!