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
validationについて
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ryonext
December 16, 2015
Programming
850
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
270
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.1k
CircleCIとwercker
ryonext
3
1.3k
rubykaigi 3day interactive white board
ryonext
2
400
Other Decks in Programming
See All in Programming
A2UI という光を覗いてみる
satohjohn
1
130
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
130
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
170
AIで効率化できた業務・日常
ochtum
0
130
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
550
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
170
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
230
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
330
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
Contextとはなにか
chiroruxx
1
320
JavaDoc 再入門
nagise
1
340
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
Making Projects Easy
brettharned
120
6.7k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
We Have a Design System, Now What?
morganepeng
55
8.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Automating Front-end Workflow
addyosmani
1370
210k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Building Adaptive Systems
keathley
44
3.1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
Leo the Paperboy
mayatellez
7
1.8k
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
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠