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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for KazukiHayase KazukiHayase
January 31, 2025

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

Avatar for KazukiHayase

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