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
Cookpad Summer Internship 2021 Web Frontend
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kazuhito Hokamura
August 26, 2021
Technology
7.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cookpad Summer Internship 2021 Web Frontend
Kazuhito Hokamura
August 26, 2021
More Decks by Kazuhito Hokamura
See All by Kazuhito Hokamura
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.2k
TypeScriptとGraphQLで実現する 型安全なAPI実装 / TSKaigi 2024
hokaccha
5
5.2k
Kotlin製のGraphQLサーバーをNode.jsでモジュラモノリス化している話
hokaccha
0
3.9k
GraphQLの負債と向き合うためにやっていること
hokaccha
2
1.7k
ユビーのアーキテクチャに対する取り組み
hokaccha
1
510
RailsエンジニアのためのNext.js入門
hokaccha
7
22k
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
hokaccha
3
4.1k
巨大なRailsアプリケーションを「普通」にするための取り組み
hokaccha
1
1.1k
Web Frontend Improvement in Cookpad
hokaccha
1
1.2k
Other Decks in Technology
See All in Technology
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
340
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
1.1k
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
130
AI coding 整合正規方法
philipz
0
570
AWS App Runnerから Cloudflare Workersへ移行した話
ryota09
0
110
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
230
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
1
590
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
110
「今盗んで、後で解く」に備える ― AWSのポスト量子暗号入門
yama3133
2
270
GitHub Agentic Workflows を触ってみる
htkym
2
860
認知負荷を吸収し、プロダクトをまたぐPR Preview基盤の設計事例
taiki45
2
540
AWS DevOps Agent スキルをつかいこなそう / Master AWS DevOps Agent Skills
kinunori
2
630
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
The SEO Collaboration Effect
kristinabergwall1
1
580
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Tell your own story through comics
letsgokoyo
1
1.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Building AI with AI
inesmontani
PRO
1
1.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
310
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Chasing Engaging Ingredients in Design
codingconduct
0
340
Transcript
Cookpad Summer Internship 2021 Web Frontend
講師・TA
外村 和仁 @hokaccha • 技術部 / テックリード • 福岡在住、カープファン •
好き: TypeScript, React, Ruby, Rails • 個人ワーク: Adventar, nodebrew
萩原 馨 @kaorun343 • 技術部 • テレビ(特にNHK)をよく観ています • 好き: TypeScript,
Vue, React, Rust • 個人ワーク: vue-property-decorator
森川 慎太郎 @morishin • 略歴 ◦ 2015年に新卒入社してずっとユーザー投稿領域でクックパッド iOS やったりお料理アルバム・みんなのお弁当・ Cookin’・クック
パッドMYキッチンなどの iOS、 Rails、React Native 開発などを やっていた ◦ 2019-2020年 iOS 大規模リニューアルのサーバーサイドと iOS の 開発 ◦ 現在はウェブフロントエンドが中心 (cookpad.com の開発) ◦ レシピ事業サービス基盤部というところでテックリード • 0歳児ひとりと猫2匹 • 趣味は個人開発、ビール、コーヒー • 好きな川は鴨川 (一級河川)
タイムテーブル
タイムテーブル • 11:00-12:00 課題発表、講義(これ) • 12:00-13:00 🍔 ランチ •
13:00-15:00 基本課題 • 15:00-15:30 基本課題解説 • 15:30-18:00 応用課題、基本課題の続き
課題発表〜👏
None
None
全体スケジュール • 1日目: Webアプリを実装 ← 今日 • 2日目: iOSアプリを実装 •
3日目: APIを実装 • 4日目: インフラ・デプロイ • 5日目: サービス開発(課題とは関係なし)
API • GraphQL の API が用意してある • 3日目の講義でこのAPIを実装する • 1日目、2日目は完成品を呼ぶ
Webアプリの技術スタック • TypeScript • Next.js • GraphQL
GraphQLの概要
GraphQLとは • Web API のクエリ言語とランタイム • REST や gRPC などと同じレイヤー
• 柔軟にクエリできる点や型システムが特徴
REST vs GraphQL
Request Response
Request Response
REST vs GraphQL • GitHub が REST と GraphQL の両方の
API を公開している ので比較してみる • 特定の Issue のタイトル、概要、コメントを取得したい
REST
REST
REST • issue と comment のAPIを2回叩く必要がある • 使わないフィールドも返ってくる • 何が返ってくるかリクエストだけ見てもわからない
GraphQL
REST と GraphQL • 必要なフィールドだけ指定できればいくつかの問題は解決する ◦ /org/repo/issues/43?fields=title,description,comments • 実はこれが GraphQL
の前身である Graph API の原型 ◦ https://developers.facebook.com/docs/graph-api • これをもっといい感じに使えるようにしたのが GraphQL
GraphQLの利点 • 取得するフィールドを明示的に指定できる • 複数のデータを1リクエストで取得できる • 強固な型システム
JavaScriptとGraphQL • 公式のリファレンス実装がJavaScript ◦ https://github.com/graphql/graphql-js ◦ サーバー/クライアント両方の実装がある • Apollo を筆頭に公式以外のエコシステムも豊富
◦ https://www.apollographql.com/
TypeScriptとGraphQL • typescript-codegen や Apollo CLI で TypeScript の型を自 動生成できる
• リクエスト/レスポンスに型をつけられるため堅牢かつ快適 に開発できる
GraphQLの基本機能
実践 GraphQL • Schema • Query • Mutation • Error
Schema • GraphQLの型定義ファイル • GraphQL のサーバーはスキーマを元にリクエストの クエリとレスポンスbodyの値を検証する • クライアントの自動生成などにも利用できる
Schema
Basic Types スカラー型 リスト Non Null Nullable
Object Type オブジェクト型
Root Type ルート型 トップレベルクエリ
Query • クライアントがほしいデータを記述してサーバーにリクエスト する • スキーマとはまた別の独自シンタックス
Query
Query クエリ名(オプショナル) トップレベルクエリ 取得するフィールドを列挙 ネストしたフィールド
Multiple Query 複数のクエリを指定できる
Field alias フィールドに別名をつけて複数 指定できる
Variables クエリの外から変数を受け取る
Variables ここで変数を渡す
Mutation • RESTでいう POST/PUT/DELETE にあたるもの • スキーマやクエリの書き方は GET 系のクエリと同様 •
特性が全然違うので分けて考える必要がある
Mutation Schema
Mutation Schema ルート型
Input Type Input 型
Mutation Query
その他の機能 • Custom Scalar Type • Enum Type • Union
Type • Interface • Fragments • Directive
ドキュメントの読み合わせ
Happy Hacking!