Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】[技術選定談義]BFFパターンに、Hono×GraphQLを採用した話

2025年09月30日に「Qiita」が公開したITニュース「[技術選定談義]BFFパターンに、Hono×GraphQLを採用した話」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

株式会社Schooのエンジニアが、Backend For Frontend (BFF) パターンへの技術選定について解説する。軽量なウェブフレームワークHonoとAPIクエリ言語GraphQLを採用した背景や利点、具体的な実装について紹介している。

ITニュース解説

システム開発では、ユーザーが直接操作する画面部分(フロントエンド)と、データの管理や複雑な処理を行う裏側の部分(バックエンド)が連携して動作する。現代のシステムは大規模化・複雑化が進み、バックエンドがさらに細かい複数の機能単位(マイクロサービス)に分割されることが一般的だ。その結果、フロントエンドは一つの画面を表示するために、複数の異なるバックエンドの機能からデータを集める必要が生じることがある。このような状況は、フロントエンド側の開発を複雑にし、開発効率を低下させる要因となる。

この課題を解決するための一つの効果的な方法が、「BFF(Backend for Frontend)パターン」の導入である。BFFは、フロントエンドとバックエンドの間に専用のAPI層を設けるという考え方だ。従来のやり方では、フロントエンドが直接多くのバックエンドAPIとやり取りしていたが、BFFを導入することで、フロントエンドはBFFだけと通信すればよい。BFFは、フロントエンドが必要とするデータの形式や、どのような処理が必要かを理解し、裏側にある複数のバックエンドAPIから必要な情報を集め、それをフロントエンドが使いやすい形に加工して提供する役割を担う。これにより、フロントエンド側のロジックは大幅にシンプルになり、開発者はユーザーインターフェースの構築に集中できるようになる。

ある開発チームでは、既存のシステム構成において、フロントエンドが複数のバックエンドAPIを直接呼び出すことでいくつかの問題に直面していた。例えば、一つの画面を表示するために、何度も異なるAPIを呼び出す必要があり、これを「N+1問題」と呼ぶ。また、APIから必要以上のデータを受け取ってしまうことで無駄なネットワーク通信が発生したり、APIを呼び出す際に認証情報を毎回設定する手間など、フロントエンド開発者の負担が大きい「開発体験の悪さ」も課題だった。さらに、バックエンドの内部的なデータ構造の知識がフロントエンドにまで影響を与え、フロントエンドとバックエンドが密接に結びついてしまい、一方の変更がもう一方に大きな影響を及ぼすという問題も抱えていた。

これらの課題を解決し、開発の効率化とシステム全体のパフォーマンス向上を目指すために、BFFの導入が検討された。そして、このBFF層を構築する具体的な技術として、「Hono」と「GraphQL」が採用されることになった。

Honoは、ウェブアプリケーションを開発するための、非常に軽量で高速なフレームワークである。主にJavaScriptやTypeScriptというプログラミング言語で記述され、Deno、Bun、Cloudflare Workersといった多様なJavaScript実行環境で動作するという特徴を持つ。特に、ウェブの応答速度向上に貢献する「エッジコンピューティング」環境での動作に優れており、将来的なシステムの拡張性やパフォーマンス向上の選択肢が広がる点も高く評価された。Honoが選ばれた主な理由は、開発体験の良さ、すなわち開発者がコードを書きやすい環境が整っている点だ。TypeScriptとの相性が非常に良く、シンプルで分かりやすいAPI設計のため、比較的短い学習時間で利用できる。さらに、Honoは高いパフォーマンスを発揮し、プログラム自体のサイズも小さいという軽量性も大きな魅力だった。これらの特性が、BFFという中間層に求められる素早い応答性と開発のしやすさに非常に合致すると判断された。

次に、GraphQLは、APIのための「クエリ言語」という新しい概念を持つ。従来のAPI(一般的にはREST APIと呼ばれる)では、バックエンド側が事前に定義した固定のデータ形式で情報が提供されることが多く、クライアント側が必要とするデータが不足したり、反対に不要なデータまで受け取ってしまったりする問題があった。これに対し、GraphQLでは、クライアント側が「どのようなデータが欲しいか」「どの情報だけが必要か」を具体的なクエリ(問い合わせ)として指定してリクエストを送ることができる。これにより、クライアントは必要最小限のデータだけを効率的に取得することが可能となる。さらに、一つのリクエストで複数の種類のデータをまとめて取得できるため、前述のN+1問題のように、複数のAPIを個別に呼び出す手間を省くことができる。

GraphQLがBFFに採用された主な理由は、通信の効率化が非常に重要視されたためだ。クライアントが必要なデータだけを要求できることで、ネットワークを流れるデータ量が削減され、結果としてページの読み込み速度向上に貢献する。また、フロントエンド開発の効率化にも大きく寄与する。GraphQLが提供するスキーマ(APIが提供するデータの構造を定義したもの)を確認するだけで、どのようなデータが取得できるかが明確にわかるため、APIの仕様理解が容易になる。さらに、GraphQLの定義から自動的にTypeScriptの型定義ファイルを生成できる機能があるため、「型安全な開発」、つまりプログラミングの段階でデータ型の不整合によるエラーを未然に防ぎやすい開発が可能になる点も大きなメリットだ。バックエンドのデータ構造が変更された場合でも、フロントエンド側のGraphQLクエリを修正しない限り影響を受けにくいため、フロントエンドとバックエンドの疎結合化(互いの依存度を下げること)にも役立つ。

HonoとGraphQLを組み合わせたBFFは、次のように機能する。フロントエンドは、Honoで構築されたBFFに対して、GraphQLクエリを含むリクエストを送信する。Honoはこのクエリを受け取り、その内容に基づいて、裏側にある複数のバックエンドAPIに対して必要なデータを問い合わせる。バックエンドから集められたデータは、Hono上でGraphQLの定義に従って整形・結合され、最終的にフロントエンドが要求した通りの形式で返される。この一連の処理がBFF内で完結することで、フロントエンドはバックエンドの複雑な内部構造を意識することなく、シンプルにデータの取得と画面表示に集中できるようになる。

この技術選定によって、システム開発においては目に見える効果が期待される。フロントエンドのロジックがシンプルになることで、開発者はユーザーインターフェースの実装により集中できるようになり、結果として開発効率が向上する。型安全な開発手法によって、バグの発生を抑え、より品質の高いシステムを構築しやすくなる。そして、通信効率の改善は、システムの応答速度やユーザー体験の向上に直結する重要な要素である。HonoとGraphQLの組み合わせは、今日のウェブシステムが抱える複雑性の課題に対し、開発者の負担を軽減しつつ、ユーザーに快適な体験を提供する強力な選択肢となるだろう。これは、単なる技術的な選択にとどまらず、開発チーム全体の生産性を高め、システムが提供する価値を向上させるための戦略的な意思決定と言える。

関連コンテンツ

関連IT用語