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
connect-goとsqlboilerで構築するクリーンアーキテクチャ
Search
hirocy
September 26, 2024
Programming
0
690
connect-goとsqlboilerで構築するクリーンアーキテクチャ
「PIXIV DEV MEETUP 2024」LT発表資料
https://conference.pixiv.co.jp/2024/dev-meetup
hirocy
September 26, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
15
2.3k
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
6
1.9k
Jakarta EE meets AI
ivargrimstad
0
500
Remix on Hono on Cloudflare Workers
yusukebe
1
340
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
110
[KR] Open-Source Ecosystems
skydoves
0
100
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
3
1.3k
cmp.Or に感動した
otakakot
3
300
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
360
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
130
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
140
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
140
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Visualization
eitanlees
145
15k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Scaling GitHub
holman
458
140k
How GitHub (no longer) Works
holman
310
140k
Navigating Team Friction
lara
183
14k
Statistics for Hackers
jakevdp
796
220k
Transcript
connect-goとsqlboilerで構築する クリーンアーキテクチャ hirocy
{広告なんでも, pixiv Ads}チーム エンジニア 💼 23新卒/広告開発 ❤ Go言語/VTuber https://x.com/hir0cy hirocy
話すこと • クリーンアーキテクチャとは • connect-go・sqlboilerとは • 広告管理サーバーを設計した際の最終的なディレクトリ 構成の紹介 • connect-go・sqlboilerをクリーンアーキテクチャに取
り込む上での工夫
話さないこと • connect-goとsqlboilerの使い方 • 基本的なクリーンアーキテクチャの実装 Ask the Speakerで僕と握手!
クリーンアーキテクチャ とは?
クリーンアーキテクチャ • Robert C. Martinが2012年に提唱したアーキテクチャ • 4層のレイヤー構造 ◦ Enterprise Business
Rules(domain層) ◦ Application Business Rules(usecase層) ◦ Interface Adapters(interface層) ◦ Frameworks & Drivers(infrastructure層)
クリーンアーキテクチャ • Robert C. Martinが2012年に提唱したアーキテクチャ • 4層のレイヤー構造 ◦ Enterprise Business
Rules(domain層) ◦ Application Business Rules(usecase層) ◦ Interface Adapters(interface層) ◦ Frameworks & Drivers(infrastructure層)
connect-go・sqlboiler とは?
connect-goの特徴 • The Go implementation of Connect: Protobuf RPC that
works. • ConnectというプロトコルのGo実装 • Protobufで記述された通信の定義に基づいてGoのパッ ケージを生成
sqlboilerの特徴 • Generate a Go ORM tailored to your database
schema. • 実際のDBスキーマからGoのORM(Object-Relational Mapping)をパッケージとして生成
どちらもパッケージ生成
クリーンアーキテクチャ のどこに生成?
〜広告管理サーバーの場合〜 最終的なディレクトリ構成
最終的なディレクトリ構成 "esakik/clean-architecture-python" (https://github.com/esakik/clean-architecture-python) より引用
最終的なディレクトリ構成
なぜinterface層に生成? • 例えばconnectについて... ◦ interface層 ▪ 通信の中身を見るレイヤー ◦ infrastructure層 ▪
通信について記述するレイヤー →ハンドラーやDBのクエリをinterface層で記述したい
connect-go・sqlboiler を扱う上での工夫
sqlboilerを扱う上での工夫 • sqlboilerは独自の型とdomainとの変換が必要 ◦ converterを実装して対応 • sqlboilerの実行には*sql.DBが必要 ◦ infrastructure層で接続を張った*sql.DBを返すよう に実装
connect-goを扱う上での工夫 • 決められたHandlerの型 で実装する必要がある • interactorから presenterを呼ぶ流れと 相性が悪い "esakik/clean-architecture-python" (https://github.com/esakik/clean-architecture-python)
より引用
connect-goを扱う上での工夫 controllerから presenterを呼び出す
connect-goを扱う上での工夫 controllerから presenterを呼び出す
connect-goを扱う上での工夫 "クリーンアーキテクチャの Presenter が分かりにくいのは MVC 2 じゃないから" (https://qiita.com/os1ma/items/c02af5b7783b58165c8d) より引用
まとめ • connect-goとsqlboilerはinterface層に生成 • presenterをcontrollerから呼び出すように改変 • 都度リファクタリングをすることでより良いアーキテク チャにしている • Goの互助会ブースやAsk
the Speakerも是非!