Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Cookpad Summer Internship 2021 Web Frontend
Kazuhito Hokamura
August 26, 2021
Technology
0
5.8k
Cookpad Summer Internship 2021 Web Frontend
Kazuhito Hokamura
August 26, 2021
Tweet
Share
More Decks by Kazuhito Hokamura
See All by Kazuhito Hokamura
RailsエンジニアのためのNext.js入門
hokaccha
6
9k
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
hokaccha
3
3.1k
巨大なRailsアプリケーションを「普通」にするための取り組み
hokaccha
1
630
Web Frontend Improvement in Cookpad
hokaccha
1
620
cookpad summer internship 2018 - Git
hokaccha
1
9.1k
cookpad summer internship 2018 - JavaScript
hokaccha
0
9k
エンジニアのアウトプットと採用 / Engineer's output and recruiting
hokaccha
0
1.4k
ログを活用したサービス開発
hokaccha
2
6.5k
BdashにおけるFlux設計
hokaccha
4
5k
Other Decks in Technology
See All in Technology
テスト自動化の成功を支えるチームと仕組み/TestAutomation
goyoki
4
730
2022年最新版 GatsbyJS + TypeScript + microCMS でブログを作る。
hanetsuki
1
770
ヘキサゴナルアーキテクチャを利用したLambda 関数のドメインモデルの実装 Live
fatsushi
3
500
[SRE NEXT 2022]メルカリグループにおけるSREs
srenext
0
550
toilを解消した話
asumaywy
0
220
Data Warehouse or Data Lake, which one do I choose?
ahana
0
150
runn is a package/tool for running operations following a scenario. / golang.tokyo #32
k1low
1
240
Agile and Requirement : アジャイルな要件定義について考える
kawaguti
PRO
10
3.7k
Apache Kafka and the World of Streams
hashitokyo
0
130
信頼性の階層の一段目を積み上げる/Monitoring Dashboard
shonansurvivors
0
180
AI Company
shurain
0
580
ソフトウェアテストで参考にしている67のモノ #scrumniigata / 67 things for software testing
kyonmm
PRO
1
820
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
57
3.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.2k
Designing the Hi-DPI Web
ddemaree
272
32k
Docker and Python
trallard
27
1.5k
Design by the Numbers
sachag
271
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
37
3.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
498
130k
The Mythical Team-Month
searls
208
39k
BBQ
matthewcrist
74
7.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
315
19k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Build your cross-platform service in a week with App Engine
jlugia
219
17k
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!