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
430
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)開発チーム
2025.10.28_CodexとClaude Codeの比較検討 社内座談会
pharma_x_tech
1
16
LLMのアウトプットの評価と改善 〜DSPyによるプロンプト最適化入門によせて〜
pharma_x_tech
5
710
2025.09.02_AIコーディングを利用した開発自動化を目指しての座談会
pharma_x_tech
5
210
AIコーディングを前提にした開発プロセス再設計〜開発生産性向上に向けた試行錯誤〜
pharma_x_tech
4
290
AIエージェントの評価・改善サイクル
pharma_x_tech
2
430
MCP & Computer Useをフル活用した社内効率化事例〜現在地と将来の展望
pharma_x_tech
1
340
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
2.2k
Roo CodeとClaude Code比較してみた
pharma_x_tech
5
3.2k
Roo Codeにすべてを委ねるためのルール運用
pharma_x_tech
1
1k
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.3k
Six Lessons from altMBA
skipperchong
29
4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Designing Experiences People Love
moore
142
24k
GraphQLとの向き合い方2022年版
quramy
49
14k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
940
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
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の依存関係逆転の原則実 装例