Slide 1

Slide 1 text

΅͘ͷ͔Μ͕͑ͨ࠷ڧͷ6TF$BTFͷ࡞Γํ
 d͋Δ͍͸ϏδωεϩδοΫͱ͸Կ͔ͱ͍͏̍ͭͷճ౴d ,FJTVLF,JVDIJ5XGFJ@LPNF
 d3PPN IUUQTHJUIVCDPNLJVDIJLFJTVLF3BLVUFO$BMM

Slide 2

Slide 2 text

໦಺ܒี w ৬ۀɿ:ͷ"OESPJEΤϯδχΞ݉ҭࣇύύ w झຯͰ࡞ͬͨϞϊɿʮΒ͘ͰΜ "QQ ʯɺ
 ʮ$MFBO"SDIJUFDUVSF5FNQMBUF'PS,PUMJO 044 ʯ w Ϟοτʔɿ໌೔ͷࣗ෼ʹ༏͍͠ίʔυΛॻ͘ w 4/4
 5XJUUFS!GFJ@LPNF
 (JUIVC!LJVDIJLFJTVLF
 2JJUB!L@LFJTVLF

Slide 3

Slide 3 text

࠷ۙͷΞΫςΟϏςΟ վળ͓͡͞Μܑ͓͞Μ ύού# ΢σϚΤ9੒ΓཱͯͷΠΧΨʔϧ

Slide 4

Slide 4 text

஫ҙࣄ߲ w ͜ͷൃදͰ͸$MFBO"SDJUFDUVSFͱ͸ͳΜͧ΍ʁతͳ࿩͸͋·Γ͠ͳ͍Ͱ͢ w ͜ͷൃද͸ϢʔεέʔεϏδωεϩδοΫͱ͸͔͋͘Δ΂͠ͱ
 ڧཁ͢Δ΋ͷͰ͸͋Γ·ͤΜ͠ɺઈରతͳਖ਼ղͰ΋͋Γ·ͤΜ w ͜ͷൃදΛฉ͘ͱૄ݁߹ͰՄಡੑͷߴ͍ίʔυ͕ॻ͚ΔΑ͏ʹͳΔ
 ͔΋͠Ε·ͤΜ w ͜ͷൃදͰ͸ཧղଅਐͷͨΊօ͞ΜʹखΛ্͛ͯ΋Β͏γʔϯ͕Կ౓͔͋Γ ·͢ɻͰ͖Ε͹ੵۃతʹࢀՃΛ͓ئ͍͠·͢

Slide 5

Slide 5 text

ϏδωεϩδοΫϢʔεέʔεͬͯԿʁ d͋Δ͍͸ͨͩͷ໰୊ఏىd

Slide 6

Slide 6 text

ϏδωϧϩδοΫϢʔεέʔε ͱ͸Կ͔Λҙࣝͯ͠࢖͍ͬͯΔਓ

Slide 7

Slide 7 text

ϏδωεϩδοΫϢʔεέʔεͱ͸Կ͔Λ
 ʮΒ͘ͰΜʯΞϓϦΛྫʹߟ͍͑ͯ͜͏

Slide 8

Slide 8 text

ʮΒ͘ͰΜʯΞϓϦͱ͸ʁ w ָఱͰΜΘαʔϏεͷαϙʔτΞϓϦʢࣗ࡞ʣ w ָఱͰΜΘαʔϏεͱ͸ɺి࿩͢Δࡍʹ
 ಛఆͷ1SFpYΛ಄ʹ͚ͭΔ͜ͱͰ
 ͋ΒΏΔి࿩͕෼·Ͱ͸ेԁʹͳΔαʔϏε ౰࣌ w Β͘ͰΜ͸ීஈͷి࿩$BMMΠϕϯτʹϑοΫͯ͠
 ࣗಈͰ1SFpYΛ͚ͭΔΞϓϦ w

Slide 9

Slide 9 text

γϛϡϨʔτֶͯ͠Ϳ
 ϏδωεϩδοΫͱϢʔεέʔε d΋͋͠ͳ͕ͨΒ͘ͰΜͷ։ൃऀʹͳͬͨΒʁd

Slide 10

Slide 10 text

͔͜͜Β͸ɺ΋͋͠ͳ͕ͨ
 Β͘ͰΜͷ։ൃऀʹ೚໋͞ΕͨΒʁ
 ͱ͍͏γνϡΤʔγϣϯͰ࿩͕ਐΈ·͢'

Slide 11

Slide 11 text

Β͘ͰΜΞϓϦͷ։ൃऀʹ೚໋͞ΕͨΒ·ͣԿΛ͢Δʁ ·ͣ͸ίʔυΛॻ͖࢝ΊΔ✍ ·ͣ͸σβΠϯνʔϜʹσβΠϯΛฉ͖ʹߦ͘ ·ͣ͸ϏδωενʔϜ ࢓༷ݕ౼νʔϜ ʹ࢓༷ͷৄࡉΛ ฉ͖ʹߦ͘

Slide 12

Slide 12 text

Β͘ͰΜΞϓϦͷ։ൃऀʹ೚໋͞ΕͨΒ·ͣԿΛ͢Δʁ ·ͣ͸ίʔυΛॻ͖࢝ΊΔ✍ ·ͣ͸σβΠϯνʔϜʹσβΠϯΛฉ͖ʹߦ͘ ·ͣ͸ϏδωενʔϜ ࢓༷ݕ౼νʔϜ ʹ࢓༷ͷৄࡉΛ ฉ͖ʹߦ͘ ଟ෼ΈΜͳ͜Ε͔Β΍Γ·͢ΑͶ

Slide 13

Slide 13 text

ԿΛϏδωενʔϜʹ
 ࣭໰͠Α͏

Slide 14

Slide 14 text

ϏδωενʔϜ΁ͷ࣭໰ྫ 1SFpYͷ൪߸͸ʁ
 6*σβΠϯ͸͍ͭࠒͰ͖Δʁ
 αʔόʔ࿈ܞͱ͔͸͋Δʁͳ͍ʁ
 ͱ͔ͱ͔ຊདྷి࿩ྉ͕ۚ
 ͔͔Βͳ͍ి࿩൪߸ͷѻ͍͸ʁ ࣭໰υ΢κ

Slide 15

Slide 15 text

ϏδωενʔϜͷճ౴ྫ 1SFpYͷ൪߸͸ʁ
 ˠ๭3͔ࣾΒ࿈བྷ଴ͪͰ͢ 6*σβΠϯ͸͍ͭࠒͰ͖Δʁ
 ˠ6*νʔϜʹฉ͍ͯΈͳ͍ͱԿͱ΋ αʔόʔ࿈ܞͱ͔͸͋Δʁͳ͍ʁ
 ˠࠓ࣌఺Ͱ͸Կͱ΋ ͱ͔ͱ͔ຊདྷి࿩ྉ͕ۚ
 ͔͔Βͳ͍ి࿩൪߸ͷѻ͍͸ʁˠݕ౼͠·͢ʂʂ ճ౴σε

Slide 16

Slide 16 text

ྉۚͷ͔͔Βͳ͍ి࿩൪߸ͬͯ Կ͕͋ΔͩΖ͏

Slide 17

Slide 17 text

ྉۚͷ͔͔Βͳ͍ి࿩൪߸ w ౳ͷٹٸͷి࿩൪߸
 w ౳ͷϑϦʔμΠΞϧͷి࿩൪߸
 w Ո଒ׂԁ౳Ͱࢦఆ͞Εͨɺಛผͳి࿩൪߸ ߟ͑த

Slide 18

Slide 18 text

ͦΜͳંɺϏδωενʔϜ͔Β ࢓༷͕ग़͖ͯ·ͨ͠

Slide 19

Slide 19 text

جຊํ਑͸ ಛఆͷ৚݅ʹ֘౰͢Δి࿩ ൪߸ͳΒ1SFpY͚ͭͳ͍Ͱ΄͍͠Ͱ͢ ίϨσ
 Ϥϩd

Slide 20

Slide 20 text

ఏࣔ͞Εͨৄࡉͳ࢓༷ w ౳ͷٹٸͷి࿩൪߸
 ˠઃఆ͕༗ޮͳΒ1SFpYΛ෇͚ͳ͍Α͏ʹͯ͠΄͍͠ w ౳ͷϑϦʔμΠΞϧͷి࿩൪߸
 ˠઃఆ͕༗ޮͳΒ1SFpYΛ෇͚ͳ͍Α͏ʹͯ͠΄͍͠ w Ո଒ׂԁ౳Ͱࢦఆ͞Εͨɺಛผͳి࿩൪߸
 ˠϢʔβ͕1SFpYΛ෇͚ͳ͍ѼઌΛબ୒Ͱ͖Δ ແࢹϦετ Α͏ʹͯ͠ɺ
 ɹ֘౰ͷѼઌͳΒ1SFpYΛ෇͚ͳ͍Α͏ʹͯ͠΄͍͠ LXTL

Slide 21

Slide 21 text

͸͍ɺ͜ΕΒ͕ϏδωεϩδοΫͱ ϢʔεέʔεͰ͢

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ϏδωεϩδοΫͱ͸ dϏδωενʔϜ͕஌ͬͯΔ΂͖ϩδοΫ ࢓༷ d

Slide 24

Slide 24 text

ઌ΄ͲͷγϛϡϨʔτͰɺ ϏδωενʔϜ͚ͩͰܾఆͰ͖ͨ͜ͱ͸ Կ͔ ࢥ͍ͩͨ͠

Slide 25

Slide 25 text

ϏδωενʔϜͷճ౴ 1SFpYͷ൪߸͸ʁ
 ˠ๭3͔ࣾΒ࿈བྷ଴ͪͰ͢ 6*σβΠϯ͸͍ͭࠒͰ͖Δʁ
 ˠ6*νʔϜʹฉ͍ͯΈͳ͍ͱԿͱ΋ αʔόʔ࿈ܞͱ͔͸͋Δʁͳ͍ʁ
 ˠࠓ࣌఺Ͱ͸Կͱ΋ ͱ͔ͱ͔ຊདྷి࿩ྉ͕ۚ
 ͔͔Βͳ͍ి࿩൪߸ͷѻ͍͸ʁ
 ˠ1SFpYΛ͚ͭͳ͍ํ਑Ͱ ճ૝த

Slide 26

Slide 26 text

ϏδωενʔϜͷճ౴ 1SFpYͷ൪߸͸ʁ
 ˠ๭3͔ࣾΒ࿈བྷ଴ͪͰ͢ 6*σβΠϯ͸͍ͭࠒͰ͖Δʁ
 ˠ6*νʔϜʹฉ͍ͯΈͳ͍ͱԿͱ΋ αʔόʔ࿈ܞͱ͔͸͋Δʁͳ͍ʁ
 ˠࠓ࣌఺Ͱ͸Կͱ΋ ͱ͔ͱ͔ຊདྷి࿩ྉ͕ۚ
 ͔͔Βͳ͍ి࿩൪߸ͷѻ͍͸ʁ
 ˠ1SFpYΛ͚ͭͳ͍ํ਑Ͱ 3͕ࣾ౴͑Λ࣋ͬͯΔ σβΠϯνʔϜ͕౴͑ Λ࣋ͬͯΔ ະདྷͷࢲ͕ͨͪ౴͑Λ ͍࣋ͬͯΔ ϏδωενʔϜ͕౴͑ Λ͍࣋ͬͯͨ ճ૝த

Slide 27

Slide 27 text

ϏδωεϩδοΫͱ͸ ಛఆͷి࿩൪߸Ͱ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒ౳ͷٹٸͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒ౳ͷϑϦʔμΠϠϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wՈ଒ׂ౳ͷϢʔβ͕ࢦఆͨ͠Ѽઌʹ͸1SFpYΛ͚ͭͳ͍ w ϏδωενʔϜ ࢓༷νʔϜ ͕஌͍ͬͯΔ΂͖࢓༷ ϩδοΫ ͷࣄ w ϏδωενʔϜ͚ͩͰܾ·Βͳ͍ࣄ 6*ͷσβΠϯ σʔλͷѻ͍ 1SFpYͷ ൪߸ͳͲ ͸ϏδωεϩδοΫʹ͸ؚΊͳ͍ 6*σβΠϯ 1SFpYͷ൪߸ σʔλอଘͷ࢓༷

Slide 28

Slide 28 text

ϏδωεϩδοΫͱ͸ ಛఆͷి࿩൪߸Ͱ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒ౳ͷٹٸͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒ౳ͷϑϦʔμΠϠϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wՈ଒ׂ౳ͷϢʔβ͕ࢦఆͨ͠Ѽઌʹ͸1SFpYΛ͚ͭͳ͍ w ϏδωενʔϜ ࢓༷νʔϜ ͕஌͍ͬͯΔ΂͖࢓༷ ϩδοΫ ͷࣄ w ϏδωενʔϜ͚ͩͰܾ·Βͳ͍ࣄ 6*ͷσβΠϯ σʔλͷѻ͍ 1SFpYͷ ൪߸ͳͲ ͸ϏδωεϩδοΫʹ͸ؚΊͳ͍ 6*σβΠϯ 1SFpYͷ൪߸ σʔλอଘͷ࢓༷

Slide 29

Slide 29 text

ϏδωεϩδοΫͱ͸ w ϏδωενʔϜ ࢓༷νʔϜ ͕஌͍ͬͯΔ΂͖࢓༷ ϩδοΫ ͷࣄ w ϏδωενʔϜ͚ͩͰܾ·Βͳ͍ࣄ 6*ͷσβΠϯ σʔλͷѻ͍ 1SFpYͷ ൪߸ͳͲ ͸ϏδωεϩδοΫʹ͸ؚΊͳ͍ ಛఆͷి࿩൪߸Ͱ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒٹٸͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒϑϦʔμΠϠϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wແࢹϦετͷѼઌʹ͸1SFpYΛ͚ͭͳ͍ 6*σβΠϯ 1SFpYͷ൪߸ σʔλอଘͷ࢓༷ ٹٸͷి࿩ ൪߸ ϑϦʔμΠΞϧͷ൪߸ Ϣʔβ͕ࢦఆ ͨ͠ແࢹϦετ ઃఆͷ༗ޮͷঢ়ଶ

Slide 30

Slide 30 text

͡Ό͋ϢʔεέʔεͬͯԿʁ
 ϏδωεϩδοΫͷ͜ͱʁ

Slide 31

Slide 31 text

Ϣʔεέʔεͱ͸ dϏδωεϩδοΫΛ࢖ΘΕΔέʔε͝ͱʹ෼ׂͨ͠΍ͭd

Slide 32

Slide 32 text

ϏδωεϩδοΫ ಛఆͷి࿩൪߸Ͱ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒٹٸͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒϑϦʔμΠϠϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wແࢹϦετͷѼઌʹ͸1SFpYΛ͚ͭͳ͍

Slide 33

Slide 33 text

ϏδωεϩδοΫ ಛఆͷి࿩൪߸Ͱ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒٹٸͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒϑϦʔμΠϠϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wແࢹϦετͷѼઌʹ͸1SFpYΛ͚ͭͳ͍ ͜ΕΒ͕Ϣʔεέʔε

Slide 34

Slide 34 text

Ϣʔεέʔεͱ͸ w ϏδωεϩδοΫΛ࢖͏ Ϣʔε έʔε͝ͱʹ෼ׂͨ͠΋ͷ w Ϣʔεέʔεͷू߹ମ͕ϏδωεϩδοΫʹͳΔ ಛఆͷి࿩൪߸Ͱ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒٹٸͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wઃఆ͕༗ޮͳΒϑϦʔμΠϠϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ wແࢹϦετͷѼઌʹ͸1SFpYΛ͚ͭͳ͍

Slide 35

Slide 35 text

ϏδωεϩδοΫϢʔεέʔεͷҰݴ·ͱΊ w ϏδωεϩδοΫͱ͸ɺ
 ϏδωενʔϜ ࢓༷νʔϜ ͕஌͍ͬͯΔ΂͖࢓༷ ϩδοΫ ͷࣄ w Ϣʔεέʔεͱ͸ɺ
 ϏδωεϩδοΫΛ࢖͏ Ϣʔε έʔε͝ͱʹ෼ׂͨ͠΋ͷ

Slide 36

Slide 36 text

ͰɺϢʔεέʔεͱ͔
 ϏδωεϩδοΫ͕ղͬͯ
 Կ͕خ͍͠ͷʁ

Slide 37

Slide 37 text

ϏδωεϩδοΫϢʔεέʔεͷϝϦοτ dίʔυ͕࢓༷ॻd

Slide 38

Slide 38 text

ઃఆ͕༗ޮͳΒϑϦʔμΠΞϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍
 ͷ࣮૷ import io.reactivex.Observable import jp.rakutencall.data.datasource.contacts.ContactsDataSource import jp.rakutencall.data.datasource.settings.SettingDataSource import jp.rakutencall.data.entity.number.PhoneNumber import jp.rakutencall.data.entity.prefix.Prefix import jp.rakutencall.utils.commons.ExecutionThreads import jp.rakutencall.utils.commons.IoUseCase import jp.rakutencall.utils.commons.UseCase import javax.inject.Inject class FreeDial @Inject constructor( private val settingDataSource: SettingDataSource, private val contactsDataSource: ContactsDataSource, executionThreads: ExecutionThreads) : IoUseCase(executionThreads) { override fun execute(requestValue: Request): Observable { return settingDataSource.getFreeDialEnable() .flatMap { if (it) validateFreeDial(requestValue) else Observable.just(Response(requestValue.prefix)) } } private fun validateFreeDial(requestValue: Request): Observable { return contactsDataSource.getFreeDialPrefix().map { if (it.any { it.startWithPrefix(requestValue.phoneNumber) }) Response(Prefix.generateEmptyPrefix()) } else { Response(requestValue.prefix) } }.defaultIfEmpty(Response(requestValue.prefix)) } data class Request(val prefix: Prefix, val phoneNumber: PhoneNumber) UseCase.RequestValue data class Response(val prefix: Prefix) : UseCase.ResponseValue }

Slide 39

Slide 39 text

"OESPJEʹ΋42-JUFʹ΋ґଘͯ͠ͳ͍ૄ݁߹ͳΫϥε import io.reactivex.Observable import jp.rakutencall.data.datasource.contacts.ContactsDataSource import jp.rakutencall.data.datasource.settings.SettingDataSource import jp.rakutencall.data.entity.number.PhoneNumber import jp.rakutencall.data.entity.prefix.Prefix import jp.rakutencall.utils.commons.ExecutionThreads import jp.rakutencall.utils.commons.IoUseCase import jp.rakutencall.utils.commons.UseCase import javax.inject.Inject

Slide 40

Slide 40 text

࢓༷ͦͷ··ͳ࣮૷ ઃఆ͕༗ޮͳΒd class FreeDial @Inject constructor( private val settingDataSource: SettingDataSource, private val contactsDataSource: ContactsDataSource, executionThreads: ExecutionThreads) : IoUseCase(executionThreads) { override fun execute(requestValue: Request): Observable { return settingDataSource.getFreeDialEnable() .flatMap { if (it) validateFreeDial(requestValue) else Observable.just(Response(requestValue.prefix)) } }

Slide 41

Slide 41 text

࢓༷ͦͷ··ͳ࣮૷ ϑϦʔμΠΞϧͷ൪߸ʹ͸1SFpYΛ͚ͭͳ͍ private fun validateFreeDial(requestValue: Request): Observable { return contactsDataSource.getFreeDialPrefix().map { if (it.any { it.startWithPrefix(requestValue.phoneNumber) }) { Response(Prefix.generateEmptyPrefix()) } else { Response(requestValue.prefix) } }.defaultIfEmpty(Response(requestValue.prefix)) } data class Request(val prefix: Prefix, val phoneNumber: PhoneNumber) : UseCase.RequestValue data class Response(val prefix: Prefix) : UseCase.ResponseValue }

Slide 42

Slide 42 text

ϏδωεϩδοΫϢʔεέʔεͷϝϦοτ w ૄ݁߹ͳΫϥε 3Y+BWBͱ%BHHFSʹ͔͠ґଘͯ͠ͳ͍ 
 ˠJ04΍αʔόʔ΁ͷҠ২͕༰қʹͰ͖Δ
 ˠ࢓༷ʹ௚݁͢ΔϏδωεϩδοΫΛ؆୯ʹςετͰ୲อͰ͖Δ w ࢓༷ͦͷ··͕࣮૷ʹͳ͍ͬͯΔ
 ˠՄಡੑ͕ΊͪΌͪ͘Όߴ͍ίʔυʹͳΔ
 ˠJ04ΤϯδχΞ΍αʔόʔνʔϜͱιʔεΛݩʹͯٞ͠࿦Ͱ͖Δ
 ͋ΘΑ͘͹ϏδωενʔϜͱ΋

Slide 43

Slide 43 text

Ұݴ·ͱΊ d΅͘ͷ͔Μ͕͑ͨ࠷ڧͷ6TF$BTFͷ࡞Γํͱ͔৭ʑd ࢓༷͸ ϏδωεϩδοΫ͸

Slide 44

Slide 44 text

Ұݴ·ͱΊ w ϏδωεϩδοΫͱ͸ɺ
 ϏδωενʔϜ ࢓༷νʔϜ ͕஌͍ͬͯΔ΂͖࢓༷ ϩδοΫ ͷࣄ w Ϣʔεέʔεͱ͸ɺ
 ϏδωεϩδοΫΛ࢖͏ Ϣʔε έʔε͝ͱʹ෼ׂͨ͠΋ͷ w ͍͖͞ΐʔͳϢʔεέʔεͷ࡞Γํͱ͸ɺ
 ϏδωενʔϜ͚ͩͷձ࿩ͰܾఆͰ͖ͨ࢓༷͕Ϣʔεέʔε w ͍͖͞ΐʔͳϝϦοτͱ͸ɺ
 ΊͬͪΌૄ݁߹ͰՄಡੑͷߴ͍ίʔυ͕Ͱ͖Δ

Slide 45

Slide 45 text

͓ΘΓ