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
validationについて
Search
ryonext
December 16, 2015
Programming
860
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
validationについて
ryonext
December 16, 2015
More Decks by ryonext
See All by ryonext
AWS Lambda の Ruby 対応
ryonext
0
280
TwitterのList編集しやすいやつ作った
ryonext
0
1.8k
AWS Lambda と API GatewayでRails使わずに済んだ話
ryonext
8
4.4k
capistrano-bundle_rsync使ったらオートスケールが高速化した話
ryonext
8
2.6k
PumaとUnicornで最近自分が理解したこと
ryonext
13
9.6k
Hubot事例
ryonext
1
1.7k
Redisでバッチ処理を冗長化しつつ排他制御
ryonext
0
2.2k
CircleCIとwercker
ryonext
3
1.3k
rubykaigi 3day interactive white board
ryonext
2
410
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
JRuby: Past, Present, and Future
headius
0
210
アクセシビリティから考える情報設計
high_g_engineer
0
420
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
3.7k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
280
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
560
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
390
AWSに止められる覚悟してますか?
morizo_1984
2
470
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.2k
iOSDC2026登壇資料.pdf
riofujimon
0
200
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
310
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
360
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
290
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Leo the Paperboy
mayatellez
10
2.3k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
250
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
Test your architecture with Archunit
thirion
2
2.4k
Mind Mapping
helmedeiros
1
370
The Spectacular Lies of Maps
axbom
PRO
1
1k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Documentation Writing (for coders)
carmenintech
77
5.5k
Transcript
WBMJEBUJPOʹ͍ͭͯ
ࣗݾհ w גࣜձࣾϢχίϯ w 5XJUUFS!SZPOFYU w ήʔϚʔ w ΜΜͱ͔εϓϥτΡʔϯͱ͔ w
;ͩΜ3BJMTͬͯ·͢
࠷ۙͷਐḿͰ͢ w ࠓճΏͬͨΓͬͯΔͷͰ·ͩ)3Ͱ͢ w ΤϯδχΞϞϯϋϯ4MBDL্ཱͪ͛ͯΔͷͰڵຯ͋Δํ͓ ͕͚͍ͩ͘͞
ษڧձʗίϛϡχςΟ w 4IJCVZBSC w :PLPIBNBSC w ,BXBTBLJSC w ͋ͨΓʹࢀՃͯ͠·͢ɻ
ձࣾͰ͍ͬͯΔ͜ͱ ւ֎͚ήʔϜΩϡʔϨγϣϯαʔϏεͷ 3PDL6.FEJBDSBGU IUUQTNFEJBDSBGUSPDLVBQQTDPN ւ֎͚ήʔϜϑΥʔϥϜͷ 3PDL65BML IUUQTUBMLSPDLVBQQTDPN ͷ։ൃΛ͍ͬͯ·͢ɻ
ࠓ͢͜ͱ w γεςϜͷͨΊͷWBMJEBUJPOʹ͍ͭͯ w 3BJMTͰWBMJEBUJPO͢Δ w %#Ͱ੍Λ͔͚Δ w 69ͷͨΊͷWBMJEBUJPOʹ͍ͭͯ w
+4ͰWBMJEBUJPO͢Δ
ίʔυʹ͍ͭͯ w ίʔυීஈࢲ͕ۀͰ͍ͬͯΔ3BJMTͰͷ࣮ ྫʹͳΓ·͕͢ɺ8FCϑϨʔϜϫʔΫશൠʹ ͍ͭͯಉ͜͡ͱ͕ݴ͑ΔΜ͡Όͳ͍͔ͳ͊ͱࢥ ͍·͢
WBMJEBUJPO͠·͠ΐ͏
Ϣʔβ໊ͷཁ݅͜ΕͰ w ͞จࣈ·Ͱ w ඞਢ
3BJMTͩͱ class User < ActiveRecord::Base validates :name, length: { maximum:
20 }, presence: true end
͜͏ͳΔ
؆୯ʂ
ͱ͜Ζ͕
3BJMTͷWBMJEBUJPOΞϓϦϨΠϠʔͰ ݕূՄೳͳϝιουͷ߹ʹͷΈ ݕূ͢Δ͚ͩͳͷͰ
Ϩίʔυʹ*OTFSU w */4&35JOUPVTFSTTFUOBNF B@OBNF@UIBU@JT@PWFS@UIBO@@DIBSBDUFST
WBMJEBUJPO͕Βͳ͍ϝιου Λ͏ VTFSVQEBUF@DPMVNO OBNF MPOH@OBNF@UIBU@PWFS@UIBO@UXFOUZ@DIBSBDUFST VTFSTBWF WBMJEBUFGBMTF
ͷΑ͏ͳૢ࡞Ͱɺ؆୯ʹ WBMJEBUJPOҧͷσʔλ͕࡞ΕΔ
ͦͯ͜͠ΕΛը໘͔Β ૢ࡞͠Α͏ͱ͢Δͱ w ࠓճͷૢ࡞Ͱ໊લΛมߋ͍ͯ͠ͳ͍ʹ͔͔Θ Βͣɺ໊લͰΤϥʔʹͳΔ มߋͨ͠ͷ͜͜
͞Βʹ
ύεϫʔυมߋը໘ w ଞͷઃఆը໘ͱΓग़ͯ͠ɺύεϫʔυ͚ͩ Λมߋ͢Δը໘ͱ͍͏ͭ͘ΓΑ͋͘Δͱࢥ͍ ·͢
ύεϫʔυΛมߋ͢Δը໘ͳͷʹɺ ໊લ͕ͯ͘ΤϥʔͱݴΘΕΔ w ͪΖΜɺ͜ͷը໘Ͱ໊લΛม͑Δ͜ͱͰ͖ͳ͍ w ϢʔβͲ͏͠Α͏ͳ͍
͕ͨͬͯ͠ w 8FCΞϓϦϨΠϠʔͰͷ੍͚ͩͰͳ͘ɺ͖ͬ ͪΓͱ%#Ͱͷ੍ΛೖΕ·͠ΐ͏
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t|
t.string :name, limit: 20, null: false t.string :password t.timestamps null: false end end end %#ʹMJNJUͱOPUOVMM੍Λֻ͚ Δʢ3BJMTͷNJHSBUJPOͰΔྫʣ
Μɺ͡Ό͋%#ͷ੍͚ͩష͓͚ͬͯɺ 3BJMTͷWBMJEBUJPOཁΒͳ͍Μ͡ΌͶʁ
ͱ͍͏Θ͚ͰͬͯΈΔͱ
WBMJEBUJPOΤϥʔ͕ฦ͍ͬͯͨ ՕॴͰΤϥʔʹ
͡Ό͋͜ͷ%#ͷΤϥʔΛྫ֎DBUDIͯ͠ɺ దͳΤϥʔϝοηʔδΛฦ͢Α͏ʹ ͯ͠Εɾɾɾ
ͦΕɺ3BJMTͷWBMJEBUJPOͷ ํָ͕͡ΌͶ
ͱ͍͏Θ͚Ͱ w %#ͷ੍γεςϜΛकΔͨΊʹઈରʹֻ͚· ͠ΐ͏ɻ͕͜͜ΞϓϦϨΠϠʔͰͷWBMJEBUJPOΑ ΓΏΔ͍ͱ͍͏͜ͱ͕͍͚͋ͬͯͳ͍ɻ w ΞϓϦϨΠϠʔͰɺແବͳΫΤϦൃߦΛ͠ͳ ͍ʗΤϥʔॲཧΛదʹ͢ΔͨΊʹWBMJEBUJPOΛ Δ͜ͱΛڧ͘ਪ͠·͢ɻ
ΊͰͨ͠ΊͰͨ͠
Ͱͳ͍ʂ
͜͜·Ͱ w γεςϜͷͨΊͷWBMJEBUJPOͷ
͔͜͜Β w 69ͷͨΊͷWBMJEBUJPOͷ
69ͷͨΊͷWBMJEBUJPOͱʁ w Α͋͘ΔϢʔβొϑΥʔϜ
Ϣʔβ*%ΛೖΕͯΈΔ w ొϘλϯΛԡ͢ͱ͢ͰʹΘΕ͍ͯ·͢ɺͱΤ ϥʔ͕ฦͬͯ͘Δ
ผͷ*%Λࢼ͢ w ·ౖͨΒΕΔ
͞Βʹผͷ*%Λࢼ͢ w ·ͨ·ͨΤϥʔʹͳΔ
Ϣʔβʔౖͬͯ ͯ͠͠·͏
Ͳ͏͢Ε͍͍ͷ͔ʁ w ೖྗ͢ΔϘλϯԡ͢Τϥʔ͕ฦͬͯ͘ Δɺͱ͍͏Ұ࿈ͷྲྀΕΛ܁Γฦ͢ͷۤ௧ w ೖྗͨ࣌͠Ͱɺͦͷೖྗ͕ड͚ೖΕՄೳ͔Ͳ ͏͔ΛΘ͔ΔΑ͏ʹ͢Δ͖
Ϣʔβ͕ೖྗΛऴ͑ͨλΠϛϯάͰϑΟʔυόοΫ μϝͳ߹ͦͦԡͤͳ͘͢Δ
ޭ͢Δ߹ڭ͑ͯ͋͛Δ
w %#Ͱ͙ͷγεςϜͷͨΊͷWBMJEBUJPO w Ϣʔβʹշదʹೖྗͯ͠Β͏ͨΊͷɺ69ͷͨ ΊͷWBMJEBUJPO͕ඞཁ
Ͳ͏࣮ݱ͢Δ͔ʁ w ઌఔͷྫɺ%#ͰͷॏෳνΣοΫ͕ඞཁͳͷ Ͱ+BWBTDSJQU "1*ͷ࿈ܞ͕ඞཁͳέʔεɻ ͪΐͬͱ͍͜͠ͷͰ͋ͱͰɻ w ·ͣɺ'PSN͚ͩͰஅͰ͖Δɺʮඞਢೖྗʯ ʮ੍͞ݶʯʮϑΥʔϚοτνΣοΫʯʹ͍ͭ ͯ͠·͢ɻ
'PSNͰஅ͢ΔWBMJEBUJPO w ྫ͑ɺ)5.-ʹSFRVJSFEଐੑFNBJMଐੑ ͳͲ͕͋Δ w ೖྗඞਢ߲ʹೖྗ͍ͯ͠ͳ͔ͬͨΓɺࢦఆͷ ϑΥʔϚοτʹͳ͍ͬͯͳ͔ͬͨΒϒϥβϨ ϕϧͰΤϥʔΛฦͯ͘͠ΕΔ w ·͋ศར
<input placeholder="Username" required type="text" name="account[username]" id="account_username" />
ͱ͜Ζ͕ w ಈ͔ͳ͍ϒϥβ͕
w ͋Δ͚Ͳɺͦ͏͍͏ϨϕϧͷͰͳ͘ w *&ࢮΜͩʂ͏͍ͳ͍ʂ ͋
4BGBSJ w ಈ͔ͳ͍ w ࠷৽ͷ.BD04 J04Ͱಈ͔ͳ͍ w ͜ΕͰಈ͔ͳ͍Ҏ্ɺීٴΛߟ͑ΔͱཔΕͳ ͍ͱߟ͑Δ͖
+BWBTDSJQUͰΔ w K2VFSZͳΒ͍͔ͭ͘ϓϥάΠϯ͕͋Δ w 7VF 3FBDU "OHVMBSͷϑϨʔϜϫʔΫΛ༻ ͍ͯ͠ΔͳΒɺͦ͜Ͱͷྲّྀʹै͏ͱָ࣮͕ ͳͣ
௨৴͕ඞཁͳͭɺ ೖྗͷλΠϛϯάͰ௨৴ͯ݁͠ՌΛग़ͯ͠Δ
͜͏͍͏Πϝʔδ 'PSN Ϣʔβ +BWBTDSJQU "1* %# ೖྗ มߋΛݕ ೖྗ༰ΛૹΔ %#ʹ͍߹Θͤ
0,/( 0,/( 0,ʗ/(
+4͔ΒݺͿ ʢલεϥΠυ ͷεςοϓ 4 $ -> 5 $("#username").keyup(-> 6
$.get( 7 "/accounts/exists", 8 { username: $('#username').val() }, 9 (data) -> 10 if data.result 11 $("#account-result").html("<div class='glyphicon glyphicon-remove text-danger'>͜ͷϢʔβ໊ΘΕ͍ͯ·͢</div>") 12 $("#submit-button").prop("disabled", true) 13 else 14 $("#account-result").html("<div class='glyphicon glyphicon-ok text-success'>͜ͷϢʔβ໊༻ՄೳͰ͢</div>") 15 $("#submit-button").prop("disabled", false) 16 ) 17 ) 18 w $P⒎FF4DSJQUͰ͢ w ࣮ࡍʹLFZVQͰΔͱ௨৴සଟ͗͢ΔͷͰEFCPVDF͢ΔQMVHJOͳͲ͍·͠ΐ͏ w ྫK2VFSZͰ͕͢ɺԿΒ͔ͷϑϨʔϜϫʔΫΛ͏ͷΦεεϝͰ͢
֬ೝ༻"1*࡞Δ ʢdͷεςοϓ Rails.application.routes.draw do resources :accounts do collection do get
"exists", to: "accounts#exist" end end end class AccountsController < ApplicationController def exist if Account.exists?(username: params[:username]) render json: { result: true }.to_json else render json: { result: false }.to_json end end end
͜͜Ͱ w +4ͷWBMJEBUJPO͚͓͚ͩͬͯɺ%#ͷ੍ཁ Βͳ͍Μ͡Όͳ͍ʁ
Μͳͨ͜ʔͳ͍ w +4ඇରԠϒϥβʗΦϑʹ͢Δʗ1045 ͷ63-Λୟ͘ɺճආ༨༟
w +4ͱ%#͚͓͚ͩͬͯ3BJMTͷ͍ͭΒͳ ͍Μ͡Όͳ͍ʁ
͋·ΓΑ͘ͳ͍ w +4ճආ͢ΔΑ͏ͳΞΫηεʹରͯ͠ɺ3BJMTͰద ͳWBMJEBUJPOͰΤϥʔϝοηʔδΛฦͯ͠Δ ඞཁͳ͍·͋Θ͔Δ w %#ʹରͯ͠ແବͳ௨৴ʗΫΤϦ͕ൃߦ͞ΕΔՄ ೳੑ͕͋ΔΑ͘ͳ͍
͞Βʹ w "1*Խ͢ΔͷͰ͋Εɺ3BJMTͷNPEFMʹΑΔ WBMJEBUJPO͕͙ՕॴͱͳΔ w େͨ͠खؒͰͳ͍ͷͰɺNPEFMͰͷWBMJEBUJPO ͓ͬͯ͘΄͏͕ྑ͍ɻ
8FCΞϓϦͰͳ͘εϚϗͷ ߹ʁ w "1*αʔόཱͯͯɺεϚϗ͔Β"1*Λୟͭ͘
69ͷͨΊͷWBMJEBUJPO ΫϥΠΞϯτଆͰ w +4ͷ࣌ͱಉ͡Α͏ʹɺۃྗແବͳ௨৴Λൃੜ͞ ͤͣʹɺϢʔβͷೖྗʹରͯ͠ૉૣ͘ϑΟʔυόο ΫΛฦ͢
αʔόଆ w %#ଆݴ͏·Ͱͳ͘ඞཁ w ΫϥΠΞϯτ͕όά͍ͬͯΔՄೳੑ͋ΔͷͰɺ 8FCΞϓϦͷNPEFMͰͷWBMJEBUJPOඞཁɻ
·ͱΊ w ࠷ޙඌ %# Ͱෆਖ਼ͳઈରޚ͢Δγες ϜͷͨΊͷWBMJEBUJPO w ࠷લྻ +4 ΫϥΠΞϯτΞϓϦ
Ͱਖ਼ৗೖྗͷͨ ΊͷಋઢΛ࡞ͬͯ͋͛Δ69ͷͨΊͷ WBMJEBUJPO
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠