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
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
220
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
340
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
110
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
220
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
130
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
Lessons from Spec-Driven Development
simas
PRO
0
180
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
270
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
net-httpのHTTP/2対応について
naruse
0
470
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
The Spectacular Lies of Maps
axbom
PRO
1
800
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Everyday Curiosity
cassininazir
0
230
Technical Leadership for Architectural Decision Making
baasie
3
400
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
Building Applications with DynamoDB
mza
96
7.1k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
Scaling GitHub
holman
464
140k
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