2022年6月16日木曜日

GraphQLがあまり普及しない理由はなんですか?

https://jp.quora.com/GraphQL%E3%81%8C%E3%81%82%E3%81%BE%E3%82%8A%E6%99%AE%E5%8F%8A%E3%81%97%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1%E3%81%AF%E3%81%AA%E3%82%93%E3%81%A7%E3%81%99%E3%81%8B

 · 
フォロー

えっと...ポリポリ...

単に面倒だからかな...

開発スピード遅くなるよ。みたいな。

いや、まあ、お使いの方にケチをつけたいわけじゃないですよ。

フロント側に期待する結果を送るためにいろいろサーバー側で準備しておくより、フロント側が相談したらすぐにサーバー側(API側)で、対応してくれた方がらくというかなんというか、

あと、TypeScriptの型とちょっと相性が悪いというかいろいろ苦しいような気がしました。ケースバイケースで、よりよい解決策があるのかもしれませんが、見つけられず、ひどい型の合算を経験したりとかですかね...

GraphQL Apoloから返される自動生成される型がぐにゃぐにゃしまくっているので、読み取るのが非常に大変かつ型パズルを解かなきゃならなくなる羽目になり結局解けなくて妥協の産物になってしまったりしたりしなかったり。

GraphQL使わずに、サーバー側が丁寧にRESTAPIを送ってくれて、フロントが要望したら、すぐにサーバーのRESTを直してくれる、みたいな連携がチームとして取れるプロジェクトなら、別にGraphQLのメリットはないかなと。

そんな気がしてます。

学習コストも相当あるので、ま、まあ、どうかな。

自分がプロジェクトの神のような存在でなんでも決められる立場だったりしたら...私は採用しないかな、みたいな。

あ、でも、GraphQL使っているプロジェクトは難易度高そ

… (もっと読む)
石塚 正浩さんのプロフィール写真

 · 
フォロー

結論から言うと、組織の問題です。

日本でGraphQLを採用しているのは例えばYahoo!とかメルカリとかです。

Next.js + NestJS + GraphQLで変化に追従するフロントエンドへ 〜 ショッピングクーポンの事例紹介
モダンなフロントエンド技術に刷新する中で、どのような苦悩があり、どのような工夫をしたのかをご紹介します!
メルカリ Shops での NestJS を使った GraphQL Server の実装
ソウゾウの Software Engineer をやっています、@mookjp です。8/10 の記事「メルカリShopsの技術スタックと、その選定理由」では、メルカリ Shops のアーキテクチャについて、その全体像を紹介しました。この記

両方ともバックエンドが既にマイクロサービスで構築されていて、BFFとしてGraphQLを採用しています。REST APIだけでクライアント側でなんとかするのが辛いパターンですね。

一方で、GraphQLは次のような点を導入時に考えておく必要があります。特にN+1問題とクエリのコストは重大です。

GraphQLを導入する時に考えておいたほうが良いこと
はじめにこんにちは、ソウゾウSoftware Engineerの@sue71です。連載:メルカリShops 開発の裏側 Vol.2の13日目を担当させていただきます。以前メルカリメルカリShopsの技術スタックと、その選定理由でBFFの実装

そしてスタートアップでフロントエンドエンジニアとバックエンドエンジニアが同じチームなら、REST APIでもさほど困りません。そこまでコミュニケーションコストが高くないので。

まとめるとこんな感じです。

  • マイクロサービスをまとめるためのBFFとしては非常に有効
  • GraphQL特有の問題がある(N+1、クエリのコスト)
  • フロント、バックが同じチームならREST APIで十分

例えばTechnology RadarでもまだAssess(評価段階)です。

GraphQL | Technology Radar | Thoughtworks
We've seen many successful GraphQL implementations on our projects. We've seen some interesting patterns of use too, including GraphQL for server-side resource aggregation. That said, [...]

冒頭に書いたYahoo!やメルカリのような、バックエンドを集約するパターンはTrial(やる価値あり)になってます。

GraphQL for server-side resource aggregation | Technology Radar | Thoughtworks
We see more and more tools such as Apollo Federation that can aggregate multiple GraphQL endpoints into a single graph. However, we caution against misusing [...]

しかしそもそもマイクロサービスを採用している企業が日本では少なく、一部のメガベンチャーに限られているようなんですよね。

だからGraphQLを採用を採用するモチベーションがない、これが直接の原因です。

なので、GraphQLを普及するためには、マイクロサービスを普及させる必要があります。もちろん最初からマイクロサービスを導入するのはアンチパターンですが、エンジニアを数十人くらい抱える企業ならできててもおかしくないと思います。

なぜなら、1チームの適正人数は6±3人程度で、エンジニアが数十人いる時点で複数チームに分かれている必要があり、複数チームがモノリシックでやっていくのは困難だからです。

こうして問題は「中程度の企業がマイクロサービスを採用できないのはなぜか」に帰着されますが、これはエンジニアの問題よりも、組織の問題が大きいと思います。

その理由がこの動画で述べられています。

ところがですね、メリット以外に、反対に悪いこともあります。非同期化するとどうしても不整合が起きるんですね。

これ僕の友達が実際にFacebookで書いてましたけど、商品がお届け完了になっているのに商品が手元にない、こういう不整合がでるわけですね。

このときにAmazonはどうするかというと、300円のクーポンをくれます。

これは非常に大事なことです。

サービス間を疎結合にするためには不整合を受け入れます。

受け入れたものはどうしますか。運用でカバーしましょうというのが、Amazonですらそうなんですね。

技術で解決してないですよね。疎結合化を受け入れるということはこういうことです。

今までやっていた、クオリティ、品質、整合性を保つための考え方を変えない限り、分割はできない。

データ分離もそうですし、メッセージ連携も同じですが、非同期化するということは不整合を受け入れるということです。

これがどうしてもダメなのであれば、マイクロサービスを諦めてください。できないです。

マイクロサービス化するためには不整合を受け入れる(結果整合性)必要があり、そのためには「運用でカバー」する必要があります。すると、エンジニアだけではどうしようもありません。運用やビジネスを含めた、組織を巻き込む必要があります。

しかしその結果として「今後の成長のためにチームを分割して機動的にする必要がある。だからマイクロサービスにしよう」と言える組織はほとんどありません。そしてだんだん鈍重になり、成長が止まっていきます。だから組織の問題なんですよね。

まあ、マイクロサービスはあくまで手段で、モノリスのままで保守性を高める方法もあります。ですが、ほとんどの組織はそれ以前に、技術的負債が溜まっていて、マイクロサービスどころじゃないと思いますが。

エンジニア歴17年の俺が、事業系の開発タスクをバンバン投げてくる非エンジニアに、保守の必要性を死ぬほど分かりやすく説明する。|みやたけ|note
[Ateam Lifestyle x cyma Advent Calendar 2018]の5日目は、株式会社エイチームライフスタイルの@gonjyu121が担当します。 はじめに 最近のWEBサービス運営チームというと、事業運営や企画営業のチームと、エンジニアチームが一緒になって働く事が多いですよね。 そんな時、多くのエンジニアが、 「品質保持やリファクタリング、改善系のissue(タスク)の優先度がなかなか上がらず、着手できない・・・・・・」 といった悩みを抱えがちです。これなんですが、非エンジニアの皆さんからすると、 「エンジニアがすごいのは分かるんだけど、何をやっ

0 コメント:

コメントを投稿