Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
銀座Rails#1_uuushiro.pdf
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
uuushiro
September 20, 2018
Programming
1.6k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
銀座Rails#1_uuushiro.pdf
uuushiro
September 20, 2018
More Decks by uuushiro
See All by uuushiro
アウトカムに集中できる High Productivityなチームを目指して ~チームデザインとコラボレーションの取り組み事例~ / high productivity team focused on outcomes
uuushiro
0
1.5k
スタメンのLeSSの導入と 事業部全体を巻き込んだ アウトカム文化への道のり / Introduction of LeSS and outcome culture
uuushiro
2
8.8k
スタートアップのプロダクト成長の舞台裏とコンテナ化までの道のり
uuushiro
0
840
Railsメジャーバージョンアップを 安全にカナリアリリースする
uuushiro
2
3.4k
プロダクトに集中し続けるために 開発組織が向き合ってきた課題
uuushiro
1
310
エンゲージメント経営を支える TUNAGのETL基盤
uuushiro
0
200
TUNAG の ETL基盤 ~AWS Summit Startup Architecture of the year 2019~
uuushiro
2
5.2k
Ruby × AWS Lambdaで サーバーレスの導入~TUNAG分析基盤の事例をもとに~
uuushiro
2
3.3k
Other Decks in Programming
See All in Programming
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
golang-bob.pdf
iwatsukayura
0
130
APNsからLive Activityを開始する話
yumnumm
0
170
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
430
Railsバージョンを4倍にした話
optim
0
310
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
170
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
210
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
600
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Tell your own story through comics
letsgokoyo
1
1.1k
Building AI with AI
inesmontani
PRO
1
1.3k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Deep Space Network (abreviated)
tonyrice
0
370
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Transcript
RailsελʔτΞοϓ͕ ͬͯΑ͔ͬͨ͜ͱ ۜ࠲Rails#1 2018.09.20 גࣜձࣾελϝϯ @uuushiro
Copyright © stmn, inc. All rights reserved. Page !X ࣗݾհ
ϋϯυϧωʔϜ/ࢯ໊ @uuushiro / দ୩ ༐࢙࿕(·ͭͨʹ Ώ͏͠Ζ͏) ग़ ɹѪݝ ඌுѴࢢ (ݱॅॴ໊ݹࢢ) ੜ݄ ɹ1994/02/01 (24ࡀ) ུྺ ɹ2016 9݄ ελϝϯͰΠϯλʔϯ։࢝ ɹ2017 1݄ ελϝϯʹೖࣾ (৽ଔୈҰ߸) Rails ver 5.0.0 ͔Β৮Γ·ͨ͠ Raisྺ2
ձࣾ֓ཁ
Copyright © stmn, inc. All rights reserved. Page Ԋֵͱࣾһ !4
໊ ձһ ࣾһ ۀ 56/"( ЌϦϦʔε ౦ژࢧࣾ ࢿۚௐୡ ԯԁ 56/"( ਖ਼ࣜϦϦʔε ໊ݹຊࣾ ΦϑΟεҠస େࡕࢧࣾ 3BJMT 3VCZ
໊ݹຊࣾ
ϫʔΫεϖʔε
ࣄۀ
ʮ৫ΤϯήʔδϝϯτڧԽʯʹಛԽͨࣾ͠SNSαʔϏε
Copyright © stmn, inc. All rights reserved. Page ػೳ •
λΠϜϥΠϯɺϓϩϑΟʔϧɺνϟοτ Λඋ͑ͨɺϑϧػೳͷSNSɻͯࣗࣾ͢։ൃɻ • ҙͷ੍(ߘϑΥʔϜ)Λ࡞Δ͜ͱ͕Ͱ͖Δ (Google ϑΥʔϜ ͷߴػೳ൛)ɻ !9 גࣜձࣾελϝϯͰͷར༻෩ܠ
Copyright © stmn, inc. All rights reserved. Page TUNAGͷٕज़ελοΫ !10
/BUJWF 'SPOUFOE "QQMJDBUJPO .JEEMFXBSF *OGSBTUSVDUVSF .FUBCBT
Copyright © stmn, inc. All rights reserved. Page TUNAGͷٕज़ελοΫ !11
/BUJWF 'SPOUFOE "QQMJDBUJPO .JEEMFXBSF *OGSBTUSVDUVSF .FUBCBT ੈͷதͷศརͳαʔϏεੵۃతʹར༻͠ɺ ࣗࣾͷڧΈʹूத͍ͨ͠
RailsελʔτΞοϓ͕ ͬͯΑ͔ͬͨ͜ͱ
Copyright © stmn, inc. All rights reserved. Page ࣍ •ೖΕͯΑ͔ͬͨgem
•ͬͯΑ͔ͬͨπʔϧɾαʔϏε •औΓೖΕͯΑ͔ͬͨ։ൃελΠϧ !13
ೖΕͯΑ͔ͬͨgem
Copyright © stmn, inc. All rights reserved. Page aasm !15
ঢ়ଶભҠཧΛαϙʔτͯ͘͠ΕΔgem
Copyright © stmn, inc. All rights reserved. Page ෳࡶͳঢ়ଶભҠཧ͕͍͠ •TUNAGͰϞσϧͷঢ়ଶཧ
enum Ͱཧ͍ͯ͠Δ •ঢ়ଶભҠ͕ෳࡶԽ͢Δͱཧ͕େม •ٞͷΑ͏ͳঝೝػೳ(ϫʔΫϑϩʔ) ECͷจཧͳͲ !16 ։࢝ Ωϟϯηϧ ਃத ঝೝࡁΈ ྃ ٫Լ
Copyright © stmn, inc. All rights reserved. Page aasmͷಛ •DSLͰঢ়ଶભҠͷ੍Λ؆ܿʹهड़Ͱ͖Δ
•ঢ়ଶભҠ࣌ʹҙͷίʔϧόοΫΛࢦఆͰ͖Δ •enum ͕ར༻Ͱ͖Δ •σϑΥϧτͩͱ aasm_state ΧϥϜΛՃ͢Δ !17
Copyright © stmn, inc. All rights reserved. Page ίʔυྫ !18
Մಡੑ͕ߴ͘ɺ ঢ়ଶભҠͷ੍Λཧ͍͢͠
Copyright © stmn, inc. All rights reserved. Page ίʔυྫ !19
Մಡੑ͕ߴ͘ɺ ঢ়ଶભҠͷ੍Λཧ͍͢͠ ಛఆͷঢ়ଶભҠͷίʔϧόοΫͷࢦఆ ͯ͢ͷঢ়ଶભҠͷίʔϧόοΫࢦఆ FOVNར༻Մ
Copyright © stmn, inc. All rights reserved. Page railroadyͱΈ߹ΘͤΔͱͬͱخ͍͠ •ঢ়ଶભҠਤΛ࡞ͯ͘͠ΕΔ
!20 CVOEMFFYFDSBJMSPBEZ"TQFDJGZBQQNPEFMTNPEFMSCcEPU5QOHP 3"*-4@3005EPDTUBUF@DIBOHFTNPEFMQOH
Copyright © stmn, inc. All rights reserved. Page awesome_nested_set !21
ActiveRecordͰπϦʔߏΛѻ͑Δgem
Copyright © stmn, inc. All rights reserved. Page RDBͰπϦʔߏΛ࣮ݱ͍ͨ͠ •اۀ͚SNSͰɺ৫ਤ
Λ ࣮͢Δඞཁ͕͋Δ •ྡϦετϞσϧ • ۙͷͷΈΛࢀর • ΞϓϦέʔγϣϯଆͰ࠶ؼॲཧ •ܦ࿏ྻڍϞσϧ • ֎෦Ωʔ੍͕͑ͳ͍ͨΊRDBͰࢠؔͷ߹ੑ͕อূͰ͖ͳ͍ •ೖΕࢠू߹Ϟσϧ !22 ͡Ί͜ΕΛ࠾༻͍ͯͨ͠
Copyright © stmn, inc. All rights reserved. Page TUNAGʹ͓͚ΔπϦʔߏͷཁ݅ •πϦʔߏΛͨͲΔॲཧ͕ଟ͍
•৫ ଐ ͷߋ৽සগͳ͍ •awesome_nested_set (ೖΕࢠू߹Ϟσϧ)Λ࠾༻ •ߋ৽ίετߴ͍͕ɺۙϦετϞσϧͱൺͯΫΤϦΛ੍Ͱ͖Δ •left, rightΧϥϜ͚ͩͰͳ͘ɺparent_id࣋ͨͤΔͷͰɺࢠͷݕࡧޮ্͕͕Δ !23
Copyright © stmn, inc. All rights reserved. Page the_sortable_treeͱΈ߹ΘͤΔͱཧը໘؆୯ʹ࡞ΕΔ •υϥοάɾΞϯυɾυϩοϓͷGUIΛදࣔ͢ΔviewϔϧύʔΛఏڙͯ͘͠ΕΔ
•࣌ؒΛ͔͚ͣʹɺػೳͷཁ݅ΛୡͰ͖ͨͷελʔτΞοϓॳظʹॿ͔ͬͨ !24
Copyright © stmn, inc. All rights reserved. Page elasticsearch-model &
elasticsearch-dsl !25 ElasticsearchΛRailsͰѻ͍͘͢͢Δgem
Copyright © stmn, inc. All rights reserved. Page elasticsearch-model •ϞσϧͱElasticsearchͷ౷߹Λิॿ
•searchϝιουͱimportϝιου͕ఆٛ͞ΕΔ •as_indexed_jsonΛΦʔόʔϥΠυ͢Δ͜ͱͰɺ import࣌ʹ࣮ߦ͞ΕΔσʔλͷม ΛίϯτϩʔϧͰ͖Δ •ؔ࿈ςʔϒϧͷࢦఆ؆୯ʹ !26
Copyright © stmn, inc. All rights reserved. Page elasticsearch-dsl •ΫΤϦΛDSLͰهड़Ͱ͖Δ
•ؔ࿈͢ΔෳͷϞσϧΛରͱͨ͠ɺෳࡶͳݕࡧ͕Ͱ͖Δ •must: AND݅ •filter: AND݅ •should: OR݅ •must_not: NOT݅ !27
Copyright © stmn, inc. All rights reserved. Page Alias Λར༻ͨ͠
ΠϯσοΫεͷ࠶ߏங •ΠϯσοΫεʹΤΠϦΞε໊Λ༩͢Δ͜ͱ͕Ͱ͖Δɻ •ΤΠϦΞεͷࢀরઌΛΓସ͑Δ͜ͱͰɺΠϯσοΫεΛೖΕସ͑Δ͜ͱ͕Ͱ͖Δɻ •ΤΠϦΞεͷΓସ͑ɺΞτϛοΫʹߦΘΕΔ͜ͱ͕อূ͞Ε͍ͯΔɻ !28
Copyright © stmn, inc. All rights reserved. Page xray-rails !29
ϒϥβ্ͰviewͷߏΛՄࢹԽͯ͘͠ΕΔ
Copyright © stmn, inc. All rights reserved. Page !30
Copyright © stmn, inc. All rights reserved. Page !31 ΫϦοΫ͢Δͱ
ΤσΟλͰ֘ύʔγϟϧ Λ։͍ͯ͘ΕΔ ؔ࿈͢Δ$POUSPMMFS ΤσΟλͷઃఆ 3BJMTSPPUYSBZDPOpHΤσΟλઃఆϑΝΠϧ FEJUPS"QQMJDBUJPOT3VCZ.JOFBQQ$POUFOUT.BD04SVCZNJOFpMF
Copyright © stmn, inc. All rights reserved. Page ඇಉظॲཧ: DelayedJob
& Sidekiq •DelayedJob •Job ͕ DB Ͱཧ͞ΕΔͨΊɺModel ͷτϥϯβΫγϣϯʹ࿈ಈͤ͞Δ͜ͱ͕Ͱ͖Δɻ • assm ͱΈ߹Θͤͯɺঢ়ଶભҠ ʹ࿈ಈͨ͠ඇಉظॲཧʹར༻͍ͯ͠Δɻ •Polling ͳͷͰଈԠੑແ͍ •DBͷΈͰ݁Ͱ͖Δ •sidekiq •ΠϕϯτυϦϒϯͰߴ •PUSH௨ͷҰ੪ૹ৴ͳͲظؒͰେྔͷδϣϒΛࡹ͚Δ •redis ͕ඞཁ !32
ͬͯΑ͔ͬͨπʔϧɾαʔϏε
Copyright © stmn, inc. All rights reserved. Page imgix(ը૾ઐ༻CDN) •ը૾৴ઐ༻ͷCDNɻ
•AWS S3 ্ͷը૾ΛϦΞϧλΠϜʹՃ͠ͳ͕Βɺߴ৴Ͱ͖Δɻ •ͱͱɺRails (ImageMagick) Ͱ Ճ͠ AWS CloudFront Ͱ৴͍ͯͨ͠ɻ •ॳճΞΫηε͕ಉ࣌ฒߦʹߦΘΕΔͱϨεϙϯε͕ѱԽ͢Δ͜ͱ͕͋ͬͨ •اۀ͚SNSͱ͍͏ಛੑ্ɺಋೖॳͳͲʹΞΫηε͕ूத͠ɺ ϨεϙϯελΠϜ͕ѱԽ͢Δ͜ͱ͕͋ͬͨ •imgixΛಋೖ͢Δ͜ͱͰɺWEBαʔόͷෛՙΛΒ͢͜ͱ͕Ͱ͖ɺ͞ΒʹαΠτεϐʔυ্ͨ͠ •small_light ͳͲͰը૾৴αʔόΛߏங͢ΔΑΓ͍҆͠ɺ͔ͬͨ •إݕग़ػೳͳͲɺػೳ͍͍ ײ͡ɻ !34
Copyright © stmn, inc. All rights reserved. Page μογϡϘʔυը໘ !35
Copyright © stmn, inc. All rights reserved. Page Bugsnag(ΫϥογϡϨϙʔτղੳπʔϧ) !36
Copyright © stmn, inc. All rights reserved. Page Bugsnag(ΫϥογϡϨϙʔτղੳπʔϧ) !37
EFWJTFΛ͍ͬͯΔͱɺ ݱࡏೝূ͞Ε͍ͯΔϢʔβʔʹؔ͢ΔใΛ ࣗಈతʹऔಘͯ͘͠ΕΔ
Copyright © stmn, inc. All rights reserved. Page Bugsnag(ΫϥογϡϨϙʔτղੳπʔϧ) !38
ϝʔϧΞυϨεɾ໊લͰߜΓࠐΊΔ
Copyright © stmn, inc. All rights reserved. Page Bugsnag(ΫϥογϡϨϙʔτղੳπʔϧ) !39
ΤϥʔͷΫϥεɾϑΝΠϧ໊ɾϝιου໊ͰߜΓࠐΊΔ
Copyright © stmn, inc. All rights reserved. Page Bugsnag(ΫϥογϡϨϙʔτղੳπʔϧ) !40
$POUSPMMFSɺϗετ໊ɺϦΫΤετ63-ɺϦΫΤετ*1ͰߜΓࠐΊΔ
Copyright © stmn, inc. All rights reserved. Page SendGrid •όϯεॲཧΛ࣮͠ͳͯ͘ྑ͍ɻ
•ϝʔϧαʔόʔΛ༻ҙ͠ͳͯ͘ࡁΉ •։෧ɺΫϦοΫΛҙͷ୯ҐͰऔಘͰ͖Δ •sendgrid-rubyͰAPIΛར༻͕؆୯ʹ !41
Copyright © stmn, inc. All rights reserved. Page μογϡϘʔυ !42
ςετ
Copyright © stmn, inc. All rights reserved. Page Mailtrap •։ൃڥ͔Βૹ৴͞ΕͨిࢠϝʔϧΛςετɺදࣔ͢ΔͨΊͷμϛʔSMTPαʔόʔ
•։ൃதʹޡരϝʔϧΛૹΔ͜ͱ͕ͳ͘ͳΔ !43 ςετ
Copyright © stmn, inc. All rights reserved. Page Metabase(BIπʔϧ) !44
(6*Ͱϙνϙν͢Δ͚ͩ͋Δఔͷ ΫΤϦߏஙͰ͖Δ
Copyright © stmn, inc. All rights reserved. Page Metabase(BIπʔϧ) !45
(6*Ͱϙνϙν͢Δ͚ͩ͋Δఔͷ ΫΤϦߏஙͰ͖Δ 440ʹରԠ͍ͯ͠Δ
औΓೖΕͯΑ͔ͬͨ։ൃελΠϧ
Copyright © stmn, inc. All rights reserved. Page ఆظbundle update
•Rails ͷ ਐԽʹ͍͍ͭͯ͘͜ͱ͕తɻ •ӨڹൣғΛಛఆ͘͢͠ɺݕূίετΛখ͘͢͞ΔͨΊʹɺि࣍ͰΞοϓσʔτɻ •ར༻͍ͯ͠ΔgemͷཧղΛਂΊΒΕΔ •CircleCI 2.0ͷϫʔΫϑϩʔػೳͰࣗಈԽ !47
Copyright © stmn, inc. All rights reserved. Page ϨϏϡʔͷࣗಈԽ •ίʔσΟϯάελΠϧͳͲఆܕͳνΣοΫࣗಈԽ͢Δɻ
•ઃܭΞϓϦέʔγϣϯϩδοΫͷϨϏϡʔʹ࣌ؒΛ͔͚Δɻ •rubocop, SiderΛಋೖ !48
Copyright © stmn, inc. All rights reserved. Page RailsελʔτΞοϓ͕ͬͯΑ͔ͬͨ͜ͱ !49
ೖΕͯྑ͔ͬͨHFN BBTN BXFTPNF@OFTUFE@USFF FMBTUJDTFBSDINPEFM FMBTUJDTFBSDIETM YSBZSBJMT EFMBZFE@KPC 4JEFLJR ೖΕͯྑ͔ͬͨπʔϧɾαʔϏε JNHJY #VHTOBH 4FOE(SJE .BJMUSBQ .FUBCBTF औΓೖΕͯྑ͔ͬͨ։ൃελΠϧ ఆظCVOEMFVQEBUF ϨϏϡʔͷࣗಈԽ
Thank You For Your Attention