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#1_uuushiro.pdf
Search
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.4k
スタメンのLeSSの導入と 事業部全体を巻き込んだ アウトカム文化への道のり / Introduction of LeSS and outcome culture
uuushiro
2
8.6k
スタートアップのプロダクト成長の舞台裏とコンテナ化までの道のり
uuushiro
0
820
Railsメジャーバージョンアップを 安全にカナリアリリースする
uuushiro
2
3.3k
プロダクトに集中し続けるために 開発組織が向き合ってきた課題
uuushiro
1
300
エンゲージメント経営を支える TUNAGのETL基盤
uuushiro
0
190
TUNAG の ETL基盤 ~AWS Summit Startup Architecture of the year 2019~
uuushiro
2
5.1k
Ruby × AWS Lambdaで サーバーレスの導入~TUNAG分析基盤の事例をもとに~
uuushiro
2
3.3k
Other Decks in Programming
See All in Programming
Creating Composable Callables in Contemporary C++
rollbear
0
200
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.5k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
130
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
120
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
310
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.9k
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
110
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
160
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
190
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
260
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Code Reviewing Like a Champion
maltzj
528
40k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
Documentation Writing (for coders)
carmenintech
77
5.4k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
The Curse of the Amulet
leimatthew05
2
13k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
A Soul's Torment
seathinner
6
3.1k
Six Lessons from altMBA
skipperchong
29
4.3k
So, you think you're a good person
axbom
PRO
2
2.1k
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