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
Typescriptで始めるGraphQL入門_LG勉強会.pdf
Search
ruribou
July 10, 2025
Technology
35
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Typescriptで始めるGraphQL入門_LG勉強会.pdf
ruribou
July 10, 2025
More Decks by ruribou
See All by ruribou
好きなゲーム発表LT
ruribou
0
10
登竜門Hack2026_AI勉強会_講義資料
ruribou
0
39
!コスパよくインターンに受かる方法!
ruribou
1
370
『From Techer To Future』を体現するという宣誓
ruribou
0
54
僕がイベント運営をする理由
ruribou
0
96
優秀じゃないのはみんな同じだって、そろそろ気づきませんか?
ruribou
1
210
Lovendar
ruribou
1
50
Other Decks in Technology
See All in Technology
Railsのように考える: See through the Master
snoozer05
PRO
5
1.3k
Kiro Meetup #8 Kiro アップデート (2026/3/21〜2026/9/24)
katzueno
1
150
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
140
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
3
590
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
530
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.6k
What the customer really needed
kawaguti
PRO
3
220
ほんとうの信頼性はヒーローが死んでからはじまる / True reliability begins after the hero dies
vtryo
0
110
CLIライブラリ開発を支える技術
htnabe
0
150
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
540
人間はどの意思決定を手放せるのか
kawasima
15
8k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
330
Raft: Consensus for Rubyists
vanstee
142
7.7k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
550
Visualization
eitanlees
152
17k
Abbi's Birthday
coloredviolet
4
10k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Test your architecture with Archunit
thirion
2
2.4k
The Curse of the Amulet
leimatthew05
3
15k
How to train your dragon (web standard)
notwaldorf
97
6.8k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Automating Front-end Workflow
addyosmani
1369
210k
Transcript
Typescript Ͱ࢝ΊΔ GraphQL ೖ גࣜձࣾϥϒάϥϑ ։ൃΠϯλʔϯ ઙҪྋଠ 2025/06/25 created by
ruribou
ࣗݾհ ઙҪ ྋଠʢ͍͋͞ Γΐ͏ͨʣ ౦ژిػେֶཧֶ෦ཧֶՊ ಛఆඇӦར׆ಈ๏ਓ NxTEND झຯ↓ ཱྀɺٿ؍ઓɺΞΠυϧϚελʔ
ࠓճ͢͜ͱ • GraphQLͱͳʹ͔ • ۩ମతͳ࣮ • ࣮ࡍʹୟ͍ͯΈΔ͜ͱ
ࠓճ͞ͳ͍͜ͱ • GraphQLͷ࣮༻ੑ • Ԡ༻ྫ
GraphQL ͱͳΜͧ
HTTPܦ༝ͰDBαʔϏεΛૢ࡞͢Δ ͨΊͷSQLతͳݴޠʴΈ
۩ମతͳҧ͍ • ΫϥΠΞϯτओಋͰඞཁͳใ͚ͩΛऔಘ • RailsͷREST APIͩͱɺ/users/1 → ݻఆͷJSON͕ؼͬͯ͘Δͷʹରͯ͠GraphQLΫϥΠ Ξϯτ͕{ user(id:1)
{ id, name, posts { title } } } ͷΑ͏ʹɺʮͲͷϑΟʔϧυ͕΄͍͔͠ʯ Λࣗ༝ʹهड़Ͱ͖Δ • ୯ҰΤϯυϙΠϯτ & ౷Ұతͳૢ࡞Ϟσϧ • Rails ͷίϯτϩʔϥ×HTTPϝιουʢGET/POST/PUT/DELETEʣͰଟͷΤϯυϙΠϯ τΛཧ͢ΔΘΓʹɺGraphQL جຊతʹ /graphql 1͚ͭͩ
࣮ฤ
ࠓճͷٕज़ߏ Typescript + Hono + Prisma + Supabase + GraphQL
Hono • ຊਓ͕࡞ͬͨɻTypescriptͷܰྔͰߴੑೳͳWebϑϨʔϜϫʔΫɻ • όοΫΤϯυΊͪΌΫιָɻ
Prisma • ݴΘͣͱΕͨJavascipt / Typescript ͷORM • σʔλϕʔεϚΠάϨʔγϣϯͰ͖ΔΑ
Supabase PostgreSQL ΛϕʔεʹೝূɾετϨʔδɾϦΞϧλΠϜػೳΛඋ͑ͨ ΦʔϓϯιʔεͷόοΫΤϯυଈ੮αʔϏε
ࠓճ߃ྫ͚ͩͲTodoΞϓϦͰ ࣮͍ͯ͘͠Α
PrismaͷεΩʔϚ model Todo { id Int @id @default(autoincrement()) title String
completed Boolean @default(false) createdAt DateTime @default(now()) }
GraphQL εΩʔϚఆٛ export const schema = ` type Todo {
id: Int! title: String! completed: Boolean! createdAt: String! } type Query { todos: [Todo!]! } type Mutation { addTodo(title: String!): Todo! toggleTodo(id: Int!): Todo! deleteTodo(id: Int!): Boolean! } `; ɾʮʂʯඞਢΧϥϜ ɾܕఆٛͱ۩ମతͳૢ࡞Λ QueryͱMutationͰఆٛ
QueryͱMutationͱ • Query • CRUDͷRʢREADʣΛ୲ • RESTͰ͍͏ͱGET • Mutation •
CRUDͷCʢCreateʣ, UʢUpdateʣ, DʢDELETEʣΛ୲ • RESTͰ͍͏ͱPOST/PUT/PATCH/DELETE͋ͨΓ • Subscription • αʔόʔͷߋ৽ΛϦΞϧλΠϜͰ௨ʢྫɿଞਓͷૢ࡞Λଈ࣌มߋʣ • ࠓճΘͳ͍
Resolver ͷ࣮
ResolverͬͯͳΜͧ • SchemaͰԿ͕Ͱ͖Δ͔Λఆٛ͠ɺ͜ͷResolverͰͦΕΛͲ͏࣮ݱ͢Δ͔Λ࣮͢Δ • ۩ମతͳCRUDૢ࡞ͷதͱݴ͑Δ • SchemaͰఆٛ͞ΕͨQueryMutation͕࣮ࡍʹͲͷΑ͏ʹͯ͠σʔλΛऔಘɺมߋ͢Δ ͷ͔Λ۩ମతʹ࣮
۩ମతͳ࣮ const rootResolver: RootResolver = () => ({ todos: async
() => { const todos = await prisma.todo.findMany({ orderBy: { createdAt: 'desc' } }); return todos.map(todo => ({ ...todo, createdAt: formatDate(todo.createdAt), })); }, addTodo: async ({ title }: { title: string }) => { const todo = await prisma.todo.create({ data: { title } }); return { ...todo, createdAt: formatDate(todo.createdAt), }; }, toggleTodo: async ({ id }: { id: number }) => { const todo = await prisma.todo.findUnique({ where: { id } }); if (!todo) throw new Error('Not found'); const updated = await prisma.todo.update({ where: { id }, data: { completed: !todo.completed }, }); return { ...updated, createdAt: formatDate(updated.createdAt), }; }, deleteTodo: async ({ id }: { id: number }) => { const todo = await prisma.todo.findUnique({ where: { id } }); if (!todo) return false; await prisma.todo.delete({ where: { id } }); return true; }, });
ΫΤϦૢ࡞Λͯ͠ΈΔ
͕ࣗೖͨ͠ײ • ΫϥΠΞϯτ͕ຊʹඞཁͳใͷΈΛ͚ͨͨΔͷ͕ྑ͍ • REST APIͩͱʮޙ͔Β͜ͷใ͕ཉ͍͠ʯʮ͜ͷใ༨ܭͩʯΈ͍ͨͳ͜ͱ͕ ݁ߏى͖͏Δ • ܕ͖εΩʔϚͳͷͰɺͲΜͳΫΤϦ͕͛ΒΕΔͷ͔Ϩεϙϯεʹ͍ͭͯɺܕͱͯ͠ ѲͰ͖Δ҆৺ײ͕͋Δ
• Honoͱ૬ੑ͕ྑ͔ͬͨͷͰخ͍͠