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
Kotlin製のWebアプリケーションをRustでリプレイス_220428
Search
[email protected]
April 28, 2022
Technology
0
1k
Kotlin製のWebアプリケーションをRustでリプレイス_220428
[email protected]
April 28, 2022
Tweet
Share
More Decks by
[email protected]
See All by
[email protected]
事業状況で変化する最適解。進化し続ける開発組織とアーキテクチャ
caddi_eng
1
15k
キャディでのApache Iceberg, Trino採用事例 -Apache Iceberg and Trino Usecase in CADDi--
caddi_eng
0
530
製造業の会計システムをDDDで開発した話
caddi_eng
3
2.1k
【CADDI VIETNAM】Company Deck for Engineers
caddi_eng
0
1.8k
CADDi Company Deck_Global.pdf
caddi_eng
1
670
[ English ] Company Overview for Engineers
caddi_eng
1
11k
エンジニア向け会社紹介資料
caddi_eng
18
640k
キャディ株式会社 会社紹介・採用説明資料
caddi_eng
12
1.3M
機械学習チームのモノレポ移行
caddi_eng
0
720
Other Decks in Technology
See All in Technology
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
260
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
120
OpenShiftでllm-dを動かそう!
jpishikawa
0
130
Agile Leadership Summit Keynote 2026
m_seki
1
650
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
230
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
180
Tebiki Engineering Team Deck
tebiki
0
24k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
970
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.5k
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.3k
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
320
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
160
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Agile that works and the tools we love
rasmusluckow
331
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
A Soul's Torment
seathinner
5
2.3k
Accessibility Awareness
sabderemane
0
53
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
56
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
We Are The Robots
honzajavorek
0
160
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
Transcript
A B O U T Kotlin製の業務Webアプリケーションを Rustでリプレイス
Takumi Karibe 2 • 2021/09 入社 • Backend Engineer @CADDi
• 受発注システム/パートナー連携システムのTL • 今まではiOSアプリ作ったり経路探索エンジン作ったり ブロックチェーン関連のサービス作ったり • 明日はひつまぶしを食べる
3 受発注管理プロダクト(Klein) サプライチェーンの 可視化 発注先パートナーの選定 ※ リプレイス前の画面です
4 製造パートナー連携プロダクト(SPP) キャディから受注済の案件一覧 キャディからの見積依頼を一括処理
5 構成 SPP-API Kubernetes Klein Kubernetes PostgreSQL Cloud SQL
6 構成 SPP-API Kubernetes Klein Kubernetes PostgreSQL Cloud SQL 今回はここの話
なぜリプレイスするのか? 7 • 組織的問題 ◦ チーム内に初期設計者やKotlinに慣れた人いない ◦ 新規の機能開発や運用の効率が悪い • 技術的負債
◦ ステータスを重複して管理しているため分散トランザクション を行っており、バグの温床となっている ◦ 新Kleinではドメインモデルが変更されるため、既存モデルと同 居させるとバグが埋め込みやすいコードになってしまう • タイミング ◦ Kleinのリプレイスのために工数を確保している今しかタイミン グがないだろうと考えた
リプレイスの要件 8 • 納期遵守 ◦ Kleinのリプレイスが本目的なので、その計画を破綻させてはい けない • 既存機能を変更しない ◦
UIはリプレイスしないため、バックエンドが変更されても既存 の機能が使えるようにする必要がある • Kleinのリプレイスと同時並行して開発 ◦ 納期はKleinのリプレイスと同じであるため、同時並行で開発す る必要がある
9 現在の構成(リプレイス中) SPP-API Kubernetes 新Klein Kubernetes PostgreSQL Cloud SQL 新SPP-API
Kubernetes Klein Kubernetes
10 今後の構成(リプレイス後) SPP-API Kubernetes 新Klein Kubernetes PostgreSQL Cloud SQL 新SPP-API
Kubernetes Klein Kubernetes
KotlinからRustへの変更 11 • 社内での開発実績や慣れている人が多く知見がある • コンパイラが堅牢なので短納期な状況では品質担保の手 間が減って嬉しい • リリース後に体制変更があっても新Kleinと新SPP-APIで 言語は変わらないため新規参入者の学習コストは総体的
に減る • リプレイス後の機能開発や運用効率を高めたい ◦ 負債の返済ではなく複利の効く資産形成として攻めのリプレイス
利用ライブラリ 12 • GraphQL ◦ https://github.com/async-graphql/async-graphql • WAF ◦ https://github.com/tokio-rs/axum
• ORM ◦ https://github.com/diesel-rs/diesel • gRPC ◦ https://github.com/hyperium/tonic
ベストプラクティスに倣いつつシンプルな設計 13 • Clean Architectureの採用
ベストプラクティスに倣いつつシンプルな設計 14 • 外部接続を抽象化した存在をおかない ◦ UseCaseはinfra層への個別の接続を明示的に呼び出す ◦ データの所在がわかりやすくなるため、実装を追いやすく、レ ビューコストも下がる ◦
Traitでinfra接続への依存関係を表現しているため、意図しない 接続は呼び出せない
設計・開発の考慮② 15 • データの置き場所を整理 ◦ 分散トランザクションを上手く行うのではなく、分散トランザク ションを避けるように設計 • 可逆的な変更の意思決定は後回しにする ◦
不可逆な変更や他の選択肢に選び直すコストが高い場合を除い て、意思決定の速度を優先 ◦ Unknown * Unknown にならないように他の選択肢のpros/consの整 理と選択を変える場合の手段は考えておく
設計・開発の考慮③ 16 • 依存先の開発状況を意識しない開発 ◦ 新Kleinも現在進行形で開発が進んでいる ◦ infra層で仕様を隠蔽する ▪ 新Kleinのドメインモデルとの変換を集約
◦ 手戻りを許容し仮でも良いので実装を進める • PRで議論ではなく、細かい同期的なレビューで開発着手 からマージまでのリードタイムを短縮 ◦ どれだけ書いてもmainブランチにマージされなければ価値はゼロ ◦ より良い書き方があったとしてもマージを優先 ▪ コメントルールを整備して後で取り組めるように
まとめ 17 • 開発効率向上のためにKotlinからRustに • 同時並行のリプレイスは意思決定のスピードや手戻りと の付き合い方が大事そう