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
200
Protocol Buffers で Web APIのスキーマ駆動開発がしたい
t0yohei
November 09, 2019
Tweet
Share
More Decks by t0yohei
See All by t0yohei
Vue の Input における State は親で持つべきか子で持つべきか
t0yohei
0
47
Vue.js を使って Grid System を実装した話
t0yohei
2
7.2k
負債が溜まったレガシーフロントエンド画面を Vue.js でリプレイスした話
t0yohei
0
2.1k
プログラミング入門に失敗した話
t0yohei
0
190
【ITエンジニアが怪我で労災!?】 仕事中に足の小指が骨折したら起きること
t0yohei
0
410
Ruby と JavaScript の違い( Function 編)
t0yohei
1
330
副業のノウハウ
t0yohei
0
190
ちょっとしたRubyの話
t0yohei
1
500
自作キーボード入門してみた
t0yohei
0
140
Other Decks in Technology
See All in Technology
[Keynote] What do you need to know about DevEx in 2025
salaboy
0
160
関係性が駆動するアジャイル──GPTに人格を与えたら、対話を通してふりかえりを習慣化できた話
mhlyc
0
140
やる気のない自分との向き合い方/How to Deal with Your Unmotivated Self
sanogemaru
0
470
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
430
そのWAFのブロック、どう活かす? サービスを守るための実践的多層防御と思考法 / WAF blocks defense decision
kaminashi
0
160
速習AGENTS.md:5分で精度を上げる "3ブロック" テンプレ
ismk
6
740
小学4年生夏休みの自由研究「ぼくと Copilot エージェント」
taichinakamura
0
630
三菱電機・ソニーグループ共同の「Agile Japan企業内サテライト」_2025
sony
0
140
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
530
実装で解き明かす並行処理の歴史
zozotech
PRO
1
700
自動テストのコストと向き合ってみた
qa
1
220
GoでもGUIアプリを作りたい!
kworkdev
PRO
0
130
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
The Language of Interfaces
destraynor
162
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Six Lessons from altMBA
skipperchong
28
4k
Site-Speed That Sticks
csswizardry
11
900
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Into the Great Unknown - MozCon
thekraken
40
2.1k
It's Worth the Effort
3n
187
28k
The Invisible Side of Design
smashingmag
302
51k
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 した瞬間に型付けされる