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
PharmaX(旧YOJO Technologies)開発チーム
October 18, 2023
0
400
Rustでレイヤ化アーキテクチャを実装してみた
こちらのイベントのLT登壇資料です
https://yojo.connpass.com/event/296355/
PharmaX(旧YOJO Technologies)開発チーム
October 18, 2023
Tweet
Share
More Decks by PharmaX(旧YOJO Technologies)開発チーム
See All by PharmaX(旧YOJO Technologies)開発チーム
AIエージェントの評価・改善サイクル
pharma_x_tech
1
33
MCP & Computer Useをフル活用した社内効率化事例〜現在地と将来の展望
pharma_x_tech
1
190
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
1.7k
Roo CodeとClaude Code比較してみた
pharma_x_tech
3
910
Roo Codeにすべてを委ねるためのルール運用
pharma_x_tech
1
520
Cline&CursorによるAIコーディング徹底活用―Live Vibe Coding付き
pharma_x_tech
3
1.8k
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
1.2k
AIコーディングの最前線 〜活用のコツと課題〜
pharma_x_tech
4
3.4k
AIエージェント開発のノウハウと課題
pharma_x_tech
10
7.5k
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Embracing the Ebb and Flow
colly
86
4.7k
The Invisible Side of Design
smashingmag
301
51k
We Have a Design System, Now What?
morganepeng
53
7.7k
Statistics for Hackers
jakevdp
799
220k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Transcript
Rustでレイヤ化アーキテク チャを実装してみた 2023.10.18
(C)PharmaX Inc. 2023 All Rights Reserve 2 自己紹介 尾崎皓一 PharmaX
薬局DX事業部 エンジニアリーダ 4歳&2歳半(年子)の男子のパパ Twitter:@FooOzaki
3 (C)PharmaX Inc. 2023 All Rights Reserve 実装の全体概要
(C)PharmaX Inc. 2023 All Rights Reserve 4 レイヤ化アーキテクチャについて ・今回はヘキサゴナルアーキテクチャ で実装してみました
(C)PharmaX Inc. 2023 All Rights Reserve 5 4層のヘキサゴナルアーキテクチャで実装してみた
6 (C)PharmaX Inc. 2023 All Rights Reserve Rustでの レイヤ化アーキテクチャ実装例
(C)PharmaX Inc. 2023 All Rights Reserve 7 Cargoワークスペース を用いたレイヤー分離 ・Cargoワークスペースを利用
・下位レイヤーから上位レイヤーの呼び 出しを禁止できる ・ApplicationからPresentationを呼び 出すことはできない
(C)PharmaX Inc. 2023 All Rights Reserve 8 アプリケーションレイヤー内での DI(依存性の注入)
(C)PharmaX Inc. 2023 All Rights Reserve 9 DI(依存性の注入) ・シンプルなコンストラクタインジェクショ ンパターンを採用
・外部からrepositoryを受け取り、 usecaseに渡すことで依存性を注入して います ※derive-newを使用しています
(C)PharmaX Inc. 2023 All Rights Reserve 10 DI(依存性の注入) ・moduleという構造体を用意し、DIコン テナのようなことを実現
・moduleはコンストラクタインジェクショ ンをシンプルに記述するだけ ・小さなアプリケーションであればこのよ うな形で定義してもそこまでストレスはな かった
(C)PharmaX Inc. 2023 All Rights Reserve 11 アプリケーションレイヤーとDB Adapterでの DIP(依存性逆転)
(C)PharmaX Inc. 2023 All Rights Reserve 12 DIP(依存関係逆転の原則)実践例 ・Domain(アプリケーションレイヤー)と Repository(データベースへの
Adapter)に対してDIPを適用 ・アプリケーションレイヤーのDomainか らはRepositoryのインターフェースのみ 定義 ・実装はAdapterに任せる
(C)PharmaX Inc. 2023 All Rights Reserve 13 DIP(依存関係逆転の原則)実践例 ・実装は、Adapterレイヤーに ・DIPにより、データソースの変更が行わ
れた際にアプリケーションレイヤーへ影 響が出ない実装に
(C)PharmaX Inc. 2023 All Rights Reserve 14 DIP(依存関係逆転の原則)実践例 ・Applicationレイヤーからの呼び出しも Domainレイヤーに限定が可能に
・UseCaseはDomainのインターフェー スのみ知っていれば良いため、Adapter の実装影響を受けない形に
15 (C)PharmaX Inc. 2023 All Rights Reserve まとめ
(C)PharmaX Inc. 2023 All Rights Reserve 16 まとめ レイヤー化アーキテクチャをRustで実践した例を紹介しました •
Cargoワークスペース を利用してレイヤーの制約を表現 • DIの実践例を紹介 ◦ DIコンテナに相当するものを構造体で定義 • DIPの実践例を紹介 ◦ アプリケーションレイヤーとAdapterの依存関係逆転の原則実 装例