Slide 1

Slide 1 text

υϝΠϯۦಈઃܭͱ Spring BootΛ׆༻ͨ͠ ΞϓϦέʔγϣϯ։ൃ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 2

Slide 2 text

૝ఆ͢ΔϦεφʔ • Spring BootΛ৮ͬͨ͜ͱ͕͋Δ • DDDʹ͍ͭͯฉ͍ͨ͜ͱ͕͋Δ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 3

Slide 3 text

ࣗݾ঺հ: @zhanpon • 2017೥10݄ɿϠϑʔʹ৽ଔೖࣾ • 2018೥4݄ɿJava, Spring BootΛ࢖͍͸͡ΊΔ • 2018೥5݄ɿJJUG CCC 2018 SpringʹॳࢀՃ ձࣾͰͷओͳ׆ಈ • ਪનγεςϜͷ։ൃɾӡ༻ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 4

Slide 4 text

DDDͱ͸Կ͔ • υϝΠϯۦಈઃܭ (Domain-Driven Design) ͷུশ • Eric Evans ͷ "Domain-Driven Design: Tackling Complexity in the Heart of Software" ͱ͍͏ຊ͕ݩʹͳ͍ͬͯΔ • ෯޿͍࿩୊͕͋ͬͯҰݴͰ͸આ໌Ͱ͖ͳ͍ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 5

Slide 5 text

ʢࢲʹͱͬͯʣDDDͱ͸Կ͔ • ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάΛݱ࣮ͷෳࡶͳγεςϜʹద ༻͢ΔͨΊͷํ๏࿦ • SOLIDͳઃܭΛ࣮ݱ͢ΔͨΊͷσβΠϯύλʔϯʢ୯Ұ੹೚ͷݪ ଇɺ։์/ด࠯ͷݪଇ……ʣ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 6

Slide 6 text

Ξ΢τϥΠϯ 1. DDDΛ΍ΔϞνϕʔγϣϯ 2. DDDΛ࣮ફͨ͠ܦݧ 3. ٕज़తͳTIPS Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 7

Slide 7 text

Part I: DDDΛ΍ΔϞν ϕʔγϣϯ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 8

Slide 8 text

ࣦഊஊ • ۀ຿ΞϓϦέʔγϣϯΛSpring BootͷνϡʔτϦΞϧͷԆ௕Ͱ ࣮૷ͨ͠ΒͻͲ͍͜ͱʹͳͬͨ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 9

Slide 9 text

Α͋͘ΔSpring Bootͷ νϡʔτϦΞϧ 1. ΤϯςΟςΟΛ࣮૷͢Δ 2. ϦϙδτϦΛఆٛ͢Δ 3. ίϯτϩʔϥʔΛ࣮૷͢Δ 4. ׬੒ʂ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 10

Slide 10 text

ΤϯςΟςΟΛ࣮૷͢Δ @Entity public class User { @Id private String id; private String fullName; // getterͱsetter } Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 11

Slide 11 text

ϦϙδτϦΛఆٛ͢Δ public interface UserRepository extends CrudRepository { } Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 12

Slide 12 text

ίϯτϩʔϥʔΛ࣮૷͢Δ @RestController public class UserController { @Autowired UserRepository userRepository; @GetMapping("/users") public List allUsers() { return userRepository.findAll(); } } Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 13

Slide 13 text

׬੒ʂ • ͋ͱ͸ UserController ʹϩδοΫΛॻ͍͍͚ͯ͹OK (?) Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 14

Slide 14 text

໰୊఺ • UserΫϥεͷΧϓηϧԽ͸ʁ • UserController ͕ࡍݶͳ͘ෳࡶԽ͢Δ • ୯ମςετ͕ࠔ೉ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 15

Slide 15 text

υϝΠϯϞσϧශ݂঱ • ୯ͳΔखଓ͖ܕઃܭʹͳͬͯΔ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 16

Slide 16 text

Part II: DDDΛ࣮ફͨ͠ ࣮ྫ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 17

Slide 17 text

ࣾ಺ͷϓϩδΣΫτ • ػցֶशͷ੒Ռ෺Λຖ೔ࣗಈͰσϓϩΠ͍ͨ͠ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 18

Slide 18 text

φΠʔϒʹ࣮૷ͨ͠Β • ϦϙδτϦʹΞΫηε͢ΔΫϥε (DockerRegistryAccessor) ͱ࣮ߦ؀ڥʹσϓϩΠ͢ΔΫϥε (KubernetesDeployer) Λ༻ ҙ͢Δ • DockerRegistryAccessor ͕࠷৽൛Λऔͬͯ͘Δ • KubernetesDeployer ͕ͦΕΛσϓϩΠ͢Δ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 19

Slide 19 text

φΠʔϒʹ࣮૷ͨ͠Β • ͱΓ࣮͋͑ͣ૷Ͱ͖ͦ͏ɻ͔͠͠΋ͬͱෳࡶʹͳͬͨΒʁ • UserControllerͷΑ͏ʹͲΜͲΜෳࡶʹͳΔ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 20

Slide 20 text

૿͑Δཁ݅ • ࣗಈσϓϩΠ͢Δ࣌ؒଳΛ੍ݶ͍ͨ͠ • ٳ೔͸σϓϩΠΛېࢭ͍ͨ͠ • ࠷৽൛͡Όͳͯ҆͘ఆ൛ΛσϓϩΠ͍ͨ͠ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 21

Slide 21 text

υϝΠϯϞσϧΛݟग़͢ • ιϑτ΢ΣΞγεςϜͷ͏ͪɺࣗ෼͕ݩʑղ͖͔ͨͬͨ໰୊Λ දݱ͢Δίʔυͷ઎ΊΔྔ͸গͳ͍ • ͦͷ෦෼͕WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫͳͲͷٕज़త ৄࡉʹຒ΋Εͳ͍Α͏ʹ͍ͨ͠ • υϝΠϯ૚͕ٕज़తৄࡉʹґଘ͠ͳ͍Α͏ʹ͢Δ (DIP) Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 22

Slide 22 text

ࠓճͷυϝΠϯϞσϧ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 23

Slide 23 text

Version • ఆظతʹੜ੒͞ΕΔػցֶशͷ੒Ռ෺ɻྫɿݘೣ෼ྨثͷ2018 ೥12݄15೔9࣌όʔδϣϯ @Value public class Version { private final String modelName; private final Instant instant; } Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 24

Slide 24 text

VersionSet • Setͷϥούʔ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 25

Slide 25 text

Policy public enum Policy { NONE((versions, t) -> Optional.empty()), LATEST((versions, t) -> { return versions.latest(); }) private BiFunction> policy; Policy(BiFunction> policy) { this.policy = policy; } } Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 26

Slide 26 text

VersionCatalog public interface VersionCatalog { VersionSet list(String modelName); } Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 27

Slide 27 text

Deployer public interface Deployer { void deploy(Version version); } Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 28

Slide 28 text

࢓༷มߋ • ػցֶशͷ੒Ռ෺ΛஷΊΔ৔ॴ͕Docker Registry͔ΒΦϒδΣ ΫτετϨʔδʹͳͬͨ ! • VersionCatalog ͷ࣮૷ΫϥεΛม͑Δ͚ͩ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 29

Slide 29 text

DDDΛ΍ͬͯྑ͔ͬͨ͜ͱ • ࢓༷มߋָ͕ • ςετ͕͠΍͍͢ • ࣗ෼ͷ໰୊ʹର͢Δཧղ͕ίʔυͱͯ͠දݱ͞ΕΔ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 30

Slide 30 text

࠷ޙʹ ͢΂ͯͷιϑτ΢ΣΞγεςϜ͸ɺεςʔΫϗϧμʔʹ2ͭͷҟͳ ΔՁ஋Λఏڙ͢ΔɻͦΕ͸ʮৼΔ෣͍ʯͱʮߏ଄ʯͰ͋Δɻ — Robert C. Martin Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 31

Slide 31 text

͓·͚ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 32

Slide 32 text

Part III: ٕज़తͳTIPS Copyright © 2018 Yahoo Japan Corporation. All rights reserved.

Slide 33

Slide 33 text

ϓϩδΣΫτߏ੒ • domainͱapplicationͱ͍͏2ͭͷGradleϓϩδΣΫτΛ࡞ͬͨ • domain͸Javaͷඪ४ϥΠϒϥϦʹ͔͠ґଘ͍ͯ͠ͳ͍ • application͸domainʹґଘ͍ͯ͠Δɻத਎͸;ͭ͏ͷSpring Boot ΞϓϦέʔγϣϯ Copyright © 2018 Yahoo Japan Corporation. All rights reserved.