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
Protocol Buffers で Web APIのスキーマ駆動開発がしたい
Search
t0yohei
November 09, 2019
Technology
0
110
Protocol Buffers で Web APIのスキーマ駆動開発がしたい
t0yohei
November 09, 2019
Tweet
Share
More Decks by t0yohei
See All by t0yohei
Vue.js を使って Grid System を実装した話
t0yohei
2
4.9k
負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話
t0yohei
0
1.6k
プログラミング入門に失敗した話
t0yohei
0
140
【ITエンジニアが怪我で労災!?】 仕事中に足の小指が骨折したら起きること
t0yohei
0
250
Ruby と JavaScript の違い( Function 編)
t0yohei
1
190
副業のノウハウ
t0yohei
0
120
ちょっとしたRubyの話
t0yohei
1
330
自作キーボード入門してみた
t0yohei
0
100
Other Decks in Technology
See All in Technology
依存ライブラリはどこに?
takesection
0
120
エンジニア候補者向け資料2024.03.28.pdf
macloud
0
2.9k
プッシュ型子育てサービスを、先行プロジェクト実施自治体において開始します
govtechtokyo
0
290
GitHub最新情報キャッチアップ 2024年3月
dzeyelid
17
3.2k
XRミーティング 2024-03-20
1ftseabass
PRO
0
100
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
7
100k
LLM + RAG を使った SORACOM Support Bot の裏側の歴史
soracom
PRO
1
640
20240321_生成AI時代のDevOps
kzkmaeda
2
610
「XX試験の環境作ってよ」と言われた時によく使うAWSのソリューションについて
bun913
0
120
BDD(Cucumber)コミュニティが無料提供しているコンテンツの紹介と現在起きている危機
nihonbuson
4
750
コードレビューを支援するAI技術の応用
akkie76
2
160
単回帰分析について数式を追いながら実装してみた
kentaitakura
0
510
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
317
37k
We Have a Design System, Now What?
morganepeng
42
6.7k
Scaling GitHub
holman
456
140k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.2k
What's in a price? How to price your products and services
michaelherold
236
11k
Designing on Purpose - Digital PM Summit 2013
jponch
109
6.4k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
StorybookのUI Testing Handbookを読んだ
zakiyama
10
4.5k
Agile that works and the tools we love
rasmusluckow
323
20k
Creatively Recalculating Your Daily Design Routine
revolveconf
209
11k
Imperfection Machines: The Place of Print at Facebook
scottboms
257
12k
Pencils Down: Stop Designing & Start Developing
hursman
115
11k
Transcript
Protocol Buffers で Web APIの スキーマ駆動開発がしたい (若手)エンジニアもくもく会 vol.19 @ビザスク authored
by t0yohei
Web API って • HTTP(S) のインターフェースで提供される API • SSKDs(Small Set
of Known Developers) ◦ Google Map の Geo API など • LSKDs(Large Set of Unknown Developers) ◦ サービス内でフロントエンドサーバーとバックエンドサーバーがやり取 りするための API など • REST, SOAP, gRPC, GraphQL などがある
スキーマ駆動開発って?
Web API の振る舞いの詳細を先に 決めて、 開発を進めていく手法のこと
こんなことありませんか? • フロントエンドの開発を進めたいけど、サーバーサイドからどんな json が 返ってくるかわからない • あるいは、予想してたのと違う json が返ってきた
解決方法: スキーマ駆動で開発する • APIを作る人・使う人が一緒にどういう API を作るのかを一緒に決めておく • フォーマットとしては、 Swagger(OpenAPI) など
• https://editor.swagger.io/
問題 • API の実装に変更があった時、ドキュメントがそれに合わせてメンテされる ことが保証できない • その結果、ドキュメントが正しいかわからなくなる • Swagger あんまり見やすくない(解釈)
我々が欲しいものは? • 定義したスキーマを元に、クライアント・サーバーで使用するコードを自動 生成してくれるもの • 可読性が高いもの
Protocol Buffers(protobuf)
Protocol Buffers(protobuf) って? • Google が開発してオープンソース化したスキーマ定義言語 • gRPCでよく使われている • proto
ファイルに実装した定義を元に、コードの自動生成が可能 • 読みやすい • 今さらProtocol Buffersと、手に馴染む道具の話 • Web API に秩序を与える Protocol Buffers / Protocol Buffers for Web API
protobuf を使うとどうなるのか • API の振る舞いを proto ファイルに定義 • サーバーサイド・フロントエンドの実装で基盤となるコードを自動生成 •
詳細な実装を追加 • 実装を変更する場合は proto ファイルを修正 • proto ファイルが仕様書になる
ちゃんと実装しました(まだ途中だけ ど)
作成したもの TODO リスト スキーマ定義: protobuf バックエンド: rails フロントエンド : nuxt.js
with TypeScript
直接コードを見てみる https://github.com/t0yohei/rails-nuxt-protobuf-todo
何が嬉しいか • スキーマ駆動で開発することができる • APIの修正時にドキュメント修正がいらない(実装が仕様になるので) • 静的言語だと、通信で受け取ったデータを parse した瞬間に型付けされる