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でつくる 画像アップロード 2017 #railsdm /rails_develop...
Search
matsuhisa
October 19, 2017
Programming
0
1.2k
Railsでつくる 画像アップロード 2017 #railsdm /rails_developers_meetup6_image_upload
#railsdm
https://techplay.jp/event/631425
matsuhisa
October 19, 2017
Tweet
Share
More Decks by matsuhisa
See All by matsuhisa
Rails移行のレキシ/mobasif-to-ruby-on-rails2017
matsuhisa
1
1.5k
デザインレビューにエンジニアも参加してみよう/engineers-join-design-review-2017
matsuhisa
0
1.1k
「ふつう」のRuby on Rails ウェブアプリケーション #clipla_mwed /ruby_on_rails_for_minnano_wedding
matsuhisa
1
850
Rails 移行を支える コードレビュー #finc_mw /support_to_rails_from_code_review
matsuhisa
0
700
爆速のために 独自フレームワーク から Rails に移行した話/mobasif_to_ruby_on_rails
matsuhisa
3
2.7k
デザインレビューにエンジニアも参加してみよう/engineers-join-design-review
matsuhisa
0
260
1年間で起きたデザイナーとエンジニアの変化/1year-designer-engineer
matsuhisa
0
520
サービス改善のために エンジニアがすること、 しないこと
matsuhisa
0
1.7k
Other Decks in Programming
See All in Programming
fs2-io を試してたらバグを見つけて直した話
chencmd
0
240
Spatial Rendering for Apple Vision Pro
warrenm
0
140
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
290
Beyond ORM
77web
8
1.2k
快速入門可觀測性
blueswen
0
400
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
120
return文におけるstd::moveについて
onihusube
1
1.2k
[JAWS-UG横浜 #76] イケてるアップデートを宇宙いち早く紹介するよ!
maroon1st
0
510
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
140
103 Early Hints
sugi_0000
1
260
テストコード書いてみませんか?
onopon
2
190
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
300
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
40
2.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Become a Pro
speakerdeck
PRO
26
5k
Agile that works and the tools we love
rasmusluckow
328
21k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Testing 201, or: Great Expectations
jmmastey
41
7.1k
A better future with KSS
kneath
238
17k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Code Review Best Practice
trishagee
65
17k
Designing for humans not robots
tammielis
250
25k
How to Ace a Technical Interview
jacobian
276
23k
Transcript
3BJMTͰͭ͘Δ ը૾Ξοϓϩʔυ גࣜձࣾΈΜͳͷΣσΟϯά দٱߒ৳
w גࣜձࣾΈΜͳͷΣσΟϯά ΣϒΞϓϦέʔγϣϯΤϯδχΞ w 5XJUUFSɿ!LBNPOFHJ w IUUQXXXqJDLSDPNQIPUPTNBUTVIJTB দٱɹߒ৳
"HFOEB ͖͔͚ͬ ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ 6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ 3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ ·ͱΊ 3BJMTͰͭ͘Δը૾Ξοϓϩʔυ
"HFOEB ͖͔͚ͬ ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ 6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ 3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ ·ͱΊ 3BJMTͰͭ͘Δը૾Ξοϓϩʔυ
͖͔͚ͬ w 1FSMͷಠࣗϑϨʔϜϫʔΫ ʢ.PCB4J'ʣ͔Β3BJMTʹҠߦத w ʮը૾ʯΞοϓϩʔυػೳͷҠߦ ͕ඞཁ w ޱίϛɺඅ༻໌ࡉը૾ɺࣸਅͳ Ͳ
w 3BJMTͰը૾Ξοϓϩʔυͬͯ࡞ͬ ͨ͜ͱ͚͋ͬͨͬʁ αʔϏεͷ3BJMTҠߦͷܭը
͖͔͚ͬ w ՖՇՖʢϢʔβʣ͕ར༻͢Δશը໘ʹର͙ͯ͠Β͍ɻ ը૾͋ΓͷϑΥʔϜɺશը໘ʹର͙ͯ͠Β͍ w ը૾͋ΓͷϑΥʔϜΛ࡞Γͨ͠هԱ͕ͳ͍ʢ͜ͷ͙Β͍ʣ w ը૾͋ΓͷϑΥʔϜΛ৽نͰ࡞ͬͨهԱ͕ͳ͍ ϑΥʔϜΛ࡞Δػձଟ͘ͳ͍
͖͔͚ͬ w 3BJMT͔Βඪ४ʹͳΔHFN w ݄ʹ%))͕ಥʹʜ w ͏ɺ$MPVE4UPSBHFͨΓલͩΑͶɺͱ͍͏ࢥ͍Λײ͡Δ w ฐࣾɺ4ʢ"84ʣΛར༻த w
($1ʢ(PPHMF$MPVE1MBUGPSNʣʹը૾ͷϦαΠζػೳ͕͋Δ͠ɺ ৴OHJOYΛ௨ͯ͠ϦαΠζ͠ͳ͍͍͔ͯ͘͠Εͳ͍ "DUJWF4UPSBHFͷొ
͖͔͚ͬ w ੲ࡞ͬͨͷɺ1$͚ͩͬͨɻεϚʔτϑΥϯͩͱԿ͕՝ͩΖ͏ʁ w ϑΝΠϧ͋ͨΓͷϑΝΠϧ༰ྔɻʙ.#͙Β͍ w ը໘αΠζQYӽ͕͑͋Δ w ωοτϫʔΫճઢͷߟྀɻςετͷ࣌ʹɺ(ճઢͰࢼͯ͠Δʁ w
ՃπʔϧͰՃ͞ΕͨϑΝΠϧΞοϓϩʔυ͞ΕΔ w ʮΠϯελө͑ʯΛૂͬͨࣸਅ૿͍͑ͯͦ͏ εϚʔτϑΥϯ࣌ͷϑΝΠϧΞοϓϩʔυ
͖͔͚ͬ w εϚʔτϑΥϯͰͷը૾ΞοϓϩʔυΛ࡞ͬͨ͜ͱ͕ͳ͍ͷͰΓ͍ͨ w 3BJMTͷγεςϜҠߦ͋ΔͷͰௐ͓͖͍ͯͨ w ࠷ऴతʹɺHFNΛ͏ͱͯ͠ɺͲΜͳࣄ͕ى͖ͯΔ͔Γ͍ͨ w $MPVE4UPSBHFશ෦Ͱͳͯ͘ɺ4ͰͷϑΝΠϧΞοϓϩʔυΛࢼ͠ ͍ͨ
͖͔͚ͬͷ·ͱΊ
͖͔͚ͬ ͖͔͚ͬͷ·ͱΊ Ϗδωεཁ݅ ػձ 3BJMT Ϋϥυ εϚʔτϑΥϯ ࣗͷܦݧෆ ςΫϊϩδʔͷมԽ
"HFOEB ͖͔͚ͬ ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ 6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ 3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ ·ͱΊ 3BJMTͰͭ͘Δը૾Ξοϓϩʔυ
ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ w ը૾ϑΝΠϧͷWBMJEBUF w ը૾ͷछྨɺϑΝΠϧ༰ྔ w ը૾ʹ·ͭΘΔϞσϧͷWBMJEBUF w ը૾ͷઆ໌ςΩετɺλά͚ w
ެ։ɺඇެ։ w ηΩϡϦςΟʔʹؔ͢Δ͜ͱ ը૾Ξοϓϩʔυࣗମ
ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ w Ͳ͏ͬͯࢀরͤ͞Δ͔ʁ w ϦαΠζ͍ͭ͢ΔʁΞοϓϩʔυ࣌ʁࢀরͷ࣌ʁ w Ξοϓϩʔυ࣌ͩͱΞοϓϩʔυͷ͕࣌ؒ૿͑Δ w ࢀরͷ࣌ͩͱճͷϦαΠζͲ͏ͳΔʁ w
ϦαΠζࣗࣾʁαʔϏεΛར༻͢Δʁ w *NBHF'MVYʢ͘͞ΒΠϯλʔωοτʣͳͲ ը૾ͷࢀর
ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ w ࠓ·Ͱ͋ΕαʔϏεӡӦΛ͍ͯ͠Δαʔόʔ্ w ΞϓϦέʔγϣϯαʔόʔͱ͔ʁετϨʔδαʔόʔͱ͔ʁ w ΫϥυετϨʔδΛར༻͢Δ͜ͱ͕૿͑ͨ w "84ɺ($1ɺ"[VSFͳͲ ը૾ϑΝΠϧͷஔ͖ॴ
ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ มΘΒͳ͍ϙΠϯτɺมԽͨ͠ϙΠϯτ ϑΝΠϧ Ξοϓϩʔυ ը૾ͷࢀর Ϋϥυ ετϨʔδ ैདྷͱ͋·ΓมԽͳ͠
"HFOEB ͖͔͚ͬ ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ 6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ 3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ ·ͱΊ 3BJMTͰͭ͘Δը૾Ξοϓϩʔυ
6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ ΫοΫύου
6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ w Ξοϓϩʔυ͢ΔͱϓϨϏϡʔ͞ΕΔ w Ξοϓϩʔυ͠ͳ͕Βೖྗ͕Ͱ͖Δ w ॻ͖͔͚ͰࣗಈͰԼॻ͖ͱͯ͠อଘ͞Ε͍ͯΔɻը૾ɻ w ະެ։ͷϨγϐͷը૾63-͕Θ͔ΕΞΫηεͰ͖Δ ΫοΫύου
6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ FTB
6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ w Ξοϓϩʔυ͞ΕͨΒɺ.BSLEPXOܗࣜͰૠೖ͞ΕΔ w Ξοϓϩʔυ͠ͳ͕Βೖྗ͕Մೳ w ϓϨϏϡʔػೳ͕ผͰ͋ΔͷͰɺͦ͜ͰϓϨϏϡʔʹͳΔ w 1$ͩͱ w
υϥοΫˍυϩοϓͰϑΝΠϧΞοϓϩʔυ͕࢝·Δ w ෳͷϑΝΠϧΛಉ࣌ʹΞοϓϩʔυͰ͖Δ FTB
6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ ؾʹͳͬͨϙΠϯτ ϓϨϏϡʔ υϥοά υϩοϓ ඇಉظ ैདྷͱ͋·ΓมԽͳ͠ ʁ
"HFOEB ͖͔͚ͬ ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ 6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ 3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ ·ͱΊ 3BJMTͰͭ͘Δը૾Ξοϓϩʔυ
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w 3BJMT͔Βಋೖ w MPDBMUSVFʹ͠ͳ͍ͱࠓ·ͰͷΑ͏ͳಈ࡞͠ͳ͍ͷͰযͬͨʜ GPSN@XJUI = form_with model: @images,
url: confirm_images_path, local: true do |f| - if @images.errors.any? %h2= "#{pluralize(@images.errors.count, "error")} saved:" %ul - @images.errors.full_messages.each do |message| %li= message
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w .BDͰ͋ΕɺCSFXͰΠϯετʔϧՄೳ w ඞཁͳHFNԼهͷ௨Γ )FBEMFTTCSPXTFS brew install chromedriver ChromeDriver
2.31.488774 (7e15618d1bf16df8bf0ecf2914ed1964a387ba0b) group :development, :test do gem 'capybara' gem 'selenium-webdriver' end
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ )FBEMFTTCSPXTFS require 'capybara' require 'capybara/dsl' require 'selenium-webdriver' Capybara.register_driver :selenium
do |app| Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome( chrome_options: { args: %w(headless disable-gpu window-size=1680,1050), }, ) ) end
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w ͰมΘΒͳ͍ w Ұ෦ͷίϯςϯπͰɺ֬ೝը໘Λແ͕ͨ͘͠ͷมԽͳͦ͞͏ ը໘ભҠ ೖྗ ֬ೝ ྃ
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w "DUJPO%JTQBUDI)UUQ6QMPBEFE'JMFͷ͜ͱΛΕ͕ͪ w ςΩετͳͲଘࡏҎ֎ΛΕ͕ͪʜ w 7BMJEBUF͕࣠ʹͳΔ w ը૾ϑΝΠϧࣗମʢϑΝΠϧ༰ྔɺछྨͳͲʣ w
ը૾ͱඥͮ͘ใʢը૾ͷઆ໌ͱ͔ʣ w ϑΥʔϜΦϒδΣΫτͰॲཧ͢Δͱྑͦ͞͏ w ʮGPSNPCKFDUΛͬͯΈΑ͏ϝυϐΞ։ൃऀϒϩάʯʢ!XJMMOFUʣ 4UFQ̍ɿQVCMJDʹը૾Ξοϓϩʔυ
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w 4ʹ͍ͭͯΔඞཁ͕͋Δ w ೝূʹ͍ͭͯͷཧղɻDSFEFOUJBMTɺ*".ͳͲ w όέοτࣗମͷΞΫηε੍ޚ w ϋϚΓ·ͨ͠ʜ w
ςετͰΣϒϞοΫʹ͍ͭͯΔඞཁ͕͋Δ w 4ʹςετͰΞοϓϩʔυͨ͘͠ͳ͍ʢͬͯͨʜʣ 4UFQɿ4ʹը૾Ξοϓϩʔυ
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w ϑΝΠϧΞοϓϩʔυʹ࣌ؒ ͕͔͔Δؾ͕͢Δ w αʔόʔܦ༝Ͱɺ4Ξοϓ ϩʔυ͍ͯ͠Δ 4UFQɿൃੜʁ IUUQEPDTBXTBNB[PODPNKB@KQ"NB[PO4MBUFTUEFW6TJOH)5511045IUNM
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w 4ʹ+BWB4DSJQU͔ΒͰΞοϓϩʔυͰ͖Δํ๏͕͋Δ w ($1"[VSFʹ͋ΔʢΈ͍͚ͨͩΕͲࢼ͍ͯ͠ͳ͍ʣ w ྲྀΕ w +BWB4DSJQUͰɺϑΝΠϧʹ͍ͭͯใΛऔಘ w
αʔόʔଆʹ1PTUͯ͠4ʹඞཁͳҰ࣌తͳೝূใΛฦ͢ w +BWB4DSJQUͰೝূใΛར༻ͯ͠4ʹ1PTU w $BMM#BDLΛར༻ͯ͠ॲཧ 4UFQɿμΠϨΫτΞοϓϩʔυʢ4ʣ
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w ͭͷϑΝΠϧΛΞοϓ͢ΔͷͰ͖ͨ w NVMUJQMFΛར༻ͯ͠ΈΔͱɺඇಉظॲཧΛߟ͑Δඞཁ͕ग़ͯ͘Δ w K2VFSZͰ%FGFSSFE1SPNJTFΛ͏ 4UFQɿෳϑΝΠϧͷΞοϓϩʔυ
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ w ͳͷͰK2VFSZΊͯ&$."4DSJQUʢ&4ʣ͚ͩͰ࣮ w 3FBDUͱ͔7VFͳͲͱͷΈ߹Θͤ͋Δʁ w )5.-͔Β͋Δ'JMF"1*Λ͏ͱʜ w αϜωΠϧ؆୯ʹͰ͖Δ w
1$ͩͱυϥοάˍυϩοϓͰϑΝΠϧΞοϓϩʔυ w -JWF1IPUPTͳͲͷ৽͍͠ը૾ϑΥʔϚοτͷଘࡏ 4UFQɿ&$."4DSJQU'JMF"1*ͳͲ
3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ ٕज़ͷੵΈॏͶͱମݧ 3BJMT 4ͳͲ +BWB4DSJQU &4)5.- (SBQI2-ʁ Ϣʔβମݧ
"HFOEB ͖͔͚ͬ ը૾ΞοϓϩʔυͰߟ͑ΔϙΠϯτ 6*͔Βߟ͑Δͷը૾Ξοϓϩʔυ 3BJMTͰը૾ΞοϓϩʔυΛ࡞Δ ·ͱΊ 3BJMTͰͭ͘Δը૾Ξοϓϩʔυ
3BJMTͰը૾Ξοϓϩʔυ w ʹը૾ΞοϓϩʔυΛ࡞Δͱͨ͠ΒʁΛߟ͑Δͱʜ w Ξοϓϩʔυ͚ͩͳΒ3BJMT ΫϥυετϨʔδͰ࣮ݱՄೳ w Ϣʔβମݧߟ͑Δͱɺ3BJMTҎ֎ͷٕज़͕ࣝඞཁ w 0+5ʹ࠷ద͔ʢ͠Εͳ͍͕ɺҊ͕݅গͳ͍ʣ
w HFNΛར༻͢Δͱͯ͠ɺ࣮Λߟ͑ͯΈΔͱHFNͷબఆ͕มΘΔ͔ ͠Εͳ͍ ·ͱΊ
·ͱΊ w ༥͚ΔσβΠϯ w Σϒ͚ͩ͡Όͳ͘ɺΞϓϦ ؚΊͯߟ͑ΔͱɺΞοϓϩʔ υ͢Δɺͱ͍͏ߦҝ͕ແ͘ͳ Δ ࢀߟॻ੶