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
SchemaDrivenDevelopment
Search
atomiyama
March 24, 2021
Technology
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SchemaDrivenDevelopment
atomiyama
March 24, 2021
More Decks by atomiyama
See All by atomiyama
Rustでgemを作ろう
atomiyama
0
1.6k
ffi & native extension
atomiyama
0
270
技術選定で失敗したはなし
atomiyama
0
1.4k
はじめてのDocker
atomiyama
0
120
Other Decks in Technology
See All in Technology
Snowflakeと仲良くなる第一歩
coco_se
4
470
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
190
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
Chainlitで作るお手軽チャットUI
ynt0485
0
240
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
680
How Timee Delivers Day 1 Production Ready LLM Features
tomoyks
0
230
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
240
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1k
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
180
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
750
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
1.9k
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
3.6M
The Curious Case for Waylosing
cassininazir
1
390
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
780
Designing for Performance
lara
611
70k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
Context Engineering - Making Every Token Count
addyosmani
9
960
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Code Reviewing Like a Champion
maltzj
528
40k
We Have a Design System, Now What?
morganepeng
55
8.2k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
The SEO Collaboration Effect
kristinabergwall1
1
480
Transcript
Copyright 2018 Studyplus, Inc. All Rights Reserved. OpenAPIΛ༻͍ͨεΩʔϚۦಈ։ൃ Akifumi Tomiyama
/ Studyplus Inc . 2021.03.24 @γϡʔϚΠʂ
ࣗݾհ ✎ 2018/09~ Studyplusೖࣾ ✎ 29ࡀ ✎ ؠखݝࡏॅ ✎ ͖ͳݴޠɿRuby,
Rust ࢁথ࢙ Akifumi Tomiyama atomiyama atomiyama1216 Studyplus Inc. ForSchool Dept. CX Product Group Team Lead.
ձࣾհ About Us
MISSION ʮֶͿتͼΛͯ͢ͷਓʯ ଟ͘ͷਓ͕StudyplusΛ௨ֶͯ͡शͷ͖͔͚ͬΛݟ͚ͭɺ ֶशΛָ͘͠ܧଓͰ͖Δ͜ͱΛ࣮ݱ͢Δɻ
ֶशهͷՄࢹԽͱɺಉ͡ඪΛࢦؒ͢ͱͷSNSͰϞνϕʔγϣϯΛܧଓͰ͖·͢ɻ ΞϓϦϨϏϡʔฏۉ4.5Ҏ্ɻGoogle Play2࿈ଓϕετΞϓϦɺຊe-Learningେʢ࠷༏लʣͳͲडଟɻ ʮຖͷษڧΛश׳ʹͰ͖ͳ͍ʯΈΛղܾ
ࢀߟॻಡΈ์ΞϓϦͷϙϧτɺ डݧੜʹਓؾͷࢀߟॻΛֹ݄980ԁʢ੫ผʣͰεϚϗͰಡΈ์ͷɺిࢠࢀߟॻͷαϒεΫϦϓγϣϯαʔϏεͰ͢ɻ ਓؾࢀߟॻΛεϚϗͰಡΈ์ͷɺిࢠࢀߟॻΞϓϦ
Studyplus for Schoolɺڭҭػֶ͚ؔशཧαʔϏεͰ͢ɻ ੜెͷʑͷྗΛɺؾ͖ͮɺ๙ΊΔػೳΛଟἧ͍͑ͯ·͢ɻ SNSͷΑ͏ͳૢ࡞ײͰɺ ୭Ͱ͙͢ʹ͍͡ΊΒΕ·͢ɻ ઌੜ͕ੜెΛ๙ΊΔػձΛ࠷େԽ͢Δɺֶशक़ͷ৽͍͠ελϯμʔυ
OpenAPIΛ༻͍ͨεΩʔϚۦಈ։ൃ Schema Driven Development
͢͜ͱ • OpenAPI 3.0ͱcommitteeΛͬͨ։ൃͷ • εΩʔϚۦಈ։ൃͷྲྀΕ • εΩʔϚϑΝΠϧཧ • ࠓ๊͍͑ͯΔ՝
Studyplus for SchoolͷγεςϜ • APIαʔόʔ • Rails • ΫϥΠΞϯτ •
React • Elm • Next.js
Studyplus for Schoolͷ։ൃମ੍ • εΫϥϜ։ൃ • 9໊ମ੍ • 2week /
sprint • ։ൃϝϯόʔ • 6໊
Studyplus for Schoolͷ։ൃϑϩʔ ͜͜ΛظؒͰਐΊΔ
چ࣮ϑϩʔ ͜͜ͷͪ࣌ؒΛ࠷খԽ͢Δ ͜͜ͷखΓΛݮΒ͢
ݱߦͷ࣮ϑϩʔ API։ൃஈ֊ͰFBΛ ड͚Δ͜ͱ͕Ͱ͖ɼ खΓ͕গͳ͘ࡁΉ APIͷຊ࣮Λ ͨͣϑϩϯτ։ൃΛ ։࢝Ͱ͖Δ
͍ͬͯΔπʔϧ OpenAPI 3.0 REST APIΛఆٛ͢ΔͨΊඪ४༷ Swagger UI APIεΩʔϚͷ֬ೝ
Gems • committee ϦΫΤετɼϨεϙϯεόϦσʔγϣϯɼςετΞαʔγϣϯ • json_refs ෳϑΝΠϧཧ࣌ͷrefͷղܾ
Copyright (C) 2017 Studyplus, Inc. All Rights Reserved. Confidential APIઃܭ
APIεΩʔϚఆٛ • OpenAPIͷ༷ʹԊͬͯهड़ • yaml • ίϯτϩʔϥͷΞΫγϣϯʹ ରͯ͠1ϑΝΠϧͣͭʹׂ • ύϥϝʔλΤϥʔϨεϙϯ
εͳͲ࠶ར༻ՄೳͳΑ͏ʹ ڞ௨Խ
APIεΩʔϚఆٛϑΝΠϧཧ • main.yaml ΞϓϦέʔγϣϯͷఆٛʢೝূͳͲ • paths.yamlɼpath/* ΤϯυϙΠϯτͷఆٛ •
schemas.yaml, schemas/* ϦιʔεͷఆٛʢϞσϧͱରԠ • parameters.yaml, parameters/* ڞ௨ύϥϝʔλͷఆٛ • responses.yaml, responses/* ڞ௨Ϩεϙϯεͷఆٛ > tree -L 3 swagger/api/v1 ├── components │ ├── schemas.yaml │ ├── parameters.yaml │ ├── responses.yaml │ ├── parameters │ │ ├── section_id.yaml │ │ └── student_id.yaml │ ├── schemas │ │ ├── section.yaml │ │ └── student.yaml ├── paths │ └── sections │ └── index.yaml ├── paths.yaml └── main.yaml
APIεΩʔϚఆٛϑΝΠϧཧ
APIεΩʔϚఆٛϑΝΠϧཧ • main.yaml ΞϓϦέʔγϣϯͷఆٛʢೝূͳͲ • paths.yamlɼpath/* ΤϯυϙΠϯτͷఆٛ •
schemas.yaml, schemas/* ϦιʔεͷఆٛʢϞσϧͱରԠ • parameters.yaml, parameters/* ڞ௨ύϥϝʔλͷఆٛ • responses.yaml, responses/* ڞ௨Ϩεϙϯεͷఆٛ > tree -L 3 swagger/api/v1 ├── components │ ├── schemas.yaml │ ├── parameters.yaml │ ├── responses.yaml │ ├── parameters │ │ ├── section_id.yaml │ │ └── student_id.yaml │ ├── schemas │ │ ├── section.yaml │ │ └── student.yaml ├── paths │ └── sections │ └── index.yaml ├── paths.yaml └── main.yaml
APIεΩʔϚఆٛϑΝΠϧཧ • JSONͰεΩʔϚΛฦ͢APIΛ࣮ • swagger-uiͰ͜ΕΛӾཡ͢Δ
Copyright (C) 2017 Studyplus, Inc. All Rights Reserved. Confidential ϞοΫAPIͷ࡞
ϞοΫAPIͷ࡞ • ͱΓ͋͑ͣಈ͘࠷খݶͷ࣮ 1.routeΛՃ 2.࠷ݶͷςετΛՃ 3.swagger-uiͷϨεϙϯεΛ ίϯτϩʔϥʹϕλషΓ͢Δ 4.ίʔυϨϏϡʔ
εΩʔϚʹաෆແ͍͔֬ೝʂ 5.mergeͯ͠σϓϩΠ
εΩʔϚόϦσʔγϣϯ • ࣮ͱεΩʔϚͷဃࢭ - request specͰอূ - ͯ͢ͷϨεϙϯε͕ఆٛͱဃ͠ ͍ͯͳ͍͔assert_schema_conform Ͱ֬ೝ
- ෳͷAPIʢ෦ެ։ɼ֎෦ެ։ʣ ͕͋ΔͷͰRSpecͷmetadataʹ OpenAPIఆٛϑΝΠϧύεΛࢦఆͰ ͖ΔΑ͏ʹ͍ͯ͠Δ
͜ͷ࣮ϑϩʔͰྑ͔ͬͨ͜ͱ • ϑϩϯτΤϯυ࡞ۀऀͷͪ࣌ؒΛݮͰ͖ͨ • ϞοΫAPIͷ࡞࡞ۀ1~2࣌ؒͰ݁Ͱ͖Δ • API࣮ͷखΓΛ࠷খԽͰ͖Δ • ຊ൪ڥద༻ޙʹमਖ਼͕ඞཁʹͳΔ͜ͱ͕ݮΒͤΔ •
։ൃॳظஈ֊͔Βαʔόʔͱϑϩϯτͷ࡞ۀऀͷೝࣝͷဃ͕ݮͬͨ • ϑϩϯτ࡞ۀऀͱαʔόʔ࡞ۀऀͰεΩʔϚϕʔεͰରͰ͖Δ
ݱঢ়ͷ՝ • enumͳͲͷʹରͯͯ͢͠ͷύλʔϯΛཏͨ͠ϞοΫAPIΛఏڙ͠ Α͏ͱ͢Δͱ໘ →ݱঢ়ϑϩϯτଆʹՃͰϕλॻ͖ͨ͠Γͯ͠ରԠ͍ͯ͠Δ • εΩʔϚࣗମͷόϦσʔγϣϯΛ͍ͯ͠ͳ͍ͷͰtypoͱ͔Λݟಀ͢ͱख Γ͕ൃੜ͢Δ
→validatorͷdocker image͕͋ΔͷͰCIͰνΣοΫ͢ΔΑ͏ʹ͍ͨ͠
࠷ޙʹએ We are hiring!!!
We’re Hiring! ΤϯδχΞืूத https://info.studyplus.co.jp/recruit
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠