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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hirocy
September 26, 2024
Programming
0
1.8k
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
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
3.1k
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
240
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
470
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
7
3.4k
AI 開発合宿を通して得た学び
niftycorp
PRO
0
180
RailsのValidatesをSwift Macrosで再現してみた
hokuron
0
140
How to stabilize UI tests using XCTest
akkeylab
0
150
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
220
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
180
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
700
ファインチューニングせずメインコンペを解く方法
pokutuna
0
210
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
91
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Rails Girls Zürich Keynote
gr2m
96
14k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
300
Between Models and Reality
mayunak
2
240
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
100
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Side Projects
sachag
455
43k
Prompt Engineering for Job Search
mfonobong
0
240
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Into the Great Unknown - MozCon
thekraken
40
2.3k
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も是非!