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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
patorash
November 30, 2019
Programming
1
680
RailsアプリにGraphQLを導入してみた話
会社で運用しているWebサービスにGraphQLを導入してみたので、その際に得られた知見を共有します。
patorash
November 30, 2019
Tweet
Share
More Decks by patorash
See All by patorash
中間管理職はそこそこ楽しい
patorash
0
28
情報共有戦略と戦術
patorash
1
1.3k
exists?で起きるN+1問題にSetで対処する
patorash
0
810
DBのメタデータを管理する文化を作る
patorash
0
680
Stimulusのススメ
patorash
0
85
ActiveRecordの速度改善Tips2020冬
patorash
0
78
わかった気になる!OpenID Connect
patorash
2
2.2k
Indexの種類
patorash
1
810
Start-SQLの紹介
patorash
0
750
Other Decks in Programming
See All in Programming
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.3k
TipKitTips
ktcryomm
0
170
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
220
エージェント開発初心者の僕がエージェントを作った話と今後やりたいこと
thasu0123
0
250
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
160
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
290
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
250
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
150
How to stabilize UI tests using XCTest
akkeylab
0
130
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
390
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
510
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
550
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
150
Prompt Engineering for Job Search
mfonobong
0
190
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Evolving SEO for Evolving Search Engines
ryanjones
0
150
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
71
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
680
Code Review Best Practice
trishagee
74
20k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
480
We Have a Design System, Now What?
morganepeng
55
8k
Site-Speed That Sticks
csswizardry
13
1.1k
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