Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリエンジニアのためのGraphQL入門.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
spycwolf
November 19, 2024
Technology
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アプリエンジニアのためのGraphQL入門.pdf
spycwolf
November 19, 2024
More Decks by spycwolf
See All by spycwolf
デザインシステムを利用したSwiftUIによるアプリ開発事情
spycwolf
1
900
Other Decks in Technology
See All in Technology
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
120
IDperturb: Enhancing Variation in Synthetic Face Generation via Angular Perturbation
sansantech
PRO
0
120
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
170
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
220
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
370
推論の観測、できていますか? 〜 Google Cloud Gemini Enterprise Agent Platformで 3つの Gemini モデルを実測して踏んだ、評価の罠 〜
shukob
PRO
0
140
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
3
720
【試作】IoT x AIエージェント
happysamurai294
0
110
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
100
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
1
170
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
1
520
Azure Cost Management の FOCUS コストデータを迷わず読むための“3つの軸”
tetsuyaooooo
0
130
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Docker and Python
trallard
47
4.2k
How to Ace a Technical Interview
jacobian
281
24k
Done Done
chrislema
186
16k
Agile that works and the tools we love
rasmusluckow
331
22k
Chasing Engaging Ingredients in Design
codingconduct
0
300
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
4 Signs Your Business is Dying
shpigford
187
23k
Product Roadmaps are Hard
iamctodd
55
13k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Transcript
アプリエンジニアのための GraphQL⼊⾨
note inc. ‧2024年2⽉にnoteにジョイン ‧note Appチームリーダー ‧2015年〜モバイルアプリを専⾨に扱うようになる ‧それ以前はPHPやRubyでのバックエンド開発がメイン Spycwolf Kota KANEKO
2
note inc. GraphQLとは https://graphql.org/ • API のクエリ⾔語であり、既存のデータを使⽤してそれらのクエリを実⾏するた めのランタイムです。GraphQL は API
内のデータの完全でわかりやすい説明を 提供し、クライアントが必要なものだけを正確に要求できるようにします。 • GraphQL クエリを API に送信すると、必要なものだけが正確に取得されます。 それ以上でもそれ以下でもありません。GraphQL クエリは常に予測可能な結果 を 返します。 • GraphQL クエリは、1 つのリソースのプロパティにアクセスするだけでなく、そ れらの間の参照もスムーズに追跡します。⼀般的な REST API では複数の URL か らの読み込みが必要ですが、GraphQL API では 1 回のリクエストでアプリに必要 なすべてのデータを取得します。
note inc. GraphQLとの出会い • GraphQLは元々Facebookの内部で開発されたもので、2015年に⼀般に公開さ れ、その後、2018年に現在のGraphQL Foundationに移譲された • 2017年に新規アプリサービスの開発に伴い、当時のチームメンバーとGraphQL の導⼊を決めた
• APIとクライアントアプリとを並⾏してゼロから開発するタイミングで、関係す るエンジニア4⼈全員がAPIもアプリも両⽅を開発していった GraphQL導⼊の判断 • 実装する前段階の設計についてほぼ検討する箇所がない • REST APIは会社ごと、チームごとに設計が異なり、新規に開発するにも設計部分 に検討が必要そうだった • 単純に新しいものを使ってみたかった!
note inc. 当時の感想 • 当時はまだ細かい配慮が必要ではあったが、とにかく直感的に実装しやすい • indexとshowの区別を厳密に考慮しなくても後々困ることが少ないため、クライ アント側の画⾯要件が固まっていなくてもAPI側の開発を進められる • REST
APIに対しても当時からCodegeneratorはあったが、Apolloが扱いやすい • Grapiqlのようなプレイグラウンド環境が標準で備わっていて、クライアントか らのスキーマ確認&レスポンス確認がしやすい サーバーサイドの開発に慣れていないモバイルアプリエンジニアで も実装しやすい!
note inc. 覚えておくべきことはたった3つ
note inc. Schemaを定義する • 取得系はQuery、更新系はMutationという概 念 • 基本的にはリソースごとに取得できるカラム 情報を定義する •
ここで定義するスキーマは、そのままクライ アントからクエリとして指定できるものにな る • QueryもMutationもinputとして引数を設定 できる • 基本的にはこれだけ
note inc. Resolverを定義する • Resolverはリソースとスキーマとの関連を定 義する • データベースから取得したデータをそのまま スキーマに当てはめる場合が多いが、取得し たデータを加⼯して返却する場合もある
• UseCase的なレイヤー
note inc. Serviceを定義する • データベースとのやり取りは別定義にする ケースが多い • ここで定義したデータ取得する、もしくは更 新系の処理を⾏う •
Repository、DataSource的な役割
note inc. プロジェクトの覗きかた • graphqlはエンドポイントが1つなので、/grapql というディレクトリを探す • その配下に schema や
resolver などが⾒つかるはず • データリソースへのアクセスは resolverから辿れるはず • レスポンスを確認したいときは schema のネーミングから、該当する resolver を探す • resolver の定義を確認すれば何をしているのか、どこからデータを持ってきてい るのか、どこでデータを処理しているのかがわかるはず
note inc. 実際にプロダクトで扱うには3つ だけ理解しておけばいいなんてこ とはありません!
note inc. 普段あまりAPIの実装をしたこと がない⽅もチャレンジしてみてく ださい
Thank you !