【ばっくえんどふぉーふろんとえんど】

Backend for Frontend(BFF) とは?

💡 「お客様ごとに専属のコンシェルジュを」——フロントエンド専用の気が利くバックエンド
📌 このページのポイント
Backend for Frontend(BFF)パターン Web ブラウザ iOS アプリ Android アプリ Web用 BFF リッチなデータ返却 iOS用 BFF 軽量レスポンス Android用 BFF 軽量レスポンス BFFなしの場合 全フロントが 同じAPIを使用 → 不要なデータも 取得してしまう ユーザーAPI 注文API 商品API バックエンドマイクロサービス群
BFFパターンによるフロントエンド別API最適化のイメージ
ひよこ ひよこ

なんでフロントエンドごとにバックエンドを分けるの?1つじゃダメなの?

ペンギン先生 ペンギン先生

スマホとPCでは画面サイズも通信環境も違うよね。1つのAPIで全部まかなおうとすると、スマホに不要なデータまで返してしまったり、PC向けに情報が足りなかったりするんだ

ひよこ ひよこ

じゃあBFFはAPIゲートウェイとは違うの?

ペンギン先生 ペンギン先生

APIゲートウェイは「共通の入口」で、認証やレート制限を担当するよ。BFFはその先にあって、フロントエンドに特化したデータ加工・集約をする層。役割が違うんだね

ひよこ ひよこ

BFFが増えすぎると管理が大変にならない?

ペンギン先生 ペンギン先生

するどいね。Web用・iOS用・Android用と3つ作ると、共通ロジックが重複しがち。そこはShared Libraryで共通化するか、GraphQL Federationで統合するアプローチもあるよ

ひよこ ひよこ

どんなプロジェクトで採用すべき?

ペンギン先生 ペンギン先生

複数のフロントエンドがあって、それぞれのUXが大きく異なる場合に効果的だよ。逆にWebだけのシンプルなサービスなら、わざわざBFFを入れる必要はないね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「BFF」って出てきたら「フロントエンド専用の中間バックエンド」と思えればだいたいOK!
📖 おまけ:英語の意味
「Backend for Frontend」 = フロントエンドのためのバックエンド
💬 Sam Newman氏が2015年に提唱したパターン。「フロントエンドのために存在するバックエンド」という、そのまんまの名前だよ
← 用語集にもどる