Islands in the byte stream

Technical notes by a software engineer

apollo-boost はサンプルコード専用と思ったほうがよい

TypeScript用のGraphQL clientであるところの Apollo ですが、これのGet Startedなどのドキュメントでは apollo-boost というパッケージを使っています。

www.apollographql.com

しかし、 apollo-boost はサンプルコードをシンプルにするための apollo-client などのラッパーと考えたほうがよく、プロダクションコードでは apollo-boost ではなく apollo-client および関連モジュールを直接使うほうがいいです。

以下理由:

  • apollo-boost は "zero-config" な apollo-client のラッパーだが、カスタマイズ製に乏しい
    • カスタマイズ不要なときに apollo-boost を使い、カスタマイズが必要になったら apollo-client を使え、という位置づけのよう
    • apollo-boost から apollo-client への移行ガイドもある:
    • Apollo Boost migration | Apollo Client
    • Apollo Boost is a great way to get started with Apollo Client quickly, but there are some advanced features it doesn’t support out of the box.

  • 特に apollo-client の強力な機能である "link" (Rack middleware のようなもの) をカスタマイズできないので、バッチリクエストや GraphQL subscriptions を利用する方法がない
  • エラーハンドリングも細かく制御したいときは apollo-client を生で使うほうがよい
  • 公式ドキュメントで import ApolloClient from "apollo-boost"import { ApolloClient } from "apollo-client" の2パターンがあるが、この2つの ApolloClient は(継承関係にあるものの)コンストラクタのオプションが全く違うので別物と考えたほうがよく、非常に混乱する

特に、 apollo を使うとすぐ batch request をしたくなるでしょうから、プロダクションコードでは最初から apollo-boost を使わないで apollo-client を使うほうが移行する手間が省けるというものです。