Upgrade to Pro — share decks privately, control downloads, hide ads and more …

もし今からGraphQLを採用するなら

 もし今からGraphQLを採用するなら

KazukiHayase

January 31, 2025
Tweet

More Decks by KazukiHayase

Other Decks in Technology

Transcript

  1. 3 自己紹介 早瀬和輝(@KazukiHayase) • 2021年BuySell Technologies入社 • 開発2部 販売グループ EXSチーム

    • PjM / テックリード • Go / TypeScript / React / GraphQL • 酒 / ポケカ(ポケポケ) / アニメ / 映画 • 大学が金沢なので、富山にはよく来ていた
  2. プロダクト群「バイセルリユースプラットフォーム Cosmos」の開発が進行中 リユースに必要なすべての機能を提供する「リユースプラットフォーム Cosmos」の開発が進行中です。 Cosmosを活用して、バイセルグループ全体での業務効率改善やデータドリブン経営の深化を目指しています。 リユースプラットフォームCosmos 自社開発のリユース特化業務基幹システムでありサービス群の集合体 買取申込 買取・査定 在庫管理

    販売 多様なチャネルで収益最大化 CRM -顧客対応- 買取種別に応じた最適なシステム構築 Visit -訪問買取- Store -店舗買取- Promas -商材マスタ- Appraisal -専門査定- Stock -在庫管理- EXS -販売管理- Core -会員管理- Portal -データ利用- Pocket -データ基盤- 買取 専門チームによる真贋・査定と連携 査定 申込 効率的な顧客対応 在庫 在庫管理の最適・効率化 販売 データ 各事業プロセスにある データを一元管理 :基幹システム
  3. 29 周辺技術の振り返り マッチしたもの • gqlgen • GraphQL Code Generator •

    graphql-eslint マッチしなかったもの • Hasura • Apollo Client 採用した周辺技術に関して、マッチしたものとマッチしなかったものに分けて紹介
  4. 32 マッチしたもの - gqlgen • 当初の目的のスキーマファーストを実現できている ◦ 一番最初にスキーマ設計の認識を合わせることができる ◦ フロー効率が上がる

    • カスタムスカラーやカスタムディレクティブの追加も簡単 ◦ 検索した際の情報量も多い • 現状のユースケースの範囲では、特に大きな不満はない マッチした点
  5. 38 マッチしなかったもの - Hasura • データベースのスキーマから、GraphQL APIを自動で構築してくれるOSS • 外部のGraphQL APIを統合するRemote

    Schemaという機能もある Hasuraとは • APIの自動生成による開発速度の向上 • GUIで簡単に認可制御できる 採用理由
  6. 41 マッチしなかったもの - Hasura • Queryを定義するのに、テーブル構造の理解が必要 ◦ ピュアなフロントエンドエンジニアには難しい • 欲しい形式で取得できず、フロントエンドで整形処理が肥大化

    ◦ フロントエンドの実装コスト増 • テーブル設計がフロントエンド実装のブロッカーになる ◦ スキーマファーストではなくなり、GraphQLのメリットが薄れる テーブル構造がそのままGraphQLスキーマになる
  7. 42 マッチしなかったもの - Hasura • 発行されるSQLが複雑で、Queryに対応するSQLを変更することはできない ◦ 特にAggregation Queriesという、集計用のQueryが重い •

    Hasuraのみで解決が難しく、同期コンテナで実装する場面が増加 想定よりもHasuraの利用頻度が少なかった
  8. 43 • Queryの定義にテーブル構造の理解が必要 • フロントエンドでのロジックが肥大化しやすい • パフォーマンスチューニングの方法が限られる ◦ e.g. インデックス追加、Query変更、インフラのスペックアップ

    ◦ 上記で解決できない場合は、Remote Schema等の外部実装が必要 • 大規模になると上記の問題が発生したり、設定の管理が大変になる ◦ 小〜中規模のプロダクトやPoCにはおすすめできる Hasuraを採用する際の注意点 マッチしなかったもの - Hasura
  9. 48 マッチしなかったもの - Apollo Client • 他のGraphQLクライアントと比べて開発が遅い ◦ e.g. Suspense、useFragment

    • 暗黙的な挙動の把握が大変 機能が豊富な反面、それに伴う課題も発生した https://github.com/apollographql/apollo-client/issues/11151#issuecomment-1730186108
  10. 49 Apollo Clientを採用する際の注意点 • 多機能な状態管理ライブラリということを念頭におく ◦ 要件に対してtoo matchなケースは少なくない • 要件から必要な機能を逆算する

    ◦ Apollo Clientしか対応していない機能はそこまで多くない ◦ 最低限の機能しか使わないのであれば、他の軽量なライブラリで良い • 正規化されたキャッシュが必要かを考える ◦ 検索機能が重要な場合や、複数箇所からデータが更新される場合は扱いづらい マッチしなかったもの - Apollo Client