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
yawaraka zouzei
Search
uvb_76
December 14, 2019
Programming
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
yawaraka zouzei
uvb_76
December 14, 2019
More Decks by uvb_76
See All by uvb_76
地元にいないローカルオーガナイザーの立ち回り
uvb_76
2
1.7k
ユーザーにサブドメインの ECサイトを提供したい (あるいは) 2026年函館で一番熱くなるかもしれない言語の話
uvb_76
0
970
Rails 7.2 のリリースノートを見て思ったこと
uvb_76
0
1k
Rails Girls ガイドを使って社内で Rails 講座を開催した
uvb_76
0
180
問い合わせ調査との付き合い方
uvb_76
0
280
メール認証とRuby
uvb_76
0
1.2k
開発環境(物理)を作る
uvb_76
0
1.8k
Other Decks in Programming
See All in Programming
はじめてのPLATEAU
nokonoko1203
1
640
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
200
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
4
3.8k
AI Augmentation Techniques with Liberty
ivargrimstad
1
430
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
220
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
300
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
170
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
370
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
740
Performance Optimization With LLMs
xleitix
0
250
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
140
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
310
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
464
34k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Visualization
eitanlees
153
17k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Navigating Weather and Climate Data
rabernat
0
590
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
880
Game over? The fight for quality and originality in the time of robots
wayneb77
1
330
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Fireside Chat
paigeccino
43
4.1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Transcript
͡Ίͯͷ૿੫ରԠ "UTVTIJ,BUTVVSB(.01FQBCP *OD ฏ3VCZձٞ ΘΒ͔૿੫
ࠓ͢͜ͱ w݄ͷফඅ੫૿੫ରԠͰ&$αʔϏεͰඞཁʹͳͬͨ͜ͱ w࣮ࡍʹରԠ͢Δ্ͰؾΛ͚ͭͨ͜ͱ w݄Λܴ͑ͨͱ͖ɺ͏·͍͔͘ͳ͔ͬͨ͜ͱ 3VCZͷ͋·Γͳ͍Ͱ͢ɻੜ׆ൃදͰ͢ɻ
উӜರJLBSVHB!67#@ (.0ϖύϘגࣜձࣾ&$ࣄۀ෦ΧϥʔϛʔϦϐʔτνʔϜ IUUQTJLBSVHBPSH
IUUQTDPMPSNFSFQFBUKQ
ΧϥʔϛʔϦϐʔτ w8FC"1*αʔόʔ 3VCZPO3BJMT wϑϩϯτΤϯυαʔόʔ &YQSFTT 7VFKT αϒεΫϦϓγϣϯͷܖ͕Ͱ͖ΔϥϯσΟϯάϖʔδΛ࡞Δ͜ͱ͕Ͱ ͖ΔαʔϏε
݄αʔϏεϦϦʔε⾣͡Ίͯͷ૿੫
૿੫
&$αʔϏεʹऻ͍͔͔Δফඅ੫૿੫ wγϣοϓΦʔφʔͷαʔϏεར༻ྉͷফඅ੫ wγϣοϓΦʔφʔ͕ઃఆ͢Δͷফඅ੫ wܰݮ੫ͷઃఆΛؚΉ
ܰݮ੫ wಛఆͷ੫͕͡Όͳͯ͘ʹͳΓ·͢Α wαʔϏεఏڙଆ͕அ͢ΔͷͰͳ͘ɺʮγϣοϓ Φʔφʔʯ͕அ͢Δͷ wγϣοϓΦʔφʔʹ͓Βͤͯ͠ઃఆͯ͠͏ඞཁ͕ ͋Δ
૿੫ରԠͰͬͨ͜ͱ wαʔϏεར༻ྉͷফඅ੫૿੫ରԠ wͷফඅ੫૿੫ରԠ wܰݮ੫ͷઃఆͷఏڙ ࣌ࠁΛڥʹදࣔΛΓସ͑Δ ࠓճলུ w ૹྉͷ֎੫Խ w
ாථͷमਖ਼ ۠هࡌٻॻอଘํࣜ w ച্కΊॲཧͷεϓϦΫτͷमਖ਼
੫͕ద༻͞ΕΔλΠϛϯά
Ұ࣍ιʔεΛΑ͘ಡΉ
ࠃ੫ி
αʔϏεར༻ྉͷ੫ wલఏΧϥʔϛʔϦϐʔτͷαʔϏεར༻ྉԁ w݁ܖऴ͕ྃҎ߱ͷͱ͖ɺͷফඅ੫Ͱѻ͏ wࠃ੫ிͷ)1ΛΑΉ wIUUQTXXXOUBHPKQUBYFTTIJSBCFSVUBYBOTXFSTIPIJ IUN
ɹͷఏڙ ɹෛʹΑΔͷఏڙͷ࣌ظɺݪଇͱ͠ ͯɺͷҾ͠Λཁ͢Δෛܖʹ͋ͬͯ తͷશ෦Λͯ͠Ҿ͖ͨ͠ɺͷ Ҿ͠Λཁ͠ͳ͍ෛܖʹ͋ͬͯͦͷ ͨ͠ͷશ෦ͷఏڙΛྃͨ͠Ͱ͢ɻ ɹ·ͨɺෛΛআ͘ਓతͷఏڙͷ࣌ظ ɺݪଇͱͯͦ͠ͷਓతͷఏڙΛྃ͠ ͨͰ͢ɻ
ɹͷఏڙ ɹෛʹΑΔͷఏڙͷ࣌ظɺݪଇͱ͠ ͯɺͷҾ͠Λཁ͢Δෛܖʹ͋ͬͯ తͷશ෦Λͯ͠Ҿ͖ͨ͠ɺͷ Ҿ͠Λཁ͠ͳ͍ෛܖʹ͋ͬͯͦͷ ͨ͠ͷશ෦ͷఏڙΛྃͨ͠Ͱ͢ɻ ɹ·ͨɺෛΛআ͘ਓతͷఏڙͷ࣌ظ ɺݪଇͱͯͦ͠ͷਓతͷఏڙΛྃ͠ ͨͰ͢ɻ
αʔϏεར༻ྉͷ੫ wܖΛͰදݱ͢Δͱ ੫ U ੫ ੫ TUBSUFE@BU FOEFE@BU
Ձ֨ͷ੫͕ద༻͞ΕΔλΠϛϯά w݁Ձ֨ൃૹ࣌ͷ੫Λద༻͢Δ wʹडͨ͋͠ͱʹൃૹ w⾣ͷ੫͕ద༻͞ΕΔ wIUUQTXXXOUBHPKQMBXUTVUBUTVLJIPOTIPIJIUN ΛಡΉ
ʵʵɹ୨Էࢿ࢈ͷҾ͠ͷ͕͍ͭͰ͋ Δ͔ʹ͍ͭͯɺྫ͑ɺग़ՙͨ͠ɺ૬ख ํ͕ݕऩͨ͠ɺ૬खํʹ͓͍ͯ༻ऩӹ͕ Ͱ͖Δ͜ͱͱͳͬͨɺݕʹΑΓൢച ྔΛ֬ೝͨ͠ɺ֘୨Էࢿ࢈ͷछྨٴͼ ੑ࣭ɺͦͷൢചʹΔܖͷ༰ʹԠͯ͡ ͦͷҾ͠ͷͱͯ͠߹ཧతͰ͋ΔͱೝΊΒ ΕΔͷ͏ͪɺࣄۀऀ͕ܧଓͯ͠୨Էࢿ࢈ͷ ৡΛߦͬͨ͜ͱͱ͍ͯ͠ΔʹΑΔͷͱ ͢Δɻ
࣮
੫ΛͲ͏දݱ͢Δ͔ w੫͕ద༻͞ΕΔ࣌ࠁ wܰݮ੫͔Ͳ͏͔ ͕Θ͔Ε੫ٻΊΒΕͦ͏ wఆͰઃఆʹ͢Δ w%#ʹσʔλΛͨͤΔ
%#Ͱ੫Λදݱ͍ͨ͠ "id" "kind" "rate" "started_at" "expired_at" "created_at" "updated_at" 1 0
0.08 "2014-03-31 15:00:00" "2019-09-30 14:59:59.999999" "2019-07-16 09:44:39.516075" "2019-07-16 09:44:39.516075" 2 0 0.1 "2019-09-30 15:00:00" NULL "2019-07-16 09:44:39.519505" "2019-07-16 09:44:39.519505" 3 1 0.08 "2019-09-30 15:00:00" NULL "2019-07-16 09:44:39.521575" "2019-07-16 09:44:39.521575" UBYFTςʔϒϧര ࠓճͪ͜ΒΛ࠾༻
࣮ class Tax < ApplicationRecord enum kind: { ordinary: 0,
reduced: 1 } class << self def ordinary_rate(time = Time.current) # 10%ͷ੫༻ ordinary.where('started_at <= ?', time).order(started_at: :desc).first.rate end def reduced_rate(time = Time.current) # 8%(ܰݮ੫)༻ reduced.where('started_at <= ?', time).order(started_at: :desc).first.rate end end end
UBYFTςʔϒϧͷ 4&-&$5͕ͨΒͱଟ͍
%BUF5JNFΫϥεϛϦඵ·Ͱ࣋ͬͯΔ [1] pry(main)> Time.current.iso8601(7) => "2019-12-09T08:49:24.4245084+09:00" 5JNFDVSSFOUΛ͢ͱ࣮ߦ͢ΔͨͼʹΫΤϦ͕࣮ߦ͞ΕΔͷͰ ΫΤϦΩϟογϡ͕ޮ͔ͳ͍ ੫ܭࢉͷج४࣌Λ໌֬ʹҾͱͯ͢͜͠ͱͰಉ͡ΫΤϦΛ ు͖ग़ͤ͞ɺΫΤϦΩϟογϡΛޮ͔͢
IUUQTHJUIVCDPNDPMPSCPY TIPVIJ[FJ
4IPVIJ[FJ(FN w:BNMͰͷఆಡΈࠐΈ wܰݮ੫ରԠ w͜ͷࢿྉ࡞ͬͯΔ࠷தʹݟͯ͠ʮΑ͍ʜʯͱͳͬͨ irb(main):010:0> Shouhizei.rate_on(Time.current) => (1/10) irb(main):011:0> Shouhizei.rate_on(Time.current,
reduced: true) => (2/25)
Ͳ͕͍͍ͬͪͩΖ͏Ͷ w5BYʹґଘ͢Δ3FMBUJPOଘࡏ͠ͳ͍ͷͰఆͰͳ͍ wҰํͰফඅ੫ͱ͍͏σʔλΛ%#Ͱදݱ͢ΔͷࣗવͰ͋Δ wґଘ(FNগͳ͍΄͏͕ྑ͍ ࠓճͲͬͪΛબΜͰΑ͔ͬͨͱࢥͬͨɻ
࣌ࠁΛڥʹදࣔΛΓସ͑Δ
ͳͥඞཁʹͳ͔ͬͨ wϑϩϯτΤϯυͰΛڥʹදࣔΛΓସ͑ ͍ͨ w࣌ؒΛڥքͱ͢Δςετେม wͰ͖Δ͚ͩ୯७ʹݕূ͍ͨ͠
Ͳ͏͔ͨ͠ w"1*ͷϨεϙϯεʹl૿੫ޙͷใ͔ zͲ͏͔ͷϨε ϙϯεΛCPPMͰՃͨ͠ w࣌ࠁΛฦͯ͠ϑϩϯτΤϯυͰஅ͢ΔͷΛආ͚ͨ
"1*Ͱ࣌ࠁΛฦͯ͠ྑ͍ͷͰ wlใ͕࡞͞Εͨ࣌ࠁzͲ͏͔ͷϨεϙϯεΛՃ͢ ΔͱɺϑϩϯτΤϯυͰ࣌ࠁͷൺֱ͕ඞཁʹͳΔ wϑϩϯτΤϯυͷ࣌ࠁͷൺֱେม
ςετ
34QFDͰςετ࣌ࠁΛม͑Δ # spec/support/traveling.rb RSpec.configure do |config| config.include ActiveSupport::Testing::TimeHelpers config.around(:each, :travel_to)
do |example| travel_to(example.metadata[:travel_to]) do example.run end end end
34QFDͰςετ࣌ࠁΛม͑Δ # spec/support/traveling.rb RSpec.configure do |config| config.include ActiveSupport::Testing::TimeHelpers config.around(:each, :travel_to)
do |example| travel_to(example.metadata[:travel_to]) do example.run end end end IUUQTSFMJTIBQQDPNSTQFDSTQFD DPSFWEPDTIPPLTBSPVOE
͍ํ ྫ context '૿੫લͷͱ͖', travel_to: '2019/09/30 23:59:59' do # ੫8%Ͱ͋Δ͜ͱΛ֬ೝ͢ΔςετΛ͜͜ʹ͔͘
end wϒϩοΫͷதͰAUSBWFM@UPA͕ޮ͍ͯศར w !LBKJTIB͞ΜͷΞΠσΞͰ͢ɻ͋Γ͕ͱ͏͍͟͝·͢ɻ
DPOUFYUͷΓํ w૿੫લ૿੫ޙͰେ͖ͳίϯςΩετΛΔ wͦΕͧΕʹطଘͷςετΛίϐϖ͢Δ w૿੫ޙͷίϯςΩετΛ͢ wςετ૿͑Δ͕ɺޙย͚ ςετͷআ ͷͱ͖૿੫લͷίϯς Ωετʹணͯ͠ςετͷཧΛߦ͑ྑ͍ͷͰָ
૿੫ޙʹ͏·͍͔͘ͳ͔ͬͨ͜ͱ
͏·͍͔͘ͳ͔ͬͨ͜ͱ w૿੫ޙͷදࣔपΓͷෆ۩߹ग़ͯ͠·ͬͨ w"1*ͷςετ͕NBTUFSͰࣦഊ͢ΔΑ͏ʹͳ͍ͬͯͨ
NBTUFSͰςετ͕ίέͩ͢ w૿੫લʹQBTT͍ͯͨ͠ςετ͕ࣦഊͨ͠ w૿੫ޙͷमਖ਼࡞ۀʹӨڹ͕ग़ͨ wUSBWFM@UPͷઃఆΕͰ݄ʹ௨͍ͬͯͨςετ͕݄ʹࣦഊ͍ͯͨ͠ wϩʔΧϧͰະདྷ࣌ࠁʹมߋͯ͠ςετΛҰ௨ͨ͠΄͏͕Α͔ͬͨʜ
·ͱΊ wϑϩϯτΤϯυʹ࣌ࠁΛͣ͞ʹݟͤΔํ๏Λߟ͑Δ wมߋ͢Δ࣌ࠁ͝ͱʹίϯςΩετΛ࡞͓ͬͯ͘ͱޙָ͕ w๏ͷରԠେม ँࣙ !LZNNUϨϏϡʔ͋Γ͕ͱ͏͍͟͝·ͨ͠