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
RailsアプリにGraphQLを導入してみた話
Search
patorash
November 30, 2019
Programming
1
640
RailsアプリにGraphQLを導入してみた話
会社で運用しているWebサービスにGraphQLを導入してみたので、その際に得られた知見を共有します。
patorash
November 30, 2019
Tweet
Share
More Decks by patorash
See All by patorash
情報共有戦略と戦術
patorash
1
1.2k
exists?で起きるN+1問題にSetで対処する
patorash
0
730
DBのメタデータを管理する文化を作る
patorash
0
590
Stimulusのススメ
patorash
0
68
ActiveRecordの速度改善Tips2020冬
patorash
0
65
わかった気になる!OpenID Connect
patorash
2
1.9k
Indexの種類
patorash
1
740
Start-SQLの紹介
patorash
0
680
Other Decks in Programming
See All in Programming
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
340
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
220
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
940
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
1
150
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
400
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
270
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
3
300
testcontainers のススメ
sgash708
1
120
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
Side Projects
sachag
452
42k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Being A Developer After 40
akosma
87
590k
A Tale of Four Properties
chriscoyier
157
23k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Transcript
3BJMTΞϓϦʹ(SBQI2-Λ ಋೖͯ͠Έͨ ߹ಉษڧձ JOେձԬࢁ 8JOUFS גࣜձࣾϦκʔϜ ඌݹ ๛໌
࣍ ࣗݾհ 3&45GVM"1*ͷ՝ (SBQI2-ͱʁ σϞ
։ൃͯ͠Έͯͷײ B ϝϦοτ C σϝϦοτ D ͨ͠ͱ͜Ζ E ϋϚͬͨϙΠϯτ ·ͱΊ 2
ࣗݾհ ໊લɿඌݹ ๛໌ UXJUUFSɿ !QBUPSBTI ॴଐɿגࣜձࣾϦκʔϜ γεςϜ։ൃ෦ ৬ɿઐ৬ ࣄ༰ɿ γϣοϐϯάηϯλʔʹؔ࿈͢ΔαʔϏε։ൃ
3VCZPO3BJMTͰࣗࣾαʔϏεͷ։ൃɾӡ༻ʢʣ 3
3&45GVM"1*ͷ՝ 4
3&45ͱʁ 3&45ͱɺʹ3PZ'JFMEJOHࢯ͕ఏএͨ͠ɺࢄγεςϜʹ͓͍ͯෳͷ ιϑτΣΞΛ࿈ܞͤ͞Δͷʹదͨ͠ઃܭݪଇͷू߹ɻ·ͨɺڱٛʹɺͦΕΛ 8FCʹద༻ͨ͠ιϑτΣΞͷઃܭ༷ࣜͷ͜ͱɻҰൠʹޙऀͷҙຯͰ༻͍ΒΕ Δ͜ͱ͕΄ͱΜͲͰ͋Δɻ ҰൠʹΑ͘ΘΕΔڱٛͷ3&45ɺύϥϝʔλΛࢦఆͯ͠ಛఆͷ63-ʹ)551 ͰΞΫηε͢Δͱɺ9.-Ͱهड़͞Εͨϝοηʔδ͕ૹΒΕͯ͘ΔΑ͏ͳγεςϜ ͓Αͼݺͼग़͠ΠϯλʔϑΣʔεʢʮ3&45GVM"1*ʯͱݺΕΔʣͷ͜ͱΛࢦ͢ɻ γεςϜͷঢ়ଶηογϣϯʹґଘͤͣɺಉ͡63-ύϥϝʔλͷΈ߹Θ͔ͤ Βৗʹಉ݁͡Ռ͕ฦ͞ΕΔ͜ͱ͕ظ͞ΕΔɻ
5 IT用語辞典 より引用 http://e-words.jp/w/REST.html
3&45ͱʁ 63-ಉ͕ͩ͡ɺ)551ϝιουʹΑͬͯॲཧΛΓସ͑Δɻ γϯϓϧͰ͔Γ͍͢ʂ (&5 Ұཡऔಘ BSUJDMFT ৄࡉऔಘ BSUJDMFT 1045 ৽ن࡞
BSUJDMFT 1"5$) ߋ৽ BSUJDMFT %&-&5& আ BSUJDMFT 6
3&45GVM"1*ͷ՝ BSUJDMFT BSUJDMFTDPNNFOUT BSUJDMFTDPNNFOUT VTFST BSUJDMFTDPNNFOUT VTFST ʜ BSUJDMFTDPNNFOUT VTFST
7 ௨৴ճ͕ଟ͘ͳΓ͕ͪ ˞࡞Γํ࣍ୈͰ͋Δ͚ΕͲɺ3&45 ͳઃܭͰ͍͑ʜ { “id”: 1, “user_id”: 1, “article_id”: 1, “content”: “この分野は素人なのですが…略”, “created_at”: “2019-11-23 00:00:00”, } { “id”: 10, “user_id”: 5, “article_id”: 1, “content”: “わかるぅ~”, “created_at”: “2019-11-23 06:00:00”, }
3&45GVM"1*ͷ՝ BSUJDMFT BSUJDMFTDPNNFOUT BSUJDMFTDPNNFOUT VTFST BSUJDMFTDPNNFOUT VTFST ʜ BSUJDMFTDPNNFOUT VTFST
8 ௨৴ྔଟ͘ͳΓ͕ͪ l ຊདྷ͏ͷ Ϣʔβ໊ͱϝʔϧΞυϨεͷΈ l ༨ܭͳใ·Ͱૹͬͯ͠·͏ { “id”: 1, “name”: “Yamada Taro”, “email”: “
[email protected]
”, “role_id”: 1, “battle_power”: 530000, “created_at”: “2019-11-22 00:00:00”, “updated_at”: “2019-11-30 00:00:00” } ෆཁʂ
3&45GVM"1*ͷ·ͱΊ l 63-͕ඇৗʹ໌շ l ֊ͷਂ͍σʔλΛऔಘ͠Α͏ͱ͢Δͱ / ճͷ௨৴ճ͕ൃੜ l ར༻͢ΔσʔλҎ֎ͷσʔλૹ৴ l
࠷ۙͷ8FCΞϓϦέʔγϣϯϑϨʔϜϫʔΫ େମ3&45Λαϙʔτ 9
(SBQI2- 10
(SBQI2-ͱʁ l 'BDFCPPL͕։ൃ͍ͯ͠Δ8FC"1*ͷͨΊͷن֨ l ΫΤϦݴޠͱεΩʔϚݴޠ͔ΒΔ ˓ ΫΤϦݴޠ ˙ σʔλऔಘܥͷRVFSZ ˙
σʔλߋ৽ܥͷNVUBUJPO ˙ Πϕϯτ௨ͷTVCTDSJQUJPO ˓ εΩʔϚݴޠ ˙ ༷Λ໌ه͢ΔͨΊͷݴޠ ˔ ܕ͚ l (JU)VC"1*WͰ(SBQI2-Λ࠾༻ 11
(SBQI2-ͷಛ l ΫΤϦͷड͚ޱ͕ͭʢHSBQIRMͷΈʣ ˓ 3&45ͦΕͧΕϦιʔεຖʹ63-͕ଘࡏ͢Δ l શͯ)551ϝιουͷ1045Ͱड͚͚Δ ˓ σʔλͷऔಘͰ͋ͬͯɺ1045 ˓
˞ௐͨΒɺ(&5ͰͰ͖͚ͨΕͲɺ͋·Γݱ࣮తͰͳ͔ͬͨ 12
(SBQI2-Λௐࠪ RVFSZ 13 l ΫϥΠΞϯτ͕ཉ͍͠ σʔλͷΈऔಘ l Ұͷ"1*ίʔϧͰશͯ औಘՄೳ l
σʔλ͕݅ଟ͍߹ɺ ϦϨʔΛఆٛͯ͠ࢦఆ݅ຖ ʹऔಘ͢Δ͜ͱՄೳ query { article(id: 1) { id title content status createdAt updatedAt comments { id content user { id name email } } } }
(SBQI2-Λௐࠪ NVUBUJPO 14 l σʔλߋ৽༻ΫΤϦ l ΓRVFSZͱಉ༷ͷ ϑΥʔϚοτͰऔಘՄೳ mutation {
creatArticle(input: { title: "タイトル", content: "内容", status: 1, userId: 1 }) { article { id title content status user { id name } } } }
σϞ 15
։ൃΛͯ͠Έͯͷײ 16 l ϝϦοτ l σϝϦοτ l ͨ͠ͱ͜Ζ l ϋϚͬͨͱ͜Ζ
։ൃΛͯ͠ΈͯͷײʢϝϦοτʣ l εΩʔϚఆٛͱಉ࣌ʹ"1*υΩϡϝϯτ͕ ˓ ΫϥΠΞϯτଆͷ։ൃऀͱڞ༗ l ςετ͕༰қ ˓ εΩʔϚఆٛϑΝΠϧΛରʹςετ ˓
&&ͷςετͰͳ͍ͷͰߴ l σʔλ͕ҰൃͰऔΕΔշײ ˓ σʔλऔಘʹΫϥΠΞϯτଆʹओಋݖ͕͋Δ l "1*ͷೖΓޱΛҰຊԽ ˓ HSBQIRMͷΈ 17
։ൃͯ͠ΈͯͷײʢσϝϦοτʣ l εΩʔϚఆٛ͢Δͷ͕େม ˓ ϝλϓϩάϥϛϯάՄೳ͕ͩɺεΩʔϚఆٛΛϝλϓϩ͍͍ͯ͠ͷ͔ʁ ͱ͍͏౻͕ʜ l / ͕ൃੜ͍͢͠ ˓
ͨͩ͠ɺϥΠϒϥϦͰղܾՄೳ ˓ औಘՄೳͳ߲͕ಈత ˙ ΫϥΠΞϯτଆ͕ཉ͍͠σʔλΛܾఆ͢ΔͨΊ ˙ ࣄલʹϩʔυͰ͖ͳ͍ l Ωϟογϡͮ͠Β͍ ˓ Ͳ͏͍͏σʔλΛฦ͔͢ɺΫϥΠΞϯτ࣍ୈͷͨΊ ˓ 3&45GVM"1*ͳΒɺฦ͕ܾ͢·͍ͬͯΔͨΊɺΩϟογϡ͕ޮ͘ l ֶशίετ ˓ 3&45GVM"1*ϑϨʔϜϫʔΫͷԆ্ʹ͋Δ ˓ (SBQI2-ͦ͏Ͱͳ͍ 18
3&45ͱʁ 3&45ͱɺʹ3PZ'JFMEJOHࢯ͕ఏএͨ͠ɺࢄγεςϜʹ͓͍ͯෳͷ ιϑτΣΞΛ࿈ܞͤ͞Δͷʹదͨ͠ઃܭݪଇͷू߹ɻ·ͨɺڱٛʹɺͦΕΛ 8FCʹద༻ͨ͠ιϑτΣΞͷઃܭ༷ࣜͷ͜ͱɻҰൠʹޙऀͷҙຯͰ༻͍ΒΕ Δ͜ͱ͕΄ͱΜͲͰ͋Δɻ ҰൠʹΑ͘ΘΕΔڱٛͷ3&45ɺύϥϝʔλΛࢦఆͯ͠ಛఆͷ63-ʹ)551 ͰΞΫηε͢Δͱɺ9.-Ͱهड़͞Εͨϝοηʔδ͕ૹΒΕͯ͘ΔΑ͏ͳγεςϜ ͓Αͼݺͼग़͠ΠϯλʔϑΣʔεʢʮ3&45GVM"1*ʯͱݺΕΔʣͷ͜ͱΛࢦ͢ɻ γεςϜͷঢ়ଶηογϣϯʹґଘͤͣɺಉ͡63-ύϥϝʔλͷΈ߹Θͤ ͔Βৗʹಉ݁͡Ռ͕ฦ͞ΕΔ͜ͱ͕ظ͞ΕΔɻ
19 IT用語辞典 より引用 http://e-words.jp/w/REST.html キャッシュ可能!!
։ൃͯ͠ΈͯͷײʢσϝϦοτʣ l εΩʔϚఆٛ͢Δͷ͕େม ˓ ϝλϓϩάϥϛϯάՄೳ͕ͩɺεΩʔϚఆٛΛϝλϓϩ͍͍ͯ͠ͷ͔ʁ ͱ͍͏౻͕ʜ l / ͕ൃੜ͍͢͠ ˓
ͨͩ͠ɺ3BJMTͳΒϥΠϒϥϦͰղܾՄೳ HSBQIRMCBUDI ˓ औಘՄೳͳ߲͕ಈత ˙ ΫϥΠΞϯτଆ͕ཉ͍͠σʔλΛܾఆ͢ΔͨΊ ˙ ࣄલʹϩʔυͰ͖ͳ͍ l Ωϟογϡͮ͠Β͍ ˓ Ͳ͏͍͏σʔλΛฦ͔͢ɺΫϥΠΞϯτ࣍ୈͷͨΊ ˓ 3&45GVM"1*ͳΒɺฦ͕ܾ͢·͍ͬͯΔͨΊɺΩϟογϡ͕ޮ͘ l ֶशίετ ˓ 3&45GVM"1*8FCϑϨʔϜϫʔΫͷԆ্ʹ͋Δ ˓ (SBQI2-ͦ͏Ͱͳ͍ 20
։ൃΛͯ͠Έͯͷײʢͨ͠ϙΠϯτʣ l ΞΫηεݖݶνΣοΫ ˓ ࿈ܞΞϓϦέʔγϣϯʹΑͬͯ औಘ/(ͳϦιʔε͋Γ ˓ %#͔ΒϦιʔεͷσʔλऔಘ ޙʹνΣοΫͰ͍ ˓
ΫΤϦΛղੳɻऔಘ͠Α͏ͱ͠ ͍ͯΔϦιʔεΛಛఆ ˙ ݖݶ͕ͳ͚Ε ͜ͷ࣌Ͱ͘ ˓ ΫΤϦղੳॏ͍ ˙ NVUBUJPOআ֎ 21 query searchScSomeOne($scId: ID!){ sc(id: $scId) { name shopBrands { name shopCompany { name } } } } アクセス権限のない リソースの取得を検知!
։ൃ͍ͯͯ͠ͷײʢϋϚͬͨϙΠϯτʣ l NVUBUJPOʹΑΔόϧΫΠϯαʔτɾΞοϓσʔτΛ ߦͳ͍͍ͬͯͷ͔ʁ ˓ ΫΤϦʹผ໊Λ͚ͭΔ͜ͱ͕Մೳ ˓ ͷίʔϧͰෳͷNVUBUJPOΫΤϦΛฒͯόϧΫΠϯαʔτ ͢Δ͜ͱࣗମͰ͖ͨ ˓
͔͠͠ɺݸผʹNVUBUJPOͷॲཧ࣮ߦ ˙ τϥϯβΫγϣϯ͕ޮ͔ͳ͍ ˓ ΫΤϦղੳΛߦͬͯɺόϧΫΠϯαʔτͰ͋Δ͜ͱΛݕͨ͠Βɺ τϥϯβΫγϣϯΛൃߦ͢Δ͜ͱग़དྷͦ͏͕ͩʜ ˙ Ͱ͖Δ͔Β͍͍͔ͬͯͱݴΘΕΔͱɺҧ͏ؾ͕͢Δ ˙ σϑΥϧτͷ(SBQI2-ͦ͏͍͏ಈ࡞Λظ͍ͯ͠Δͷ͔ʁ ˓ JTTVFΛൃݟ ˙ όϧΫΠϯαʔτ༻ͷNVUBUJPOΛఆٛ͠·͠ΐ͏ɺͱ͍͏݁ ˙ ͨͩ͠ɺ্༷ɺෳͷNVUBUJPOΛฒΔͷ0, 22
·ͱΊ l (SBQI2-"1*ͷίʔϧճΛݮ l σʔλ௨৴ྔΛݮ l εΩʔϚݴޠͰܕͷఆ͕ٛՄೳ l ςετ͕༰қ l
͍͍͜ͱ͔ΓͰͳ͍ ˓ ֶशίετ3&45GVM"1*ʹൺΔͱߴ͍ ˓ Ωϟογϡ͕ޮ͔ͤʹ͍͘ ˓ / ͕ൃੜ͍͢͠ 23
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 24
ࢀߟࢿྉ 25 ˔ ʮ(SBQI2-ʯపఈೖ ᴷ3&45ͱͷൺֱɺ"1*ɾϑϩϯτํͷ࣮͔ΒֶͿ IUUQTFNQMPZNFOUFO KBQBODPNFOHJOFFSIVCFOUSZ(SBQI2-&"&"' &#%&# ˔ (SBQI2-3VCZ
IUUQTHSBQIRMSVCZPSH