Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Springで始めるWebApplication / Start Spring Web Application
yachiy
November 20, 2019
0
80
Springで始めるWebApplication / Start Spring Web Application
yachiy
November 20, 2019
Tweet
Share
More Decks by yachiy
See All by yachiy
AWS事始め / Introduction AWS
yachiy
1
27
RDRAとDDDを実践していく上でのCleanArchitectureの同異点 / RDRA and Clean Architecture differences
yachiy
0
110
Springで始める3層アーキテクチャ / start three layer architecture with spring
yachiy
0
51
議事録のとり方 / how to write proceeding
yachiy
0
150
値オブジェクトの悩みポイントとどう付き合っていくか
yachiy
1
1.3k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
261
37k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
29
4.3k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
920
ReactJS: Keep Simple. Everything can be a component!
pedronauck
655
120k
What's in a price? How to price your products and services
michaelherold
229
9.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
37
3.3k
Rebuilding a faster, lazier Slack
samanthasiow
62
7.2k
GraphQLとの向き合い方2022年版
quramy
16
8.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
10
3.5k
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
Designing for Performance
lara
597
63k
Transcript
4QSJOHͰ࢝ΊΔ 8FCΞϓϦέʔγϣϯ
·ͣॳΊͱΓ͋͑ͣ৮ͬͯಈ͔͢
IUUQTTUBSUTQSJOHJP 4QSJOHΞϓϦέʔγϣϯΛ࢝ΊΔʹ͋ͨͬͯ؆୯ʹܗ Λ࡞Δ͜ͱ͕Ͱ͖Δެࣜ
(SBEMFͷϓϩδΣΫτͱͯ͠࡞ ˞(SBEMFʹ͍ͭͯޙड़ ݴޠ+BWBΛ༻ 4QSJOH#PPUͷόʔδϣϯΛ༻ ύοέʔδ໊ʹͳΔ ΞϓϦέʔγϣϯ໊
4QSJOH8FCΛ͍͍ͨͷͰݕࡧ ϘοΫεʹʮ8FCʯͱ͍Εɺ 4QSJOH8FCΛબ ԡԼ͢Δͱμϯϩʔυ͕࢝·Δ ʢΞϓϦέʔγϣϯ໊[JQʣ
ల։͢Δͱ͜Μͳײ͡
࣮͏ಈ͔ͤΔ
HSBEMFXCPPU3VO ల։ͨ͠σΟϨΫτϦ·ͰλʔϛφϧͰҠಈͯ͠ Λ࣮ߦ
͜Ε͕ग़͍ͯΕ0, (SBEMFͷϓϩάϨεόʔతͳͷˋͰࢭ·Δ͜ͱ͋Δ͔ʜ
IUUQMPDBMIPTU
Τϥʔϖʔδ͕දࣔ͞ΕΔ ˠԿઃఆ͍ͯ͠ͳ͍ͷͰવͷਖ਼͍͠ڍಈ ͋Θͯͳͯ͘0,
λϒʹͪΌΜͱ4QSJOHͷGBWJDPO͕දࣔ͞Ε͍ͯΔͣ
ͪͳΈʹCPPU3VO͍ͯ͠ͳ͍ঢ়ଶͰIUUQMPDBMIPTU ʹΞΫηεͯ͠ʢ$ISPNFͷ߹ʣ͜͏ͳΔͷͰ4QSJOH ͷΤϥʔϖʔδ͕ग़Δͷ͏·͘ߦͬͯΔূڌ
ಈ͘ಈ͍ͨ
ͰͳΜͰಈ͔͘Α͘Θ͔Βͳ͍
ݸͣͭݟ͍ͯ͘ Ұؾʹදࣔ͞ΕΔͱ಄·ΘΒͳ͘ͳͬͯ Θ͔Βͳ͘ͳΔͷͰ
࠶ܝ
·ͣ͜͜
None
൴ΒϏϧυπʔϧͱ͍͍·͢
ϏϧυπʔϧJTԿ
Ϗϧυʹؔ͢Δ͜ͱΛΑ͠ͳʹͬͯ͘ΕΔ
wίϯύΠϧ wςετ w੩తղੳ wϥΠϒϥϦͷґଘཧ FUDʜ ͠Ϗϧυπʔϧ͕ͳ͔ͬͨΒʜ ϑΝΠϧͣͭखͰKBWBDίϚϯυୟ͍ͯ ίϯύΠϧͨ͠Γςετ࣮ߦͨ͠Γʜ ࣗͰݸͣͭϥΠϒϥϦམͱ͖ͯͯ͠ Ϋϥεύε௨ͨ͠Γʜ
ͪΐͬͱઢ
खಈͰ+BWBϑΝΠϧΛίϯύΠϧ͢Δʹ
)FMMP8PSMEKBWB public class HelloWorld { public static void main(String[] args)
{ System.out.println("Hello World!"); } } ˢͷϑΝΠϧΛAKBWBD)FMMP8PSMEKBWBAͰίϯύΠϧ ˠ)FMMP8PSMEDMBTT͕ੜ͞ΕΔ ˠAKBWB)FMMP8PSMEAΛ࣮ߦ ˠ)FMMP8PSME͕ग़ྗ͞ΕΔ
ݸݸ+BWBϑΝΠϧΛίϯύΠϧͯ͠ΫϥεϑΝΠϧ Λੜ͢Δͷ͠ΜͲ͍ ·ͱΊͯ໘ݟͯ͘ΕΔϏϧυπʔϧΛར༻͠ͳ͍खͳ͍
ศརͳͷͰੋඇϏϧυπʔϧΛ׆༻͍͖͍ͯͨ͠
͡Ό͋Կ͕ҧ͏ͷ͔ ˠهड़͕ҧ͏ɺͰ͖Δ͜ͱ͕ҧ͏ʢࠩҟׂѪʣɺྺ࢙͕ҧ͏
ޙൃ ˠଞͷϏϧυπʔϧͷ͍͍ͱ ͜ΖΛٵऩͯ͠ੜ
ࠓ͔Β࢝ΊΔͳΒ(SBEMFͰྑ͍ʢݸਓͷײͰ͢ʣ
࣍͜͜
ࠓճ Ͱॻ͚͘Ͳ Ͱ4QSJOHΛར༻Ͱ͖ΔʢࠞࡏՄʣ
࣍͜͜
όʔδϣϯʹΑͬͯαϙʔτ͍ͯ͠Δ w +BWBͷόʔδϣϯ w ґଘ͍ͯ͠ΔϥΠϒϥϦͷόʔδϣϯ ͕ҧͬͨΓ͢Δ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUXJLJ ࡉ͔͍ࠩҟϦϦʔεϊʔτΛࢀর
࣍͜͜
(SPVQ "SUJGBDUˠQBDLBHF DPNZBDIJZTQSJOH JOUSPEVDUJPO DPNZBDIJZTQSJOHJOUSPEVDUJPO ΞϓϦέʔγϣϯͷݖརݩॴଐɺ ཧମ੍ ΞϓϦέʔγϣϯ໊ ԼʹιʔεΛهड़͍ͯ͘͠
࣍͜͜
Α͘͏ґଘؔͱͬ͘͟Γ֓ཁʢओ؍ʣ 4QSJOH8FC 8FCαʔϏεΛͭ͘ΔͨΊʹ༻͍Δجૅత ͳػೳ 4QSJOH%BUB+1" σʔλϕʔεͷଓɺೖग़ྗɺσʔλૢ࡞ ͳͲʹؔ͢Δػೳ -PNCPL (FUUFS 4FUUFSͷهड़ΛΞϊςʔγϣϯΛ
ॻ͘͜ͱͰলུͰ͖Δ
ݱঢ়ʢ࠶ܝʣ
)FMMP8PSME͍ͬͯ͘
ͨΊʹ·ͣ։ൃڥΛ४උ͢Δ
+BWB 4QSJOH (SBEMFͳ։ൃʹ ͕͓͢͢Ί $PNNVOJUZΤσΟγϣϯͳΒແྉ ʢͦͯ͠ී௨ʹ͏ʹࠔΒͳ͍ʣ
ิ͕ϦΞϧλΠϜ ίʔυδΣωϨʔτ͕ॆ࣮͍ͯ͠Δ ϓϥάΠϯ๛ ผͷݴޠͷऔΓѻָ͍ FUDʜɹɹɹ ͓͢͢ΊϙΠϯτʢओ؍ʣ Λଧͬͨͱ͖ʹ͏͜Ε͕ग़ͯΔ
IUUQTXXXKFUCSBJOTDPNJEFBEPXOMPBE ͓͍ͷ04Λબ ͪ͜ΒΛબ
μϯϩʔυ͕ऴΘͬͨΒΠϯετʔϥʹ ैͬͯΠϯετʔϧ
ىಈ
ॳճͳͷͰಛʹJNQPSU͢Δ ઃఆͳ͍ͣ
͏ςʔϚΛબɻ ͨͩഎܠࠇͷ΄͏͕ѹతʹʹ༏͍͠ͷͰͦΕΒΛਪ ˠ͋ͱͣͬͱ/FYU͔Βͷ4UBSUVTJOHJOUFMMJK*%&"Λબ
ͪ͜ΒΛબ 0QFOΛ͓ͨ͠Β4QSJOH*OJUJBMJ[SͰੜͨ͠ ϓϩδΣΫτʢϑΥϧμʣΛબ
͜ͷνΣοΫϘοΫε֎͢ͱ ىಈͷʹग़ͯ͜ͳ͘ͳΔ 5JQT͕ग़͖ͯͨΒோΊͯྑ͍͔ ཁΒͳ͚Ε$MPTF
࠷ॳTZODͱͳ͍ͬͯͯಡΈࠐΈ ऴΘΔͱTVDDFTTGVMʹͳΔ
ᶃ ᶄ ᶅ ൪߸ͷॱ൪Ͱԡ͍ͯ͘͠ ͱCPPU3VO͕Ͱͯ͘Δɻ ͜ΕΛԡ͢ͱίϚϯυ ͰHSBEMFXCPPU3VO͠ ͨͷͱಉ༷ʹΞϓϦέʔ γϣϯΛىಈͰ͖Δ
։ൃڥͷ४උྃ
վΊͯ)FMMP8PSME
IUUQMPDBMIPTUʹΞΫηε͢Δͱ )FMMP8PSMEͱը໘ʹग़ྗ͍ͨ͠
None
!4QSJOH#PPU"QQMJDBUJPO ˠ༩ͨ͠Ϋϥε͕4QSJOH#PPUͷΞϓϦέʔγϣϯͰ͋Δ͜ͱΛද͢
!4QSJOH#PPU"QQMJDBUJPO ˠ༩ͨ͠Ϋϥε͕4QSJOH#PPUͷΞϓϦέʔγϣϯͰ͋Δ͜ͱΛද͢ ˠ!$POpHVSBUJPO !&OBCMF"VUP$POpHVSBUJPO !$PNQPOFOU4DBOͳͲΛ༩ͨ͠ͷͱಉٛ
࣮ࡍத͜Μͳײ͡
ˠ DPOUSPMMFSύοέʔδΛ࡞Δ
$POUSPMMFSˠਓؒͱγεςϜͷڥք
ˠ )FMMP8PSME$POUSPMMFS ΫϥεΛ࡞
Ͱ͖ͨΫϥεʹॲཧΛهड़͍ͯ͘͠
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } } Ͱ͖ͨΒCPPU3VOͯ͠IUUQMPDBMIPTUʹΞΫηε
ղઆ
)FMMP8PSME͕ग़ྗ͞ΕΔ
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } }
!3FTU$POUSPMMFS ˠ8FC"1*༻ʢ+TPOͷσʔλΛฦ͢ʣͷίϯτϩʔϥͰ༻ ˠΓίϯςϯπʢ+TPOͱ͔9.-ͳͲ͕Α͘༻͍ΒΕΔʣ
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } }
!3FRVFTU.BQQJOH ˠ!3FRVFTU.BQQJOHͷҾͷύεʹΞΫηε͞ΕͨΒर͏ ˠϝιουͰͳ͘$POUSPMMFSΫϥεࣗମʹ͚ͭΔ͜ͱͰϝιο υͰͷ.BQQJOHͷهड़Λলུͯ͠ॻ͚Δ
package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/")
public class HelloWorldController { @GetMapping("") public String helloWorld() { return "Hello World"; } }
!(FU.BQQJOH ˠ(FUͰࢦఆ͞ΕͨύεʹΞΫηε͞ΕͨΒर͏ ˠ!3FRVFTU.BQQJOH WBMVFlQBUIz NFUIPE3FRVFTU.FUIPE(&5 Ͱಉ͡
࣮ݧ package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/hello") public class HelloWorldController { @GetMapping("/hello1") public String helloWorld1() { return "Hello World1"; } @GetMapping("/hello2") public String helloWorld2() { return "Hello World2"; } }
ˠ☓ IFMMPˠ☓ IFMMPˠ☓ IFMMPˠ☓ IFMMPIFMMPˠ)FMMP8PSME IFMMPIFMMPˠ)FMMP8PSME ͜͏ͳΔͣʜ
㱻 package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/hello") public class HelloWorldController { @GetMapping("/hello1") public String helloWorld1() { return "Hello World1"; } @GetMapping("/hello2") public String helloWorld2() { return "Hello World2"; } } package com.yachiy.spring.introduction.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @GetMapping("/hello/hello1") public String helloWorld1() { return "Hello World1"; } @RequestMapping(value = “/hello/hello2”, method = RequestMethod.GET) public String helloWorld2() { return "Hello World2"; } } ಉ͜͡ͱΛ࣮ݱͯ͠Δ ˠͩͬͨΒࠨͷ΄͏͕Θ͔Γ͍͢
)FMMP8PSMEऴΘΓ
࣍ը໘Λฦ͢
plugins { id 'org.springframework.boot' version '2.1.8.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java' } group = 'com.yachiy.spring' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' testImplementation 'org.springframework.boot:spring-boot-starter-test' } CVJMEHSBEMF ґଘؔͷՃΛ͍ͨ͠߹EFQFOEFODJFTʹՃ͍ͯ͘͠
ˠςϯϓϨʔτΤϯδϯ ˠܗͷ)5.-ʹ4QSJOHଆͷϩδοΫΛຒΊࠐΉͨΊͷͷͱ ࠓཧղ͓͚ͯ͠0, 5IZNFMFBG ৄ͘͠ IUUQTXXXUIZNFMFBGPSHEPDUVUPSJBMTVTJOHUIZNFMFBG@KBIUNM
package com.yachiy.spring.introduction.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public
class HelloWorldController { @GetMapping("/") public String hello(Model model) { model.addAttribute("value", "͜Μʹͪ"); return "hello"; } } )FMMP8PSME$POUSPMMFSKBWB
package com.yachiy.spring.introduction.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public
class HelloWorldController { @GetMapping("/") public String hello(Model model) { model.addAttribute("value", "͜Μʹͪ"); return "hello"; } } )FMMP8PSME$POUSPMMFSKBWB !3FTU$POUSPMMFSˠ!$POUSPMMFS Ҿʹ.PEFMΛड͚औΔ ଐੑʹ,FZͱ7BMVFΛՃ
!$POUSPMMFS ˠը໘Λฦ͢ίϯτϩʔϥͰ༻ ˠΓ7JFXͷભҠઌ ˠࠓճͷ߹IFMMPΛฦ٫͍ͯ͠ΔͷͰ UFNQMBUFTIFMMPIUNM͕ର
ˠը໘ʹΛड͚ͨ͢ΊͷΠϯλʔϑΣʔε ˠNPEFMBUUSJCVUF LFZ WBMVF Λݺͼग़ͯ͠Λड͚͢ ˠଞͷड͚͠ํҎԼͷυΩϡϝϯτࢀর IUUQTEPDTTQSJOHJPTQSJOHEPDTDVSSFOUKBWBEPDBQJ PSHTQSJOHGSBNFXPSLVJ.PEFMIUNM .PEFM
SFTPVSDFTUFNQMBUFTԼʹIFMMPIUNMΛ࡞ ˠSFTPVSDFTUFNQMBUFT͕ςϯϓϨʔτஔ͖ ˠωετՄೳʢྫɿUFNQMBUFTHSPVQ UFNQMBUF/BNFIUNMʣ
<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Hello Thymeleaf</title>
</head> <body> <h1 th:text="${value}"></h1> </body> </html> IFMMPIUNM
<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Hello Thymeleaf</title>
</head> <body> <h1 th:text="${value}"></h1> </body> </html> \LFZ^ͰWBMVFΛࢀরͰ͖Δ IFMMPIUNM
͜ΕͰCPPU3VOˠMPDBMIPTUʹΞΫηε͢Δͱʜ
ͨ͠จࣈྻ͕ը໘ʹදࣔ͞ΕΔ͜ͱΛ֬ೝ
ը໘ͷදࣔ·ͰͰ͖ͨ
·ͱΊ
4QSJOHΛͬͯ؆୯ͳ8FCΞϓϦέʔγϣϯΛߏஙͨ͠ ˠ࣍ۀΞϓϦέʔγϣϯͷҰൠతͳΞʔΩςΫνϟͰ͋Δ ΞʔΩςΫνϟʹֶ͍ͭͯͿʢͱ͍͍͔ʣ