Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BFFとmicroservicesアーキテクチャ
Search
hirac
May 19, 2022
Technology
1
760
BFFとmicroservicesアーキテクチャ
hirac
May 19, 2022
Tweet
Share
More Decks by hirac
See All by hirac
クラウドサービスベンダーのセキュリティチェックシート対応
hirac1220
0
300
スタートアップのエンジニア採用広報.pdf
hirac1220
1
320
CTOとしてプロダクト価値を上げるために実施したこと
hirac1220
1
260
フルリモート環境でのスクラム開発
hirac1220
1
540
開発リーダーとしてやったことリスト
hirac1220
0
1.6k
Other Decks in Technology
See All in Technology
Product Engineer
resilire
0
170
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
0
180
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
110
プロダクトマネジメントの分業が生む「デリバリーの渋滞」を解消するTPMの越境
recruitengineers
PRO
3
690
【CEDEC+KYUSHU2025】学生・若手必見!テクニカルアーティスト 大全 ~仕事・スキル・キャリアパス、TAの「わからない」を徹底解剖~
cygames
PRO
0
140
eBPFとwaruiBPF
sat
PRO
4
2.5k
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
160
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
380
たかが特別な時間の終わり / It's Only the End of Special Time
watany
28
7.9k
モバイルゲーム開発におけるエージェント技術活用への試行錯誤 ~開発効率化へのアプローチの紹介と未来に向けた展望~
qualiarts
0
620
安いGPUレンタルサービスについて
aratako
2
2.6k
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Scaling GitHub
holman
464
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
We Have a Design System, Now What?
morganepeng
54
7.9k
Context Engineering - Making Every Token Count
addyosmani
9
490
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
GitHub's CSS Performance
jonrohan
1032
470k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Six Lessons from altMBA
skipperchong
29
4.1k
RailsConf 2023
tenderlove
30
1.3k
The Language of Interfaces
destraynor
162
25k
KATA
mclloyd
PRO
32
15k
Transcript
hirac CTO@sweeep sweeep Boxにおける BFFとmicroservicesアーキテクチャ
©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point
©hirac 3 自己紹介 { "日立": "CTスキャナの制御ソフト開発リーダー ", "フィリップス": "医療IT製品のテクサポ・技術リーダー ",
"シーメンス": "医療IT製品のPM", "オリンパス": "クラウドサービスの開発 PM", "CAPS": "電カル・AI問診など開発エンジニア ", "フリーランス": "SREやテックリード", "sweeep": "CTO" , "twitter": "@kimi_hira" }
本当に紙をやめたい人のための請求書管理ツール
©hirac 5
©hirac 6 新サービス:sweeep Box
©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point
©hirac 8 モノリスなアーキテクチャ Web mobile Backend DB Frontend Backend
©hirac 技術負債 ・モノリスなアーキテクチャを同時修正でコンフリ ・単一DBでデータの肥大化。マイグレーションなど大変 ・凝集度が低く修正箇所漏れ
©hirac Web mobile BFF ServiceX ServiceZ DB DB Frontend BFF
Backend DB BFF & microservicesアーキテクチャ ServiceY
©hirac microservicesで技術負債の解消 ・モノリスなアーキテクチャを同時修正でコンフリ → microservicesで少人数で各service修正 ・単一DBでデータの肥大化。マイグレーションなど大変 → microservices毎にDBをもつ ・凝集度が低く修正箇所漏れ → 適切なドメインで凝集度上げる
©hirac microservicesの課題 ・複数DBにおける情報の集約化 ex. :支払情報とユーザ情報など別DB ・複数リソースにおけるFEの工数増・肥大化 ex. :上記支払情報にあるuser_idとユーザ情報を紐付け → BFFで情報の集約と紐付けを実施し、GraphQLで
集約した情報を返す(複数同時更新のユースケースも)
©hirac 複数リソースにおける情報の集約化 type Payment { """ 支払情報 """ Id: Int!
# 支払管理ID userId: Int! # 担当者ID userName: String! # 担当者名 ... } GraphQL BFF ユーザ DB 支払 DB XXX DB
©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point
©hirac GraphQLメリット ・スキーマ駆動 & mockで並行開発 ・クエリライクで複数リクエストなしに情報を取得できる
©hirac スキーマ駆動 & mockで並行開発 ・スキーマから生成したプログラムなので齟齬がない ・MockによりClient/Server並行開発
©hirac GraphQLスキーマからClient/Server生成 $npm run graphql-codegen --config ./path/to/config.yml Client (TS) →
client/model生成 config.yml /schema: http://localhost:3000/graphql documents: ./src/**/*.graphql generates: ./src/types.ts: plugins: - typescript - typescript-operations $go run github.com/99designs/gqlgen generate BFF (Go) → resolver/model生成 gqlgen.yml schema: "*.graphql" exec: filename: generated.go model: filename: models_gen.go resolver: type: Resolver layout: follow-schema dir: . models: ...
©hirac BFFメリット ・各microservicesリソースをFEの必要な情報に束ねて返す ex.:BFFでUser情報 + 支払い情報を束ねる → FEで情報の操作が必要ない ・EndpointがBFF一箇所で済む →
ない場合はBE (microservices)を意識する必要がある
©hirac → ユーザ情報と支払情報を束ねる BFF無とBFF有の比較 (情報の集約) BFFなし BFFあり
©hirac BFF無とBFF有の比較 (Endpointの集約化) ユーザ DB 支払 DB XXX DB BFF
ユーザ DB 支払 DB XXX DB
©hirac GraphQLの課題 ・GraphQL ↔ Protobufの値の詰め替えが発生 Request:model.xxxInput → pb.xxxRequest Response:model.xxx ←
pb.xxxResponse ex. : GraphQLではintしかサポートしていない Protobufだとint32/64 → Protobuf -> GraphQL生成なども将来検討
©hirac GraphQL ↔ Protobufの値の詰め替え # ユーザ情報Input type UserInput { Id:
Int # ユーザID ... } # ユーザ情報 type User { Id: Int! # ユーザID ... } GraphQL Protobuf // ユーザ情報Request message GetUserRequest { int32 id = 1; // ユーザID ... } // ユーザ情報Response message GetUserResponse { int32 id = 1; // ユーザID ... } toPb int → int32 toGraphQL int ← int32
©hirac BFF課題 ・BFF開発分の工数増・メンテ増 ・ただmicroservices → BFF → FEと透過的に情報を渡して いるだけで冗長に感じることがある ・反面、BFFでいろいろやらせる(=やらせたくなる)と
Fatになるので気をつける → GraphQL Gateway (Apollo Federation)なども将来検討
©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point
©hirac まとめ:GraphQL & BFFメリット ・GraphQLはスキーマ駆動・情報の集約という点でメリット ・BFFはmicroservicesのEndpointの集約・仲介役でメリット → BFFを後から入れるのはインパクトが大きく (BFFの新規開発/Web &
Mobile側の工数/インフラ etc…) 最初に決断してよかった
©hirac 後からBFF新規/Endpoint入替/情報集約... ユーザ DB 支払 DB XXX DB BFF ユーザ
DB 支払 DB XXX DB
©hirac 今後の課題 ・BFF開発分の工数増で冗長に感じることも多いが、 無いとFEで頑張らないといけなかったりする 次のサービスではGraphQL Gatewayなど検討したい ・GraphQL & BFFは現在はWeb &
Mobile共通のため、同時 リリース。共通化やアジリティを下げない仕組みに課題 → アーキテクチャにも「銀の弾丸」はないので改善し続ける
©hirac 参考資料 ・sweeep Box - 書類保管AI ・sweeep Boxで使用している技術スタック ・スタートアップのCTOとして何を考え何を変えたか ・GraphQL
Code Generator ・gqlgen ・みんなで育てる GraphQL スキーマ, それを支える Protobuf / GraphQL and Protobuf
©hirac フロントエンドエンジニア募集してます! ・ご興味のある方は下記リンクよりご応募お待ちしております! sweeep株式会社の募集・採用・求人情報 - Wantedly
©hirac まずはカジュアルに話したい方 ・下記リンクよりお申し込みください! 請求書クラウドAIの開発について共有とCTOとゆるーく雑談 ・会社の雰囲気 sweeep株式会社の働き方とストーリー - Wantedly
©hirac Thank you!