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
850
不動産データの複雑さをRustで解きほぐす話
estie | エスティ
April 04, 2023
Tweet
Share
More Decks by estie | エスティ
See All by estie | エスティ
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
PMとデザイナーが協働してプロダクトを最速で立ち上げるための一つのメソッド
estie
0
23
GraphQLでいい感じの検索APIを作りたい
estie
0
300
GraphQLにおけるページネーションベストプラクティス
estie
0
360
不動産 x AIことはじめ~データの真価を拓くために
estie
0
290
Snowflakeで眠ったデータを起こそう!
estie
0
410
会社説明資料|株式会社estie / company profile
estie
9
190k
SnowflakeをRustで使おう!
estie
0
270
コアデータを起点にした商業用不動産の未来を導くマルチプロダクト戦略
estie
0
1k
Other Decks in Programming
See All in Programming
色々なIaCツールを実際に触って比較してみる
iriikeita
0
330
初めてDefinitelyTypedにPRを出した話
syumai
0
410
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
130
Amazon Qを使ってIaCを触ろう!
maruto
0
410
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
100
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
1k
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
1
180
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
470
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
250
as(型アサーション)を書く前にできること
marokanatani
10
2.7k
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
Featured
See All Featured
Navigating Team Friction
lara
183
14k
Thoughts on Productivity
jonyablonski
67
4.3k
Fireside Chat
paigeccino
34
3k
The Invisible Side of Design
smashingmag
298
50k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Statistics for Hackers
jakevdp
796
220k
Why Our Code Smells
bkeepers
PRO
334
57k
Scaling GitHub
holman
458
140k
It's Worth the Effort
3n
183
27k
Music & Morning Musume
bryan
46
6.2k
Building Adaptive Systems
keathley
38
2.3k
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
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を使おう!