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 application development in API era
Search
森井ゴンザレス
September 26, 2018
How-to & DIY
570
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rails application development in API era
API 時代の Rails アプリケーション開発について軽い話をしました
森井ゴンザレス
September 26, 2018
More Decks by 森井ゴンザレス
See All by 森井ゴンザレス
CI/CD がなかった会社で勝手に CI/CD を始めた話 (仮)
morygonzalez
0
200
Product Manager の Job Description
morygonzalez
3
2.9k
Lokka についての LT
morygonzalez
0
460
BitBar で快適な生活
morygonzalez
1
4k
君も Arel おじさんになって ActiveRecord のクエリを高速化しよう / Let's become Uncle Arel
morygonzalez
1
330
gyowitter のご紹介
morygonzalez
0
34k
Other Decks in How-to & DIY
See All in How-to & DIY
Linuxが動く自作SBCを作る話.pdf
daimiya
1
880
JAWS/AWS Community Updates in JAWS-UG富山 at 富山高専
awsjcpm
0
110
2025版 鯖落ちパーツで安価に機械学習用マシンを作ってみる
bobfromjapan
0
1k
EjecTea 2026 / 20260228-osc26tk-ejectea
akkiesoft
0
1k
スマートハウスの蓄電性能の効率化を実現してみた~電気自動車編~
runrunsan
0
590
「変えること」「変わること」を楽しむ力で"敵わない存在"と向き合う
subroh0508
2
3.4k
2026年、書籍をちゃんと読むぞ👊 〜約3万円分の書籍を積読にしないためにやること〜
subroh0508
5
910
JAWS-UG 山梨 第10回 勉強会 Community Update
awsjcpm
0
1.1k
なぜJAWS-UGはこんなにも活発なのか?
awsjcpm
1
270
OSSコミュニティがくれた「人との繋がり」
tanahiro2010
2
440
10分de名コミュ “最高の自分”を演じ憧れの同業者と渡り合う
subroh0508
1
680
M5StickS3触ってXiaoZhiAI触ってみた #にぼし香 #iotlt
n0bisuke2
0
310
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
510
The World Runs on Bad Software
bkeepers
PRO
72
12k
Become a Pro
speakerdeck
PRO
31
6.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
What's in a price? How to price your products and services
michaelherold
247
13k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
690
Between Models and Reality
mayunak
4
450
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Transcript
API ࣌ͷ Rails @morygonzalez at Fukuoka.rb #107
ࣗݾհ • @morygonzalez • pyama YAMAP ͱ͍͏ձࣾͰ Rails Τϯ δχΞΛ͍ͯ͠·͢
• ৭ؾΛग़ͯ͠Πϯϑϥ͍ͬͯ·͢ @morygonzalez at Fukuoka.rb #107
@morygonzalez at Fukuoka.rb #107
Mobile ΞϓϦ͋Δ͠ F/E ͷਓ Nuxt.js ͱ͔͍͕ͨΔͷͰແཧͰ ͢ ! @morygonzalez at
Fukuoka.rb #107
Client ͕ Rails way ʹࡌͬͯ͘Εͳ͍ • iOS ΞϓϦ • Android
ΞϓϦ • Web F/E Client ͕͛ͯ͘Δ params ͕ ActiveRecord ͕ظ͢Δ͔ͨͪͰདྷ ΔͱݶΒͳ͍ɻ @morygonzalez at Fukuoka.rb #107
Majestic Monolith ™ ࣌ͷ Rails • View ·Ͱ Rails Ͱ࡞Δ͜ͱ͕લఏ
• View ͔Β ActiveRecord ͕ѻ͍͍͢͠ Parameter ͔ͬͯ͠ ͜ͳ͍ • Model ʹϦΫΤετύϥϝʔλʔΛͦͷ··ೖͯ͠ͳ ͍ @morygonzalez at Fukuoka.rb #107
ղܾํ๏ @morygonzalez at Fukuoka.rb #107
params ͍͍ײ͡ʹͯ͘͠ΕΔ܅ Client ͕͛ͯ͘Δ params Λ ActiveRecord ͕ཉ͍͔ͨͪ͠ʹม ͯ͘͠ΕΔΫϥε͕͋Δͱศརɻ͓͠ΌΕʹݴ͏ͱ Form
Object ͱ͍͏ͭɻ @morygonzalez at Fukuoka.rb #107
ղܾࡦ 1 • ฐࣾͰ app/parameters/ σΟϨΫτϦΛ۷ͬͯ UserParameter Έ͍ͨͳΫϥεΛఆٛ͠ɺͦ͜ͰΑ͠ͳʹ Δ͜ͱʹ͠·ͨ͠ɻ •
StrongParameter ͰΔ͜ͱͷ͍ͭͰʹϦΫΤετϘσΟΛ ActiveRecord ͕ظ͢Δ͔ͨͪʹม͑ͪΌ͏ ʢ Client ͕͛ͯ͘Δ͍Βͳ͍ใࣺͯΔʣ class UserParameter < ApplicationParameter attr_parameter :name, :email, :password, :provider, :oauth_token, :device_id, :code, :redirect_uri def oauth_token @params[oauth_config&.token_field_name&.to_sym] end private def oauth_config return unless @params[:provider] Settings.oauth.send(@params[:provider]) end end @morygonzalez at Fukuoka.rb #107
ղܾࡦ 2 ଞʹྺ࢙తͳࣄͰཧআͬͯͨΓ Collection ΦϒδΣΫτ ͷߋ৽Λͯ͢ DELETE INSERT ʹͨ͠Γ͠ͳ͍ͱ͍͚ͳͯ͘ɺ͢ ͯͷҋΛٵऩ͢Δ
AcceptNestedAttributesCustamizable ͱ ͍͏໊͍લͷϞδϡʔϧ͋Γ·͢… @morygonzalez at Fukuoka.rb #107
Partial Cache Ͱ͓Λͤͳ͍ @morygonzalez at Fukuoka.rb #107
Majestic Monolith ™ ࣌ͷ Rails • ! ʮ͜͜ͷ͜·͍෦ͷใΛදࣔ͢ΔͨΊʹεϩʔΫΤϦ͕ ग़ͪΌ͏ͳʙʯ •
" ʮύʔγϟϧΩϟογϡͰΑ͘Ͷʁʯ গʑεϩʔΫΤϦ͕ग़ͯ͠·ͬͨͱͯ͠ύʔγϟϧΩϟογϡ ʢ View ͷ෦Ωϟογϡʣʹಀ͛Δ͜ͱͰ͓Λ͢͜ͱ͕Ͱ͖ ͨɻ @morygonzalez at Fukuoka.rb #107
API ࣌ͷ Rails • ! ʮ͜͜ͷ͜·͍෦ͷใΛදࣔ͢ΔͨΊʹεϩʔΫΤϦ͕ ग़ͪΌ͏ͳʙʯ • " ʮrender
:json ͢Δͱ͖Ωϟογϡ͢Δͱ͔ਖ਼ؾͰ͢ ͔ʁʯ ActiveModel Serializer ͳͲΛ͍ Rails ϞσϧͷσʔλΛγϦΞ ϥΠζ͢Δ܅ͱԽͯ͠͠·ͬͨͷͰ View ͷ෦ͰదʹΩϟο γϡ͢Δ͜ͱ͕Ͱ͖ͳ͍ɻ @morygonzalez at Fukuoka.rb #107
ྫ͑ Kaminari ͷ COUNT ݁ՌΛ Ωϟογϡ͢Δ @morygonzalez at Fukuoka.rb #107
Kaminari ͱʁ • ϖʔδωʔγϣϯͷ gem ʹ༗໊ͳ gem Ͱ͢ • API
࣌ͰݱͰɺ JSON ʹ meta ใͱͯ͠ϖʔδωʔγϣ ϯ݁ՌΛ͚ͬͭͨ͘Γ͠·͢ @morygonzalez at Fukuoka.rb #107
Kaminari ͕ग़͢ COUNT จ͕͍ • Ͱ͔͍ςʔϒϧʹରͯ͠͏ͱ COUNT จ͕͘ͳΔͱ͍͏ݱ ͕͋Γɺ Issue
͕Γ্͕ͬͯ· • paginate calls slow COUNT query for large sets (when it might not need to) · Issue #545 · kaminari/kaminari @morygonzalez at Fukuoka.rb #107
͜͏ͨ͠οε Controller Ͱ render :json ͢Δͱ͖ʹ :cache_total_count Φϓ γϣϯΛड͚औΕΔΑ͏ʹͯ͠ɺΩϟογϡ͢Δ͔൱͔ΛܾΊ Δɻ
def index activities = policy_scope(Activity.active).published.with_relations.order(id: :desc) render json: activities, paginate: true, cache_total_count: true end @morygonzalez at Fukuoka.rb #107
͜͏ͨ͠οε ंྠͷ࠶ൃ໌ײ͋Δ Paginator ΫϥεΛ࡞ ͠ɺ :cache_total_count ͷϑϥάΛݟͯ Rails.cache ʹ͍ ΫΤ
Ϧ Λग़͢ total_count ͷ݁ՌΛΩϟογϡͨ͠ΓऔΓग़ͨ͠Γ͢ Δɻ ৄ͘͠ϒϩάʹॻ͖·ͨ͠ͷͰ͝ཡԼ͍͞ɻ Kaminari ͕ൃߦ͢Δ͍ COUNT ΫΤϦͷ݁ՌΛΩϟογϡ͢Δ - portal shit! @morygonzalez at Fukuoka.rb #107
·ͱΊ • ೦ͳ͕Β Rails API ࣌ʹͳͬͯҎલ΄ͲศརͰͳ͘ͳͬ ͨ gem Λ͍͔ͭ͘ೖΕͨΒԿͱͳ͘࡞Εͯͨ࣌ऴΘͬͨͬΆ
͍ • ͱ͍͑ Ruby ͷ Productivity ࠷ߴͰ͢ʢΩϝΔͱؾ͍࣋ͪ ͍ʣ • ࣃΛ৯͍ͬͯ͠ؤுΓ·͠ΐ͏ @morygonzalez at Fukuoka.rb #107