Slide 1

Slide 1 text

͸͡Ίͯͷ૿੫ରԠ "UTVTIJ,BUTVVSB(.01FQBCP *OD ฏ੒3VCZձٞ ΍ΘΒ͔૿੫

Slide 2

Slide 2 text

ࠓ೔࿩͢͜ͱ w೥݄ͷফඅ੫૿੫ରԠͰ&$αʔϏεͰඞཁʹͳͬͨ͜ͱ w࣮ࡍʹରԠ͢Δ্ͰؾΛ͚ͭͨ͜ͱ w݄೔Λܴ͑ͨͱ͖ɺ͏·͍͔͘ͳ͔ͬͨ͜ͱ 3VCZͷ࿩͋·Γͳ͍Ͱ͢ɻੜ׆ൃදͰ͢ɻ

Slide 3

Slide 3 text

উӜರJLBSVHB!67#@ (.0ϖύϘגࣜձࣾ&$ࣄۀ෦ΧϥʔϛʔϦϐʔτνʔϜ IUUQTJLBSVHBPSH

Slide 4

Slide 4 text

IUUQTDPMPSNFSFQFBUKQ

Slide 5

Slide 5 text

ΧϥʔϛʔϦϐʔτ w8FC"1*αʔόʔ 3VCZPO3BJMT wϑϩϯτΤϯυαʔόʔ &YQSFTT7VFKT αϒεΫϦϓγϣϯͷܖ໿͕Ͱ͖ΔϥϯσΟϯάϖʔδΛ࡞Δ͜ͱ͕Ͱ ͖ΔαʔϏε ೥݄೔αʔϏεϦϦʔε⾣͸͡Ίͯͷ૿੫

Slide 6

Slide 6 text

૿੫

Slide 7

Slide 7 text

&$αʔϏεʹऻ͍͔͔Δফඅ੫૿੫ wγϣοϓΦʔφʔͷαʔϏεར༻ྉͷফඅ੫ wγϣοϓΦʔφʔ͕ઃఆ͢Δ঎඼ͷফඅ੫ wܰݮ੫཰ͷઃఆΛؚΉ

Slide 8

Slide 8 text

ܰݮ੫཰ wಛఆͷ঎඼͸੫཰͕͡Όͳͯ͘ʹͳΓ·͢Α wαʔϏεఏڙଆ͕൑அ͢Δ΋ͷͰ͸ͳ͘ɺʮγϣοϓ Φʔφʔʯ͕൑அ͢Δ΋ͷ wγϣοϓΦʔφʔʹ͓஌Βͤͯ͠ઃఆͯ͠໯͏ඞཁ͕ ͋Δ

Slide 9

Slide 9 text

૿੫ରԠͰ΍ͬͨ͜ͱ wαʔϏεར༻ྉͷফඅ੫૿੫ରԠ w঎඼ͷফඅ੫૿੫ରԠ wܰݮ੫཰ͷઃఆͷఏڙ ࣌ࠁΛڥʹදࣔΛ੾Γସ͑Δ ࠓճ͸লུ w ૹྉͷ֎੫Խ w ாථͷमਖ਼ ۠෼هࡌ੥ٻॻ౳อଘํࣜ w ച্కΊॲཧͷεϓϦΫτͷमਖ਼

Slide 10

Slide 10 text

੫཰͕ద༻͞ΕΔλΠϛϯά

Slide 11

Slide 11 text

Ұ࣍ιʔεΛΑ͘ಡΉ

Slide 12

Slide 12 text

ࠃ੫ி

Slide 13

Slide 13 text

αʔϏεར༻ྉͷ੫཰ wલఏΧϥʔϛʔϦϐʔτͷαʔϏεར༻ྉ͸೔ԁ w݁࿦ܖ໿ऴྃ೔͕Ҏ߱ͷͱ͖ɺͷফඅ੫Ͱѻ͏ wࠃ੫ிͷ)1ΛΑΉ wIUUQTXXXOUBHPKQUBYFTTIJSBCFSVUBYBOTXFSTIPIJ IUN

Slide 14

Slide 14 text

ɹ໾຿ͷఏڙ ɹ੥ෛʹΑΔ໾຿ͷఏڙͷ࣌ظ͸ɺݪଇͱ͠ ͯɺ෺ͷҾ౉͠Λཁ͢Δ੥ෛܖ໿ʹ͋ͬͯ͸ ໨త෺ͷશ෦Λ׬੒ͯ͠Ҿ͖౉ͨ͠೔ɺ෺ͷ Ҿ౉͠Λཁ͠ͳ͍੥ෛܖ໿ʹ͋ͬͯ͸ͦͷ໿ ͨ͠໾຿ͷશ෦ͷఏڙΛ׬ྃͨ͠೔Ͱ͢ɻ ɹ·ͨɺ੥ෛΛআ͘ਓత໾຿ͷఏڙͷ࣌ظ ͸ɺݪଇͱͯͦ͠ͷਓత໾຿ͷఏڙΛ׬ྃ͠ ͨ೔Ͱ͢ɻ

Slide 15

Slide 15 text

ɹ໾຿ͷఏڙ ɹ੥ෛʹΑΔ໾຿ͷఏڙͷ࣌ظ͸ɺݪଇͱ͠ ͯɺ෺ͷҾ౉͠Λཁ͢Δ੥ෛܖ໿ʹ͋ͬͯ͸ ໨త෺ͷશ෦Λ׬੒ͯ͠Ҿ͖౉ͨ͠೔ɺ෺ͷ Ҿ౉͠Λཁ͠ͳ͍੥ෛܖ໿ʹ͋ͬͯ͸ͦͷ໿ ͨ͠໾຿ͷશ෦ͷఏڙΛ׬ྃͨ͠೔Ͱ͢ɻ ɹ·ͨɺ੥ෛΛআ͘ਓత໾຿ͷఏڙͷ࣌ظ ͸ɺݪଇͱͯͦ͠ͷਓత໾຿ͷఏڙΛ׬ྃ͠ ͨ೔Ͱ͢ɻ

Slide 16

Slide 16 text

αʔϏεར༻ྉͷ੫཰ wܖ໿ΛͰදݱ͢Δͱ ੫཰ U ੫཰ ੫཰ TUBSUFE@BU FOEFE@BU

Slide 17

Slide 17 text

঎඼Ձ֨ͷ੫཰͕ద༻͞ΕΔλΠϛϯά w݁࿦঎඼Ձ֨͸ൃૹ࣌ͷ੫཰Λద༻͢Δ wʹड஫ͨ͋͠ͱʹൃૹ w⾣ͷ੫཰͕ద༻͞ΕΔ wIUUQTXXXOUBHPKQMBXUTVUBUTVLJIPOTIPIJIUN ΛಡΉ

Slide 18

Slide 18 text

ʵʵɹ୨Էࢿ࢈ͷҾ౉͠ͷ೔͕͍ͭͰ͋ Δ͔ʹ͍ͭͯ͸ɺྫ͑͹ɺग़ՙͨ͠೔ɺ૬ख ํ͕ݕऩͨ͠೔ɺ૬खํʹ͓͍ͯ࢖༻ऩӹ͕ Ͱ͖Δ͜ͱͱͳͬͨ೔ɺݕ਑౳ʹΑΓൢച਺ ྔΛ֬ೝͨ͠೔౳ɺ౰֘୨Էࢿ࢈ͷछྨٴͼ ੑ࣭ɺͦͷൢചʹ܎Δܖ໿ͷ಺༰౳ʹԠͯ͡ ͦͷҾ౉͠ͷ೔ͱͯ͠߹ཧతͰ͋ΔͱೝΊΒ ΕΔ೔ͷ͏ͪɺࣄۀऀ͕ܧଓͯ͠୨Էࢿ࢈ͷ ৡ౉Λߦͬͨ͜ͱͱ͍ͯ͠Δ೔ʹΑΔ΋ͷͱ ͢Δɻ

Slide 19

Slide 19 text

࣮૷

Slide 20

Slide 20 text

੫཰ΛͲ͏දݱ͢Δ͔ w੫཰͕ద༻͞ΕΔ࣌ࠁ wܰݮ੫཰͔Ͳ͏͔ ͕Θ͔Ε͹੫཰͸ٻΊΒΕͦ͏ wఆ਺Ͱઃఆʹ͢Δ w%#ʹσʔλΛ΋ͨͤΔ

Slide 21

Slide 21 text

%#Ͱ੫཰Λදݱ͍ͨ͠ "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ςʔϒϧര஀ ࠓճ͸ͪ͜ΒΛ࠾༻

Slide 22

Slide 22 text

࣮૷ 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

Slide 23

Slide 23 text

UBYFTςʔϒϧͷ 4&-&$5͕΍ͨΒͱଟ͍

Slide 24

Slide 24 text

%BUF5JNFΫϥε͸ϛϦඵ·Ͱ࣋ͬͯΔ [1] pry(main)> Time.current.iso8601(7) => "2019-12-09T08:49:24.4245084+09:00" 5JNFDVSSFOUΛ౉͢ͱ࣮ߦ͢ΔͨͼʹΫΤϦ͕࣮ߦ͞ΕΔͷͰ ΫΤϦΩϟογϡ͕ޮ͔ͳ͍ ੫཰ܭࢉͷج४೔࣌Λ໌֬ʹҾ਺ͱͯ͠౉͢͜ͱͰಉ͡ΫΤϦΛ ు͖ग़ͤ͞ɺΫΤϦΩϟογϡΛޮ͔͢

Slide 25

Slide 25 text

IUUQTHJUIVCDPNDPMPSCPY TIPVIJ[FJ

Slide 26

Slide 26 text

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)

Slide 27

Slide 27 text

Ͳ͕͍͍ͬͪͩΖ͏Ͷ w5BYʹґଘ͢Δ3FMBUJPO͸ଘࡏ͠ͳ͍ͷͰఆ਺Ͱ΋໰୊ͳ͍ wҰํͰফඅ੫཰ͱ͍͏σʔλΛ%#Ͱදݱ͢Δͷ΋ࣗવͰ͸͋Δ wґଘ(FN͸গͳ͍΄͏͕ྑ͍ ࠓճ͸ͲͬͪΛબΜͰ΋Α͔ͬͨͱࢥͬͨɻ

Slide 28

Slide 28 text

࣌ࠁΛڥʹදࣔΛ੾Γସ͑Δ

Slide 29

Slide 29 text

ͳͥඞཁʹͳ͔ͬͨ wϑϩϯτΤϯυͰΛڥʹදࣔΛ੾Γସ͑ ͍ͨ w࣌ؒΛڥք஋ͱ͢Δςετ͸େม wͰ͖Δ͚ͩ୯७ʹݕূ͍ͨ͠

Slide 30

Slide 30 text

Ͳ͏͔ͨ͠ w"1*ͷϨεϙϯεʹl૿੫ޙͷ৘ใ͔ zͲ͏͔ͷϨε ϙϯεΛCPPMͰ௥Ճͨ͠ w࣌ࠁΛฦͯ͠ϑϩϯτΤϯυͰ൑அ͢ΔͷΛආ͚ͨ

Slide 31

Slide 31 text

"1*Ͱ࣌ࠁΛฦͯ͠΋ྑ͍ͷͰ͸ wl৘ใ͕࡞੒͞Εͨ࣌ࠁzͲ͏͔ͷϨεϙϯεΛ௥Ճ͢ ΔͱɺϑϩϯτΤϯυͰ΋࣌ࠁͷൺֱ͕ඞཁʹͳΔ wϑϩϯτΤϯυͷ࣌ࠁͷൺֱ͸େม

Slide 32

Slide 32 text

ςετ

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

࢖͍ํ ྫ context '૿੫લͷͱ͖', travel_to: '2019/09/30 23:59:59' do # ੫཰8%Ͱ͋Δ͜ͱΛ֬ೝ͢ΔςετΛ͜͜ʹ͔͘ end wϒϩοΫͷதͰAUSBWFM@UPA͕ޮ͍ͯศར w !LBKJTIB͞ΜͷΞΠσΞͰ͢ɻ͋Γ͕ͱ͏͍͟͝·͢ɻ

Slide 36

Slide 36 text

DPOUFYUͷ੾Γํ w૿੫લ૿੫ޙͰେ͖ͳίϯςΩετΛ੾Δ wͦΕͧΕʹطଘͷςετΛίϐϖ͢Δ w૿੫ޙͷίϯςΩετΛ௚͢ wςετ਺͸૿͑Δ͕ɺޙย෇͚ ςετͷ࡟আ ͷͱ͖૿੫લͷίϯς Ωετʹண໨ͯ͠ςετͷ੔ཧΛߦ͑͹ྑ͍ͷͰָ

Slide 37

Slide 37 text

૿੫ޙʹ͏·͍͔͘ͳ͔ͬͨ͜ͱ

Slide 38

Slide 38 text

͏·͍͔͘ͳ͔ͬͨ͜ͱ w૿੫ޙͷදࣔपΓͷෆ۩߹͸ग़ͯ͠·ͬͨ w"1*ͷςετ͕NBTUFSͰࣦഊ͢ΔΑ͏ʹͳ͍ͬͯͨ

Slide 39

Slide 39 text

NBTUFSͰςετ͕ίέͩ͢ w૿੫લʹ͸QBTT͍ͯͨ͠ςετ͕ࣦഊͨ͠ w૿੫ޙͷमਖ਼࡞ۀʹӨڹ͕ग़ͨ wUSBWFM@UPͷઃఆ΋ΕͰ݄ʹ͸௨͍ͬͯͨςετ͕݄ʹࣦഊ͍ͯͨ͠ wϩʔΧϧͰະདྷ࣌ࠁʹมߋͯ͠ςετΛҰ౓௨ͨ͠΄͏͕Α͔ͬͨʜ

Slide 40

Slide 40 text

·ͱΊ wϑϩϯτΤϯυʹ͸࣌ࠁΛ౉ͣ͞ʹݟͤΔํ๏Λߟ͑Δ wมߋ͢Δ࣌ࠁ͝ͱʹίϯςΩετΛ࡞͓ͬͯ͘ͱޙָ͕ w๏཯ͷରԠ͸େม ँࣙ !LZNNUϨϏϡʔ͋Γ͕ͱ͏͍͟͝·ͨ͠