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
コードファースト vs スキーマファースト on Rust / code-first-vs-s...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
haco
December 25, 2020
2.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コードファースト vs スキーマファースト on Rust / code-first-vs-schema-first
haco
December 25, 2020
More Decks by haco
See All by haco
crates.io にライブラリを公開してみた / publish-on-crates-io
haco
0
1k
新タクシー配車システムの裏側/dispatcher-background
haco
1
460
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
320
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
The agentic SEO stack - context over prompts
schlessera
0
940
30 Presentation Tips
portentint
PRO
1
400
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
690
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
A better future with KSS
kneath
240
18k
Transcript
Mobility Technologies Co., Ltd. GraphQL ライブラリの Juniper を調べていたらコード ファーストとスキーマファーストについて語りたくなった t.aida
2020-12-17 MoT.rs #3
Mobility Technologies Co., Ltd. 2 おさらい : GraphQL のスキーマはこんなやつ type
Film { id: Int title: String! } SDL と呼ばれる専用の文法 ▪ Schema Definition Language の略 ▪ なので SDL-first とも呼ばれてる (インターフェース定義言語 IDL の一つ) スキーマファーストって何さ
Mobility Technologies Co., Ltd. 3 一通りの型を表現できるようになってる type Film { id:
Int title: String! director: Person! actors(limit: Int = 10): [Person] } type Person { id: Int name: String! } このスキーマからコードを生成するのがスキーマファースト スキーマファーストって何さ
Mobility Technologies Co., Ltd. 4 スキーマファーストの逆。 こんな感じの Rust のコードから… #[derive(GraphQLObject)]
struct Person { name: String, age: i32, } 直接 GraphQL サーバを作る コードファーストって何さ
Mobility Technologies Co., Ltd. 5 Rust なのでいろいろ柔軟に書ける #[graphql_interface(for = [Human,
Droid])] trait Character { fn id(&self) -> &str; } #[graphql_interface] impl Character for Human { fn id(&self) -> &str { &self.id } } これは trait と impl に GraphQL の i/f をマッピングしている例 コードファーストって何さ
Mobility Technologies Co., Ltd. 6 Juniper には色々おもしろい attributes etc があるんですが
今回の LT では触れません!残念! こんな感じで
Mobility Technologies Co., Ltd. 7 コードファーストとスキーマファーストって 一般にどちらがいいのだろう あらすじ ▪ スキーマファーストの
Pros & Cons ▪ コードファーストの Pros & Cons ▪ 私の見解 発端 : Juniper 公式ドキュメントから Quickstart - Juniper - GraphQL Server for Rust (Juniper はコードファースト推し) 本題
Mobility Technologies Co., Ltd. 8 Pros ▪ スキーマをフロントエンドとバックエンド共通の所有物にできる (API 定義の場合)
▪ 定義が独立するのでテストが進めやすい ▪ ▪ 特定のウェブフレームワーク (Rails とか) に依存しないで済む (テーブル定義の場合) ▪ 実装言語に縛られない ▪ Cons ▪ IDL の貧弱な文法に制限される ▪ 必ずしも最適なコードを生成できない ▪ IDL とそれぞれの言語は普通は 1:1 で対応しない ▪ スキーマのバージョン管理が煩雑 ▪ バックエンドとフロントエンドがそれぞれ 依存しているバージョンを管理するためには別途工夫が必要 スキーマファースト
Mobility Technologies Co., Ltd. 9 Pros ▪ コードが常にスキーマと一致する ▪ コードの生成タイミングなどを気にする必要なし
▪ モジュール単位でファイルを分割できる ▪ ファイル巨大化は GraphQL も JSON Schema も抱える問題点 ▪ コードの重複を回避できる ▪ IDL 側の表現力が貧弱なことに起因 ▪ (generics, trait, mix-in etc の不在による) ▪ IDE のサポートが強力 ▪ 型の検査や補完など Cons ▪ 実装言語に縛られる ▪ ▪ スキーマがバックエンドの所有物になってしまう コードファースト
Mobility Technologies Co., Ltd. 10 特に悩ましいポイント ▪ スキーマファースト Pros ▪
スキーマをフロントエンドとバックエンド共通の所有物にできる ▪ コードファースト Cons ▪ スキーマがバックエンドの所有物になってしまう 本来の理想は… ▪ API はフロントエンドのものでもバックエンドのものでもない ▪ i/f を決めるのがどちらか一方であってはいけない しかし現実の多くのケースは… ▪ (ここはオフレコでしゃべるだけで…) 解決するためには… ▪ (ここもオフレコで…) 私の見解
Mobility Technologies Co., Ltd. 11 表現力の豊かな Rust ではコードファーストが⭕ ただし… ▪
(オフレコで…) 結論