フロントエンドとバックエンド間の技術選定
興味関心と現職での立場を考慮しても、バックエンドはGoで実装する。フロントエンドはReactエコシステムに乗っておくのが無難だろう。おそらく今後少なくとも数年は、React主導でトレンドが作られていくと思う。SvelteやHTMXも良いとは思うが、Reactエコシステムから離れるリスクの方が高い。
2024年時点ではReactフレームワークを使わないと決めたが、そうするとバックエンドとフロントエンドの通信はどうするか。
- REST API
- GraphQL
- gRPC + BFF
REST APIはもう十分な経験があるので、あえて選ぶ必要はないと思う。OpenAPIの定義からコードを生成する辺りは知識が不足しているけれど、それのために選びたいモチベーションは無い。
GraphQLはReact Server Componentsの未来が来たとき存続するのか不透明になった。とはいえ今でも有力候補なので、選ぶとしたらGraphQLクライアントライブラリはUrqlを使う。
gRPC + BFFは変則的だけど、いくつかメリットはあると思う。
- API仕様を機械判読可能な形で公開できる
- エンドポイント毎にAPI出力を扱いやすく加工できる
- gRPC側は画面ごとに関数を提供しなくてもいい
- Server Componentsが必須な未来が来ても適用できる
ただし、Cloudflareに置くことが良いのかは分からない。BFF(Backends for Frontends)の目的と役割をふまえると適切だと思うが、React Server Componentsで解決できることのうち「コンポーネントは自身の描画に必要な情報は自分自身で取得することが可能」な根拠は「距離が近くて応答も早い」という特性があるからなので、GCPとCloudflare間に距離があるのは許されるのか。
Reactチームが見てる世界、Reactユーザーが見てる世界によると、Meta社でもBFFが導入されているらしい。上で書いたgRPCとは異なるがBFFとバックエンドはRPC呼び出しなので、意外と近しいものがあった。React Server Component is perfect for Backends-for-Frontendsという言説もある。