1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🚀 RESTで始めたけど、GraphQL導入を本気で悩んだ話【NestJS + Prisma構成】

Posted at

はじめに

最近、「GraphQL不要論」がよく流れてくる。
でもその一方で、「クライアント主導の柔軟なAPIが作れる」「型安全で保守しやすい」なんて声も多い。
自分は、NestJS + Prisma + PostgreSQL で社内向けシステムを作ってるけど、**この構成にGraphQLはアリなのか?**という点をガチで考えた。

この記事は「GraphQLをまだ導入してないけど、めちゃくちゃ悩んでる人の思考整理メモ」みたいなもの。
同じように考えてる人に届けば嬉しい。


✅ 現状構成:NestJS + Prisma + REST

まず今のバックエンド構成。

  • フレームワーク:NestJS
  • ORM:Prisma(PostgreSQL接続)
  • API:REST(@Controller + DTO + Service)
  • フロント:Next.js、社内用Reactアプリ

RESTで必要十分だし、開発スピードも出る。
DBのスキーマとPrismaが直結してるおかげで型安全も担保されてる。


🤔 なぜGraphQLを検討したのか?

理由は1つ:
「フロント側で指標を柔軟に作りたくなった」

RESTだと、例えばこんなケースが辛くなる。

  • /campaigns/:id/metrics のレスポンスを変えるたびにバックエンド修正が必要
  • 指標の数が増えてくるとエンドポイント設計が破綻し始める
  • 「impressionsとclicksだけ欲しい」ってときでも全部返すか、API分けるしかない

GraphQLならこうなる:

query {
  campaign(id: "abc123") {
    impressions
    clicks
  }
}

そしてフロント側で CTR = clicks / impressions を計算する。
「バックはデータを提供するだけ、どう使うかはクライアントに任せる」 という思想にピッタリ。


🔍 GraphQL不要論は気にするべき?

いろいろ読んだけど、だいたい以下の内容:

不要論の主張 実感としてどうか?
RESTで十分なケースが多い 確かに社内用途ならRESTで完結することが多い
GraphQLは学習コストが高い Nestならそれなりに自然に書けるが、スキーマ設計はやっぱり別モノ
Apolloが重い 一理ある。クライアントが多いなら利点大きいけど、単一UIなら過剰感もある
N+1地獄になる Prismaなら includeselect である程度制御可能だけど意識は必要

なので、「何に使うか」が重要。
いま自分のプロジェクトでいきなり全部GraphQLにするのは違うけど、外部向けAPIや将来的な展開を考えると、今から設計目線でGraphQLを意識しておくのはアリだと思ってる。


✅ 現時点の自分の結論

  • 社内向けの管理系UIやバッチ処理はRESTで十分
  • 指標APIやフロント主導の柔軟なデータ取得にはGraphQLを検討したい
  • Prisma + NestJS なら、RESTからGraphQLへの切り替えも段階的に進められる

いまはGraphQL導入前だけど、その検討過程で見えた選定軸や判断基準は、同じように悩んでる人の参考になるはず。


💡 余談:GraphQL導入フェーズで考えてること

  • BFF的に外部向けだけGraphQLにする構成
  • 認可処理の粒度(フィールド単位でやる?モジュール単位で切る?)
  • metricsテーブル作るべきか、GraphQLで生データ返してクライアントで計算させるか

🙌 最後に

GraphQLは「今使うべきか?」じゃなくて、「どこで使うべきか?」が重要な気がする。
この記事はまだ「実装前の話」だけど、むしろそういう時期に書いておくと後で自分で見返したときに意味あると思う。

GraphQL、使わない理由もあるけど、使いたくなる理由もちゃんとある。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?