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
BFFとmicroservicesアーキテクチャ
Search
hirac
May 19, 2022
Technology
1
770
BFFとmicroservicesアーキテクチャ
hirac
May 19, 2022
Tweet
Share
More Decks by hirac
See All by hirac
クラウドサービスベンダーのセキュリティチェックシート対応
hirac1220
0
300
スタートアップのエンジニア採用広報.pdf
hirac1220
1
330
CTOとしてプロダクト価値を上げるために実施したこと
hirac1220
1
260
フルリモート環境でのスクラム開発
hirac1220
1
550
開発リーダーとしてやったことリスト
hirac1220
0
1.6k
Other Decks in Technology
See All in Technology
re:Invent2025 セッションレポ ~Spec-driven development with Kiro~
nrinetcom
PRO
2
170
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
3
1.2k
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
150
Introduction to Bill One Development Engineer
sansan33
PRO
0
340
Java 25に至る道
skrb
3
210
Oracle Cloud Infrastructure:2025年12月度サービス・アップデート
oracle4engineer
PRO
0
280
ソフトとハード両方いけるデータ人材の育て方
waiwai2111
0
150
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
スクラムを一度諦めたチームにアジャイルコーチが入ってどう変化したか / A Team's Second Try at Scrum with an Agile Coach
kaonavi
0
220
純粋なイミュータブルモデルを設計してからイベントソーシングと組み合わせるDeciderの実践方法の紹介 /Introducing Decider Pattern with Event Sourcing
tomohisa
1
980
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
440
Data Hubグループ 紹介資料
sansan33
PRO
0
2.6k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
68
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
75
30 Presentation Tips
portentint
PRO
1
190
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
140
Information Architects: The Missing Link in Design Systems
soysaucechin
0
740
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
550
Claude Code のすすめ
schroneko
67
210k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
Everyday Curiosity
cassininazir
0
120
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!