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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
uvb_76
December 14, 2019
Programming
2.1k
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.6k
ユーザーにサブドメインの ECサイトを提供したい (あるいは) 2026年函館で一番熱くなるかもしれない言語の話
uvb_76
0
940
Rails 7.2 のリリースノートを見て思ったこと
uvb_76
0
990
Rails Girls ガイドを使って社内で Rails 講座を開催した
uvb_76
0
170
問い合わせ調査との付き合い方
uvb_76
0
270
メール認証とRuby
uvb_76
0
1.2k
開発環境(物理)を作る
uvb_76
0
1.8k
Other Decks in Programming
See All in Programming
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
250
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
280
iOSDCのペンライトを自動制御したい!
akkeylab
0
240
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.4k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
130
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
140
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
190
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
360
アクセシビリティから考える情報設計
high_g_engineer
0
430
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
Featured
See All Featured
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
850
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
250
How GitHub (no longer) Works
holman
316
150k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
A designer walks into a library…
pauljervisheath
211
25k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
320
Are puppies a ranking factor?
jonoalderson
2
4k
Optimizing for Happiness
mojombo
378
71k
A Tale of Four Properties
chriscoyier
163
24k
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ϨϏϡʔ͋Γ͕ͱ͏͍͟͝·ͨ͠