Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
小規模でGraphQLを使う良さ
Search
Kaoru Yamakawa
September 08, 2024
60
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
小規模でGraphQLを使う良さ
KC3 2024登壇資料
Kaoru Yamakawa
September 08, 2024
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
15k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Un-Boring Meetings
codingconduct
0
460
Discover your Explorer Soul
emna__ayadi
2
1.3k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Mobile First: as difficult as doing things right
swwweet
225
10k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
How STYLIGHT went responsive
nonsquared
100
6.3k
Designing for Performance
lara
612
70k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Transcript
by lCyou @KC3 2024 9/9/2024 小規模でGraphQL を使う良さ
自己紹介 山川 加織 所属:無所属 普段は認証系の研究や開発をしてます。 趣味:自作キーボード・コーヒーなど 最近ハマってること:ランニング
筆者はGraphQLを触り始めて浅いです。 GraphQLのツールチェインにある機能にも言及しています。 筆者が思う良さを語ります。 (ポエム的なところが含まれます) 何か間違い等あれば教えろください(っ'-')╮ =͟͟͞͞ 🔪ブォン 注意事項
まずGraphQLって どんなの?
GraphQL は API のクエリ言語 Facebookが開発元 データに定義した型システムを使用するサーバー側ランタイム ランタイムを指して言われていることも聞く 特定のデータベースやストレージ エンジンに関連なし GraphQLって?
特定のデータのみ取得 アンダーフェッチ・オーバーフ ェッチがない APIの破壊的変更が起きにくい クエリが複雑になることも 学習コストが高い HTTP キ ャ ッ
シ ュ が で き な い (しにくい) 主な特徴 メリット デメリット
アンダーフェッチ RESTの場合 ① ② ③ ④ 各リソースごとにリクエストが 必要になってくる (RESTはリソース一つに対し てエンドポイントを生やす)
アンダーフェッチ GraphQLの場合 ① ① ① ① 関連するデータを必要な分だけ 持ってくることができる! アンダーフェッチしない リクエスト回数が少ないと嬉しい
モバイル回線の使用の際 単純にパフォーマンス
主な特徴 client GraphQL server query JSON
本編
自分が触ってみて良かったと 思えたところ データ型がしっか りしている スキーマ駆動 単に POSTリクエスト
前提 スキーマってやつ 1. クエリ・ミューテーション 2. でも読みやすい 3.
スキーマって? どんなAPIがあるか書かれている GraphQL型システムを使用 SDLで記述される 今回の主役
クエリって? REST APIでもあるアレ データの型や値等を指定して欲し い情報がレスポンスで帰ってくる ようにするもの 図のように引数をとったり,ディ レクティブなどで動的なクエリを 作成できる
ミューテーションって? 前項クエリと大差はない RESTでデータを書き換えるとき メソッドを使い分けるように言い 換えてる ということで変異を起こすという 意味でmutationならしい
いいところ① データ型しっかりしてる
データ型がしっかりしている 前提でも言及したとおりSDLはデータ型を使用している スキーマはクライアントでもサーバーでも同一のものを使用 することでやり取りすることができる クライアントもサーバーも同じ型の知識を持ったファイルが 存在するのはかなりのメリット
データ型がしっかりしている スキーマの可読性 スキーマはAPIの定義を教えてくれる どう言ったデータをやりとりしているか がわかりやすい 特にクエリやミューテーションに「どこ のページからのリクエストなのか」や 「どう言った情報が欲しいのか」がわか るようにかける ロジックの集約
client server query JSON データ型がしっかりしている GraphQL GraphQL 実際は通信の前後で処理を挟んでいる
データ型がしっかりしている スキーマからある程度の型定義ファイルやクライアン トコードを生成できる(TypeScript) 型定義されているからできること 自分で書かなくてもいいのは工数的にもバグ回避 にも嬉しい 逆にコードからスキーマを生成することも可能 1人でも楽してコードが書けちゃう コードベースで変更に追随できているかは人力…
いいところ② スキーマ駆動
スキーマ駆動 こんな経験ありませんか
みんな技術スタックは? 役割分担するか〜 スキーマ駆動 〜キックオフ時〜 じゃあフロント担当で!
あれ,APIってどうなってる んだっけ? いや,まだっスね… スキーマ駆動 〜開発時〜 これ機能追加できない? 好き放題言いやがって…
スキーマ駆動 スキーマ駆動開発 単一のインターフェイスを元にプロダクトを構成するサービスを開発す る手法 https://hitokuse.com/blog/?p=3135
スキーマ駆動 スキーマはコミュニケーションツールでもある チームで仕様書を元に開発を進めることができる 領域関係なく話ができて共通知識を持つことができる 実装がスムーズに 仕様が先に固まるので開発に入る時に楽 他の人(新しいメンバーやプレゼン相手)にも伝わりやすい
スキーマ駆動 (余談)実装が固まってからの変更 GraphQLの特徴としてAPIの変更への柔軟性 共通のスキーマを使う前提
いいところ③ 単にPOSTリクエスト
単なるPOSTリクエスト まずはこれを叩いてみてください https://anilist.gitbook.io/anilist-apiv2-docs
単なるPOSTリクエスト 左のようなレスポンスが返ってくる GraphQLは基本HTTPを使うときは POSTリクエストになる。 (queryタイプはGETでも可能だが mutationなどはPOSTである)
単なるPOSTリクエスト 学習コストが高いなんてウソ (筆者は一切の責任を負いません) RESTとの違いは エンドポイントが一つ HTTPメソッドはPOST 処理分岐はリクエストボディ(クエリ)で変更
単なるPOSTリクエスト 学習コストが高いなんてウソ (筆者は一切の責任を負いません) RESTとの違いは エンドポイントが一つ HTTPメソッドはPOST 処理分岐はリクエストボディ(クエリ)で変更
最後に 1人でもチームでも快適にGraphQLをつかってみて!
THANK YOU 参考文献 https://graphql.org/ https://kinsta.com/jp/blog/graphql-vs-rest/ https://www.redhat.com/ja/topics/api/what-is-graphql https://zenn.dev/urotea/books/ece9493100b5be/viewer/8769d8