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
320
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
20
15k
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
1
1.1k
LLMアプリケーションの Fine-tunningと蒸留を活用した改善
pharma_x_tech
7
2k
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
5
760
EMとして 自分の弱さと向きあい 人に背中を任せられるようになった話
pharma_x_tech
4
670
LLMアプリケーションの継続的改善のためのFine-tuningの活用
pharma_x_tech
0
76
LLMアプリケーションの評価と継続的改善
pharma_x_tech
3
450
開発チームから始める 「学習する組織」に 成長するための取り組み
pharma_x_tech
3
830
LLMマルチエージェントの アプリケーション設計のコツと未来
pharma_x_tech
1
650
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Making Projects Easy
brettharned
116
6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Raft: Consensus for Rubyists
vanstee
137
6.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
970
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の依存関係逆転の原則実 装例