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
630
不動産データの複雑さをRustで解きほぐす話
estie | エスティ
April 04, 2023
Tweet
Share
More Decks by estie | エスティ
See All by estie | エスティ
Snowflakeで眠ったデータを起こそう!
estie
0
140
会社説明資料|株式会社estie / company profile
estie
8
160k
SnowflakeをRustで使おう!
estie
0
78
コアデータを起点にした商業用不動産の未来を導くマルチプロダクト戦略
estie
0
770
async_graphqlのguardが便利だった話
estie
0
560
満を持して始めるRust
estie
19
13k
Enumを自動で網羅的にテストしてみた
estie
0
2k
Railsでモデリングする不動産データ分析
estie
0
760
Digital Hack Day 2022 オフィス不動産データ説明
estie
0
330
Other Decks in Programming
See All in Programming
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
440
Apache Hive 4 on Treasure Data
ryukobayashi
1
410
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
1k
Java 22 Overview
kishida
1
190
使ってみよう Azure AI Document Intelligence
kosmosebi
2
360
スキーマ駆動開発による品質とスピードの両立 - 私達は何故、スキーマを書くのか
kentaroutakeda
0
180
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
680
Implementing Design Systems in Swift
seyfoyun
1
440
敵対的ポイフル
futabato
0
130
VS Code をプロダクトにどう取り込むか
onomax
1
650
Code Reviews
bkuhlmann
4
900
Try creating your own orderedmap
kazamori
1
170
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
Build The Right Thing And Hit Your Dates
maggiecrowley
25
2k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Building Flexible Design Systems
yeseniaperezcruz
320
37k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
The Pragmatic Product Professional
lauravandoore
26
5.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
649
58k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
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を使おう!