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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
森井ゴンザレス
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.8k
Lokka についての LT
morygonzalez
0
460
BitBar で快適な生活
morygonzalez
1
3.9k
君も Arel おじさんになって ActiveRecord のクエリを高速化しよう / Let's become Uncle Arel
morygonzalez
1
320
gyowitter のご紹介
morygonzalez
0
34k
Other Decks in How-to & DIY
See All in How-to & DIY
なぜISPでオリジナルカードゲームを作ったのか?制作者と対談 - NIFTY Tech Talk #25
niftycorp
PRO
0
110
AWS Summit Japan 2025 個人的参加レポート
midnight480
0
420
JAWS-UG/AWS Communities Updates 2025/11/8 JAWS-UG 島根支部
awsjcpm
1
160
スイングやカードをいい感じに立てるスタンドの話
niccolli
1
470
Node-REDで制御できるエッジカメラのreCameraを触る #iotlt #JLCPCB #recamera
n0bisuke2
0
190
JAWS-UG/AWS Community Update 彩の国埼玉支部1周年記念
awsjcpm
1
120
JAWS-UG鹿児島2.0 reboot - JAWS-UG/AWS Communitiesのご紹介
awsjcpm
0
110
JAWS-UG/AWSコミュニティ -JAWS-UGくまもと#16
awsjcpm
1
230
JAWS-UG/AWSコミュニティプログラムのご紹介 - JAWS-UG 佐賀
awsjcpm
2
270
「変えること」「変わること」を楽しむ力で"敵わない存在"と向き合う
subroh0508
2
1.6k
画面の向こうから「気づき」を得る 画面の向こうを「物差し」として捉える
subroh0508
1
350
OpenClawハンズオンでのトラブルとデバイス向けなんちゃらクロー #IoTLT vol133
n0bisuke2
0
270
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Designing for Timeless Needs
cassininazir
1
260
Building Applications with DynamoDB
mza
96
7.1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
240
Discover your Explorer Soul
emna__ayadi
2
1.1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
400
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
ラッコキーワード サービス紹介資料
rakko
1
3.8M
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
450
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
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