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
Springで始めるWebApplication / Start Spring Web App...
Search
yachiy
November 20, 2019
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Springで始めるWebApplication / Start Spring Web Application
yachiy
November 20, 2019
More Decks by yachiy
See All by yachiy
同人プロダクトのリプレース案件における技術的負債解消への取り組み / Addressing Technical Debt in the Revamp of Doujin Products
yachiy
0
24
AWS事始め / Introduction AWS
yachiy
1
77
RDRAとDDDを実践していく上でのCleanArchitectureの同異点 / RDRA and Clean Architecture differences
yachiy
0
140
Springで始める3層アーキテクチャ / start three layer architecture with spring
yachiy
0
120
議事録のとり方 / how to write proceeding
yachiy
0
170
値オブジェクトの悩みポイントとどう付き合っていくか
yachiy
1
3k
Featured
See All Featured
Bash Introduction
62gerente
615
220k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
How to train your dragon (web standard)
notwaldorf
97
6.8k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
A designer walks into a library…
pauljervisheath
211
25k
Typedesign – Prime Four
hannesfritz
42
3.2k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
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ΞϓϦέʔγϣϯΛߏஙͨ͠ ˠ࣍ۀΞϓϦέʔγϣϯͷҰൠతͳΞʔΩςΫνϟͰ͋Δ ΞʔΩςΫνϟʹֶ͍ͭͯͿʢͱ͍͍͔ʣ