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
TechTalk スキーマファースト開発
Search
DeNA_Tech
July 21, 2020
Technology
5.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TechTalk スキーマファースト開発
スキーマファースト開発を導入することで、フロントエンド/サーバーサイド エンジニア間でのすり合わせやドキュメントの整備等を減らすことができ、開発効率を上げられる、という話です。
DeNA_Tech
July 21, 2020
More Decks by DeNA_Tech
See All by DeNA_Tech
学びが形になる!〜DeNAで6年間プロダクト開発に携わって学んだこと〜
dena_tech
7
1.8k
ペタバイト、30プロダクトを超えて成長を続けるデータ基盤の歴史
dena_tech
5
940
DeNAデータエンジニアの組織・データエンジニアキャリアについて
dena_tech
6
2.4k
Pocochaにおけるデータマネジメント
dena_tech
3
1.4k
社内データ利活用の推進と技術的負債の解決に向けた取り組み
dena_tech
5
610
Google Cloud を使ったデータプラットフォームへの変革と 最新の活用状況について
dena_tech
6
510
DeNA SWETでのインターンシップについて【DeNA TechCon 2023】
dena_tech
0
790
T系EC2インスタンスのクレジットが回復しないので困った話【DeNA TechCon 2023】
dena_tech
4
1.1k
画像サーバーを紆余曲折あってS3 に移行した話【DeNA TechCon 2023】
dena_tech
0
840
Other Decks in Technology
See All in Technology
Metadata - Section 1: HTML Basics
mohab1
0
120
今さら理解するウェブフォントver.2026
takanorip
3
810
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.3k
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
340
go-sqletch
moznion
0
140
hackers_champloo_2026_tidb
makocchi
0
160
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
200
大型犬好きによるPugの紹介
yamanoku
1
160
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
180
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
Featured
See All Featured
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
The SEO Collaboration Effect
kristinabergwall1
1
590
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
GraphQLとの向き合い方2022年版
quramy
50
15k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Visualization
eitanlees
153
17k
New Earth Scene 8
popppiees
4
2.7k
Everyday Curiosity
cassininazir
0
350
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Transcript
TechTalk スキーマファースト開発 2020/6/15 海老沼 健一
持ち帰ってほしいこと 2 スキーマファースト開発で コミュニケーションコストを減らして 開発効率を上げよう
よくある開発スタイル (僕が実際に経験した環境) エンジニアがフロントエンドとサーバーサイドに分かれている 機能開発フロー 1. 機能の仕様書を作る 2. サーバーサイドエンジニアがAPI設計 3. サーバーサイドエンジニアがAPI実装
4. フロントエンドエンジニアが作成されたAPIを使ってクライアントを実装 よくある問題 • 仕様書やドキュメントがちゃんと整備されていない • クライアント側はAPIの実装を待たないといけない • エンドポイント毎のエンコード/デコード処理を書くのが面倒 3
よくある問題1 仕様書やドキュメントがちゃんと整備されていない • スケジュールが押してると仕様書やドキュメントを書くのは後回しになりがち • 手動でAPI仕様書を書いているとタイポやミス • ドキュメントがちゃんと整備されていないと、APIの仕様を確認する必要がある • 例えば
• エンドポイントとサンプルのレスポンスが貼ってあるだけ • バグ修正で変更した箇所のドキュメントが修正されていない 4
よくある問題2 クライアント側はAPIの実装を待たなければいけない • クライアント側の通信周りの実装がAPI待ち • 正しいモックデータを用意するのにコミュニケーションコストがかかる • 自前でモックサーバーを用意するにもメンテが必要 5
よくある問題3 エンドポイント毎のエンコード/デコード処理を書くのが面倒 • サーバー/クライアント共にリクエストとレスポンスの構造体やクラスを用意して、エンコード/デコー ド処理を書く必要があり、コード量が多くなりがち • 例えば • Goだと json.NewEncoder().Encode(),
json.Marshal() とか • Dartだと RequestClass.toJson() とか 6
7 スキーマファースト開発
スキーマファースト開発とは まずAPIの仕様(スキーマ)を決めて、それをもとにサーバー/クライアント開発を同時に進めて最後に 結合する開発手法 メリット • スキーマという共通言語でコミュニケーションを取れる • 周辺ツールによる開発効率の向上 • ドキュメント生成、モックサーバー立ち上げ
• ハンドラー、エンコード/デコード周りのコード生成 • バグの発生を減らせる デメリット • スキーマの学習コスト、導入コストかかる 8
スキーマファースト開発 • OpenAPI • gRPC (概要のみ) • JSON Schema (概要のみ)
• GraphQL 9
OpenAPI https://openapis.org REST API をYAML/JSONで記述するフォーマットで、Swagger ( https://swagger.io ) が有名 メリット
• ドキュメントやコードの生成、モックサーバー • 既存のRESTの知識/仕組みをそのまま使える • キャッシュとか デメリット • リソースに対して画面やユースケース毎に微妙に異なるデー タが欲しくなり、エンドポイントが増えていく (REST API のデ メリット) 10
gRPC https://grpc.io HTTP/2を利用したハイパフォーマンスなRPCフレームワーク Protocol Buffers というIDL(インタフェース定義言語)でスキーマを定義する 来週のTechTalkで出てくるので今回は省略 11 JSON Schema
https://json-schema.org JSONファイルの構造(型、範囲など)をJSONで表現する 採用事例が少なそう
GraphQL https://graphql.org APIのためのクエリ言語/実装 GraphQL 独自のSDLを使う クライアント側で取得したいデータをクエリ言語で指定 し、/graphql エンドポイントに送る。APIはそのクエリど おりにデータを返す メリット
• ドキュメントやコード生成、モックサーバー • スキーマを定義しておけばクライアント主導でレス ポンスを変えれる 12
GraphQL デメリット • リソースに対するシンプルなCRUDで十分なサービスには必要ない • サーバーの実装が複雑になりがち • n+1問題を解決するためのバッチ処理 • 認証/認可などミドルウェアの設計
• キャッシュの仕組みなどまだ枯れてない • 基本的に1つの /graphql エンドポイントでリクエストを受けるので、エンドポイント単位で キャッシュしていた場合はRESTの知見をそのままは活かしにくい • FastlyやCloudflareなどのCDNではGraphQLクエリのキャッシュに対応しているが、まだ 採用事例は少なそう 13
14 GraphQL デモ
GraphQL - エブリスタでの採用事例 フルRailsだったサーバーを Rails + graphql-ruby でリプレイス 良かったこと •
APIのドキュメント作成が不要になり工数削減 • API数が900 -> 150クエリに • フロントエンド主導の開発プロセス つらかったこと • 当時はgraphql-rubyが安定していなかった • ベストプラクティスが無かった https://www.slideshare.net/dena_tech/10-132197778 15
持ち帰ってほしいこと (再掲) 16 スキーマファースト開発で コミュニケーションコストを減らして 開発効率を上げよう