Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
1400万ユーザーのWebサービスを 15年運用して考える、 Javaである理由
Search
masaozi3
May 18, 2019
Technology
4.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1400万ユーザーのWebサービスを 15年運用して考える、 Javaである理由
masaozi3
May 18, 2019
More Decks by masaozi3
See All by masaozi3
異動した瞬間にリモートワーク生活になった人の話
masao0127s
0
380
モチベーション革命て本を読んだ話
masao0127s
0
110
Kotlinでアプリ書いてみた
masao0127s
4
1.6k
Other Decks in Technology
See All in Technology
Building applications in the Gemini API family.
line_developers_tw
PRO
0
3.1k
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
230
20260619 私の日常業務での生成 AI 活用
masaruogura
1
130
AIのReact習熟度を測る
uhyo
2
200
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
860
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
370
フロンティアAIのゲート化と地政学リスク
nagatsu
0
130
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
310
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
610
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
140
やさしいA2A入門
minorun365
PRO
12
1.8k
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
140
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
Become a Pro
speakerdeck
PRO
31
6k
First, design no harm
axbom
PRO
2
1.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Everyday Curiosity
cassininazir
0
230
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Making Projects Easy
brettharned
120
6.7k
Transcript
ϑϦϡʔגࣜձࣾླਅੜ !NBTBP[Jʣ ສϢʔβʔͷ8FCαʔϏεΛ ӡ༻ͯ͠ߟ͑Δɺ +BWBͰ͋Δཧ༝
w ϑϦϡʔגࣜձࣾ!ژ w ࣾձਓྺ+BWBྺ w +BWBͱ4QSJOHͰz(*3-4Λ)"11:ʹz͢ΔࣄΛ͍ͯ͠·͢ w େֶ࣌1ZUIPOͰ8FCΞϓϦΛ։ൃ ͖ͳͷ ษڧձͷελοϑɺϊϕϧςΟͷൃɺ͓͍͍͓͠ञ
ϔΞΧϥʔϒϦʔνɺͷૹঢ়گΛோΊΔ ླਅੜ !NBTBP[J !2 ʘ·͓͞Ͱ͢ʗ w w w
w ࠓͷΰʔϧ w ͷ͖͔͚ͬ w ฐࣾͷαʔϏεͱٕज़બͷ w ʑͷӡ༻͔ΒΈΔ+BWBͰ͋Δཧ༝ w ʲ͓·͚ʳ+%,ͷҠߦͷ
w ݁ w ͓͠Βͤ ࠓ͢͜ͱ !3 ੩͔ʙʹฉ͘ΑΓ ΘʔΘʔݴ͍ͳ͕Β ฉ͍ͯΒ͑Εخ͍͠Ͱ͢ʂ
w ࠓͷΰʔϧ w ͷ͖͔͚ͬ w ฐࣾͷαʔϏεͱٕज़બͷ w ʑͷӡ༻͔ΒΈΔ+BWBͰ͋Δཧ༝ w ʲ͓·͚ʳ+%,ͷҠߦͷ
w ݁ w ͓͠Βͤ ࠓ͢͜ͱ !4 ʮӡ༻ͯ͠ʯͱ͍͍ͭͭ ϲ݄͔͠ݟͯͳ͍ͷͰ ௐͨใ͋Γ·͢
ࠓͷΰʔϧ
!6 ʮ+BWB͕దͨ͠αʔϏεͱԿ͔ʯ ͷҰͭͷղΛݟ͚ͭΔ͜ͱ
ͷ͖͔͚ͬ
w 4DBMB͕େ͖ͳઌഐ͕+BWBΛॻ͍͍ͯͯʑۤͦ͠͏Ͱ͋Δ w पғͷ༑ਓ͕ʮ+BWBઈରॻ͖ͨ͘ͳ͍ʯͳͲݴ͍ͬͯͯɺ ͳΜ͔ͩ൵͍͠ w ͱ͍͑ࣗ+BWB͕͖͘͢͝ͱ͍͏Θ͚Ͱͳ͍ w ྡͷνʔϜαʔόʔαΠυ,PUMJOΛݕ౼͍ͯ͠ΔΑ͏ͩʁ w
ผͷݴޠΛݕ౼ͨ͜͠ͱ͋ΔΒ͍͠ɹɹɹɹɹͳͲͳͲ ͷ͖͔͚ͬ !8
w 4DBMB͕େ͖ͳઌഐ͕ʑۤͦ͠͏Ͱ͋Δ w पғͷ༑ਓ͕ʮ+BWBઈରॻ͖ͨ͘ͳ͍ʯͳͲݴ͍ͬͯͯɺͳΜ͔ͩ൵ ͍͠ w ͱ͍͑ࣗ+BWB͕͖͘͢͝ͱ͍͏Θ͚Ͱͳ͍ w ྡͷνʔϜαʔόαΠυ,PUMJOΛݕ౼͍ͯ͠ΔΑ͏ͩʁ w
ผͷݴޠΛݕ౼ͨ͜͠ͱ͋ΔΒ͍͠ ͷ͖͔͚ͬ !9 ͳΜͰ+BWBΛ͍ͬͯΔΜͩΖ͏ʁ +BWB͕ద͍ͯ͠ΔͷͬͯͳΜͩΖ͏ʁ ଐ͞ΕͨϓϩμΫτ͕+BWB͔ͩͬͨΒ Ҏ֎ͷཧ༝ͳ͍ͷͩΖ͏͔ʁ
w 4DBMB͕େ͖ͳઌഐ͕ʑۤͦ͠͏Ͱ͋Δ w पғͷ༑ਓ͕ʮ+BWBઈରॻ͖ͨ͘ͳ͍ʯͳͲݴ͍ͬͯͯɺͳΜ͔ͩ൵ ͍͠ w ͱ͍͑ࣗ+BWB͕͖͘͢͝ͱ͍͏Θ͚Ͱͳ͍ w ྡͷνʔϜαʔόαΠυ,PUMJOΛݕ౼͍ͯ͠ΔΑ͏ͩʁ w
ผͷݴޠΛݕ౼ͨ͜͠ͱ͋ΔΒ͍͠ ͷ͖͔͚ͬ !10 ⾠ܾͯ͠ϚαΧϦΛ͛ʹདྷͨͷͰͳ͍Ͱ͢ ʮ͏͔Βʹɺྑ͞ΛΓ͍ͨʯ Έͳ͞Μͷ+BWBΛબΜͩཧ༝ +BWBͷ͖ͳͱ͜ΖͳͲͥͻฉ͖͍ͨͰ͢
ฐࣾͷαʔϏεͱ ٕज़બͷ
w ϓϦըऔಘαʔϏε ϓϦϯτγʔϧػͰࡱӨͨ͠ը૾Λ εϚϗΨϥέʔʹμϯϩʔυ͢Δ w ϓϦըΛͬͨ4/4 w ԽহͷϓϨθϯτ w ϓϦᝑମͷޱίϛ
ฐࣾͷαʔϏεϐΫτϦϯΫ !12
w தֶੜʙେֶੜͷ(*3-4͕λʔήοτ ˞(*3-4ʜࣗΛ(*3-4ͱೝ͍ࣝͯ͠Δͯ͢ͷਓ w ձһສਓҎ্ w ଔۀࣜɺϋϩΟϯɺΫϦεϚεͳͲʹ ΞΫηε͕૿͑Δ ฐࣾͷαʔϏεϐΫτϦϯΫ
!13
w Ψϥέʔ͚αΠτΛϦϦʔε αʔόʔͷ࣮+BWB w εϚϗ͚αΠτωΠςΟϒΞϓϦΛϦϦʔε αΠτΞϓϦͷαʔόʔͱʹ+BWB "OESPJEΞϓϦ+BWB w ݱࡏʜ ਓͰӡ༻։ൃத
ฐࣾͷαʔϏεϐΫτϦϯΫ !14
w Ψϥέʔ͚αΠτΛϦϦʔε αʔόʔͷ࣮+BWB w εϚϗ͚αΠτωΠςΟϒΞϓϦΛϦϦʔε αΠτΞϓϦͷαʔόʔͱʹ+BWB "OESPJEΞϓϦ+BWB w ݱࡏʜ ਓͰӡ༻։ൃத
ฐࣾͷαʔϏεϐΫτϦϯΫ !15 ࠓมΘΒͣ+BWB+BWB͍ͯ͠Δʂ
ٕज़બͷ+BWB !16 Ψϥέʔ͚αʔϏε͕+BWBͰ͋ͬͨཧ༝ ݟ͕ઌબࢶͷগͳ͞
w ʙࠒ+BWB͕ग़࢝Ίͨ࣌ ιϑτΣΞ։ൃݚڀͷΑ͏ͳͱ͜Ζ +BWBͰԿ͔ࣄۀ͕Ͱ͖ͳ͍͔ͱࡧ ٕज़બͷ !17 Ψϥέʔ͚αʔϏε͕+BWBͰ͋ͬͨཧ༝ +BWBͰ Կ͔ʜ
ٕज़બͷ !18 Ψϥέʔ͚αʔϏε͕+BWBͰ͋ͬͨཧ༝ w ʙࠒ+BWB͕ग़࢝Ίͨ࣌ +BWBͰԿ͔ࣄۀ͕Ͱ͖ͳ͍͔ͱࡧ w ௨৴ܥϛυϧΣΞ͕
ٕज़બͷ !19 Ψϥέʔ͚αʔϏε͕+BWBͰ͋ͬͨཧ༝ Τϯλϝ ͍ͨ͠ͳ w ΤϯλʔςΠϯϝϯτܥͷ͜ͱ͍ͨ͠ʂ ϓϦػͱΨϥέʔͷ௨৴ͱ͔Ͳ͏ͩΖ͏͔
ٕज़બͷ !20 Ψϥέʔ͚αʔϏε͕+BWBͰ͋ͬͨཧ༝ w ΤϯλʔςΠϯϝϯτܥͷ͜ͱ͍ͨ͠ʂ w ଞͷݴޠݕ౼ͯ͠Έͨˠબࢶ͕গͳ͍ w "QBDIF5PNDBUͰͭ͘ΔΑ͏ͳͷ 1FSM
"QBDIF "QBDIF 5PNDBU +BWB
ٕज़બͷ !21 Ψϥέʔ͚αʔϏε͕+BWBͰ͋ͬͨཧ༝ w ΤϯλʔςΠϯϝϯτܥͷ͜ͱ͍ͨ͠ʂ w ଞͷݴޠݕ౼ͯ͠Έͨˠબࢶ͕গͳ͍ w "QBDIF5PNDBUͰͭ͘ΔΑ͏ͳͷ w
ࣾʹ+BWBͷݟ͕ཷ·͍ͬͯΔͳʜ 1FSM "QBDIF "QBDIF 5PNDBU +BWB
ٕज़બͷ !22 Ψϥέʔ͚αʔϏε͕+BWBͰ͋ͬͨཧ༝ w ΤϯλʔςΠϯϝϯτܥͷ͜ͱ͍ͨ͠ʂ w ଞͷݴޠݕ౼ͯ͠Έͨˠબࢶ͕গͳ͍ w "QBDIF5PNDBUͰͭ͘ΔΑ͏ͳͷ w
ࣾʹ+BWBͷݟ͕ཷ·͍ͬͯΔͳʜ +BWB ݟ͕ઌબࢶͷগͳ͞Ͱ+BWBʹ
ٕज़બͷ !23 ҆ఆͱલαʔϏεɺ+7. εϚϗ͚αʔϏε͕+BWBʹͳͬͨཧ༝
w ʙͷϦϦʔεʹ͚ٕͯज़ݕ౼Λ͢Δ +BWBʹݶΒͣଞͷݴޠϑϨʔϜϫʔΫݕ౼ w ֶशίετ͕Ͳͷ͘Β͍ͳͷ͔ w ϑϨʔϜϫʔΫͷ҆ఆ߹͍ɹɹͳͲͳͲ ٕज़બͷ !24 εϚϗ͚αʔϏε͕+BWBʹͳͬͨཧ༝
4 1MBZ +BWB ʜ 1)1 4DBMB
w ʙͷϦϦʔεʹ͚ٕͯज़ݕ౼Λ͢Δ +BWBʹݶΒͣଞͷݴޠϑϨʔϜϫʔΫݕ౼ w ࣾࢿ࢈׆༻͍ͨ͠ͷͰ+7.ݴޠ͕ྑ͍ Ψϥέʔ͚αʔϏεͰ։ൃͨ͠ϥΠϒϥϦͳͲ ٕज़બͷ !25 εϚϗ͚αʔϏε͕+BWBʹͳͬͨཧ༝ 4
1MBZ +BWB ʜ 1)1 4DBMB
w ʙͷϦϦʔεʹ͚ٕͯज़ݕ౼Λ͢Δ +BWBʹݶΒͣଞͷݴޠϑϨʔϜϫʔΫݕ౼ w ࣾࢿ࢈׆༻͍ͨ͠ͷͰ+7.ݴޠ͕ྑ͍ Ψϥέʔ͚αʔϏεͰ։ൃͨ͠ϥΠϒϥϦͳͲ w 1MBZͱ4DBMBͷΈ߹Θ͕ͤ҆ఆ͍ͯ͠ͳ͍࣌ظ ٕज़બͷ !26
εϚϗ͚αʔϏε͕+BWBʹͳͬͨཧ༝ 4 1MBZ +BWB ʜ 1)1 4DBMB
w ʙͷϦϦʔεʹ͚ٕͯज़ݕ౼Λ͢Δ +BWBʹݶΒͣଞͷݴޠϑϨʔϜϫʔΫݕ౼ w ࣾࢿ࢈׆༻͍ͨ͠ͷͰ+7.ݴޠ͕ྑ͍ Ψϥέʔ͚αʔϏεͰ։ൃͨ͠ϥΠϒϥϦͳͲ w 1MBZͱ4DBMBͷΈ߹Θ͕ͤ҆ఆ͍ͯ͠ͳ͍࣌ظ ٕज़બͷ !27
εϚϗ͚αʔϏε͕+BWBʹͳͬͨཧ༝ 4 1MBZ +BWB ʜ 1)1 4DBMB ҆ఆͱલαʔϏεɺ+7.Ͱ+BWBʹ
w Ψϥέʔ͚αΠτΛϦϦʔε ݟ͕ઌબࢶͷগͳ͔͞Β+BWBʹ w εϚϗ͚αΠτωΠςΟϒΞϓϦΛϦϦʔε ҆ఆͱલαʔϏεɺ+7.͔Β+BWBʹ ٕज़બͷ·ͱΊ !28 ݴޠ༷Ͱͳ͍෦͕ओͳཧ༝
ʑͷӡ༻͔ΒΈΔ +BWBͰ͋Δཧ༝
!30 ݴޠͷϢʔβʔ͕ଟ͍ ੩తܕ͚ίϯύΠϥ͕ڧྗͰ͋Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ
!31 ݴޠͷϢʔβʔ͕ଟ͍ ੩తܕ͚ίϯύΠϥ͕ڧྗͰ͋Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ
Ϣʔβʔͷগͳ͍ݴޠϑϨʔϜϫʔΫΛ͍ͬͯͨࠒ w ࣅͨ͜ͱΛ͍ͯ͠Δਓ͕ډͳ͍ w ຊهࣄ͋Μ·Γͳ͍ ࠔ͔ͬͯΒղܾ·Ͱ͕ԕ͔ͬͨ ݴޠͷϢʔβʔ͕ଟ͍ !32 ͍ͬͺ͍ͭΒ͍
Ͱ+BWBͳΒ w ࣅͨ͜ͱΛ͍ͯ͠Δਓ͕ࢁډΔ w ຊهࣄࢁ͋Δ ࠔͬͯௐΕॿ͔Δ͕ߴ͍ ٯʹใʹຒΕͯ͠·͏͜ͱ͋Δ ݴޠͷϢʔβʔ͕ଟ͍ !33 ͭΒ͘ͳ͍ʂ
ϝϯςφϯε͞Ε͍ͯΔͷ͕ଟ͘ɺ͍ଓ͚ΒΕΔ҆৺͕͋Δ w ϥΠϒϥϦɺϑϨʔϜϫʔΫͳͲ w ͏ਓ͕ډΔ͠ɺίϛοτ͢Δਓ͕͍Δ େنͳαʔϏεͱͯ҆͠৺ͯ͑͠Δ͜ͱ͕خ͍͠ ⾠ར༻͢Δ͚ͩͰͳ͘ίϛοτ͍͖ͯ͠·͠ΐ͏ͱ͍͏ ݴޠͷϢʔβʔ͕ଟ͍ !34
ࣾ֎ΘͣਓతϦιʔε͕५Ͱ͋Δ w ଞ෦ॺͱਓΛߦ͖དྷͰ͖Δ w શ͘ҟͳΔΛ࡞Δ෦ॺͱٕज़ަྲྀ͕Ͱ͖Δ ᝒମͷΈࠐΈιϑτΣΞͷνʔϜͳͲ w ࣾ֎ͰਓΛݟ͚͍ͭ͢ w ++6($$$ͱָ͔͍͋ͬͯ͠☺
ݴޠͷϢʔβʔ͕ଟ͍ !35
!36 ݴޠͷϢʔβʔ͕ଟ͍ ੩తܕ͚ίϯύΠϥ͕ڧྗͰ͋Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ
+BWB੩తܕ͚ݴޠ ɹɹɹίϯύΠϧ࣌ʹܕνΣοΫΛͯ͘͠ΕΔ ྫ͑ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !37
ϥΠϒϥϦଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !38 public interface VegetableService { /** *
ݱࡏͷ०ͷࡊΛฦ͢ * @return */ Vegetable getInSeason(List<Vegetable> vegetables); }
ར༻ଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !39 public class KithenController { @Resource VegetableService
vegetableService; @RequestMapping(path = "/recommend") public ModelAndView recommendMenu() { List<Vegetable> vegetables = refrigeratorService.findVegetables(); Vegetable vegetable = vegetableService.getInSeason(vegetables); //ฦ͖ͬͯͨࡊͰ͓͢͢ΊͷݙཱΛߟ͑Δ… return new ModelAndView("/reccomend.html"); } }
ར༻ଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !40 public class KithenController { @Resource VegetableService
vegetableService; @RequestMapping(path = "/recommend") public ModelAndView recommendMenu() { List<Vegetable> vegetables = refrigeratorService.findVegetables(); Vegetable vegetable = vegetableService.getInSeason(vegetables); //ฦ͖ͬͯͨࡊͰ͓͢͢ΊͷݙཱΛߟ͑Δ… return new ModelAndView("/reccomend.html"); } } ०ͷࡊͬͯ Ұݸ͡Όͳ͍Αͳ
ϥΠϒϥϦଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !41 public interface VegetableService { /** *
ݱࡏͷ०ͷࡊΛฦ͢ * @return */ List<Vegetable> getInSeason(List<Vegetable> vegetables); }
ར༻ଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !42 public class KithenController { @Resource VegetableService
vegetableService; @RequestMapping(path = "/recommend") public ModelAndView recommendMenu() { List<Vegetable> stockVegetables = refrigeratorService.findVegetables(); List<Vegetable> vegetables = vegetableService.getInSeason(stockVegetables); //ฦ͖ͬͯͨࡊͰ͓͢͢ΊͷݙཱΛߟ͑Δ… return new ModelAndView("/reccomend.html"); } }
ར༻ଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !43 public class KithenController { @Resource VegetableService
vegetableService; @RequestMapping(path = "/recommend") public ModelAndView recommendMenu() { List<Vegetable> stockVegetables = refrigeratorService.findVegetables(); List<Vegetable> vegetables = vegetableService.getInSeason(stockVegetables); //ฦ͖ͬͯͨࡊͰ͓͢͢ΊͷݙཱΛߟ͑Δ… return new ModelAndView("/reccomend.html"); } } ίϯύΠϧ Τϥʔ
ಉ͘͡ར༻ଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !44 public class ShoppingController { @Resource VegetableService vegetableService;
@RequestMapping(path = "/market") public ModelAndView market() { List<Vegetable> vegetables = specialPriceService.findVegetables(); Vegetable vegetable = vegetableService.getInSeason(vegetables); //ฦ͖ͬͯͨ०ͷࡊΛͲ͜… return new ModelAndView("/market.html"); } } Θʔ͍͢·ͤΜ ͦͬͪͬͯͨ
ʮ͍͍ͦΕͳ͍ʯʮͦΜͳ͠ΐͬͺ͍ϛεʜʯ ʮͦͦͦΜͳमਖ਼ͷํʜʯ ͱࢥ͍·͕͢ w ٸ͍Ͱमਖ਼͍ͯ͠Δͱ͖ w σʔλΞΫηεʙϓϨθϯςʔγϣϯ·ͰҰؾʹ͔͍͍ͯΔͱ͖ w ϥΠϒϥϦ·ͱΊͯॻ͍ͯΔͱ͖ ͳͲɺҊ֎ͬͯ͠·͏ɻ
੩తܕ͚ͰίϯύΠϥ͕ڧྗ !45
ʜઌఔͷίʔυΛϦϦʔε͔ͯ͠Βϲ݄ޙʜ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !46
ϥΠϒϥϦଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !47 public interface VegetableService { /** *
ݱࡏͷ०ͷࡊΛฦ͢ * @return */ List<Vegetable> getInSeason(List<Vegetable> vegetables); }
ϥΠϒϥϦଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !48 public interface VegetableService { /** *
ݱࡏͷ०ͷࡊΛฦ͢ * @return */ List<Vegetable> getInSeason(List<Vegetable> vegetables) throws NoVegetablesException; } ۭͳΒ ྫ֎ʹͨ͘͠ ͳ͖ͬͯͨ
ར༻ଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !49 List<Vegetable> vegetables = vegetableService.getInSeason(stockVegetables); try
{ List<Vegetable> vegetables = vegetableService.getInSeason(stockVegetables); } catch (NoVegetablesException e) { e.printStackTrace(); } ,JUDIFO$POUSPMMFSͱ 4IPQQJOH$POUSPMMFSͰ ͚ͬͯͨͬͳʙ
ར༻ଆͰ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !50 List<Vegetable> vegetables = vegetableService.getInSeason(stockVegetables); try
{ List<Vegetable> vegetables = vegetableService.getInSeason(stockVegetables); } catch (NoVegetablesException e) { e.printStackTrace(); } ίϯύΠϧ Τϥʔ
ػೳՃ͞Ε͍ͯͨʂ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !51 public class FlyerController { @Resource VegetableService vegetableService;
@RequestMapping(path = "/available") public ModelAndView availableFlyerView() { List<Vegetable> vegetables = specialPriceService.findVegetables(); Vegetable vegetable = vegetableService.getInSeason(vegetables); //ฦ͖ͬͯͨ०ͷࡊΛͲ͜… return new ModelAndView(“/available.html"); } } Θʔ͓ ͦͬͪͬͯͨ
ͪ͜ΒʮͦΜͳ͜ͱ͋Δʁʯͱࢥ͏͔͠Ε·ͤΜ͕ w େ͖ͳ࣮ ϲ݄Ҏ্͔͔ΔͳͲ Λ͍ͯ͠Δͱ͖ w ಉ͡ϓϩμΫτʹରͯͦ͠Μͳ࣮͕ฒߦͰΔঢ়گͷͱ͖ ͳͲΓͬͯ͠·͏໘͕͋Δɻ ੩తܕ͚ͰίϯύΠϥ͕ڧྗ !52
੩తܕ͚ͰίϯύΠϥ͕ڧྗ !53 ࡉ͔͍ϛεಈ͔͢લʹؾ͚ͮΔ΄͏͕ Ұͭͣͭண࣮ʹ࣮ΛਐΊΒΕΔͷͰ ॻ͖͡Ί͔Βྃ·Ͱ͕ૣ͍ ͱ͍͑*%&͕ݡ͘ར༻ՕॴΛ୳ͤͨΓ͢ΔͷͰ ίϯύΠϥΛ௨ͣ͞ͱؾ͚ͮΔͱ͍͏
!54 ݴޠͷϢʔβʔ͕ଟ͍ ੩తܕ͚ίϯύΠϥ͕ڧྗͰ͋Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ
Ϣʔβʔ͕ສਓ͍Δͱʮكͳҟৗܥʯׂ͕ͱΑ͘ൃੜ͢Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ !55 //΄΅ى͜Γ͑ͳ͍͕… if(hoge.isEmpty()) { return new Collections.emptyList(); }
Ϣʔβʔ͕ສਓ͍Δͱʮكͳҟৗܥʯׂ͕ͱΑ͘ൃੜ͢Δ w ࣮࣌Ͱຊʹك͕ͩͬͨଞͷػೳՃͰى͖͘͢ͳͬͨ w ϦϦʔε͔ͯ͠Β݁ߏك͡Όͳ͍ͳͱൃ֮ɹͳͲͳͲ ྫ֎Λ໌֬ʹॲཧͰ͖Δ !56
Ϣʔβʔ͕ສਓ͍Δͱʮكͳҟৗܥʯׂ͕ͱΑ͘ൃੜ͢Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ !57 //΄΅ى͜Γ͑ͳ͍͕… if(hoge.isEmpty()) { return new Collections.emptyList(); }
ى͜ΔΜ͔ʜ
Ϣʔβʔ͕ສਓ͍Δͱʮكͳҟৗܥʯׂ͕ͱΑ͘ൃੜ͢Δ ͜͏͍͏ಛघέʔεʹରͯ͠ɺ ͕ࣗͨͪѻ͍͍͢ྫ֎Λఆٛͯ͠ॲཧΛଅͤΔͷར ྫ֎Λ໌֬ʹॲཧͰ͖Δ !58 //΄΅ى͜Γ͑ͳ͍͕… if(hoge.isEmpty()) { return
throw new HogeIsEmptyException(); } ྫ֎ʹͨͬͨ͠ ΄͏͕͍ͳ
!59 ݴޠͷϢʔβʔ͕ଟ͍ ੩తܕ͚ίϯύΠϥ͕ڧྗͰ͋Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ
!60 ݴޠͷϢʔβʔ͕ଟ͍ ੩తܕ͚ίϯύΠϥ͕ڧྗͰ͋Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ Ћ
ศརͳͷ͕ࢁ͋Γɺ։ൃεϐʔυ͕ૣ͍ w *%&͕ڧྗ ϦϑΝΫλϦϯάҰͭͰݡ͍ػೳ͕උΘ͍ͬͯΔͷ͕͋Δ ิ͕ڧྗɺ$POWFSU5P,PUMJOͱ͔·Ͱ͋Δ ॻ͘εϐʔυ͕ૣ͘ͳΔ w ඪ४ϥΠϒϥϦ͕ॆ࣮͍ͯ͠Δ ϥΠϒϥϦΛ୳͕࣌ؒ͢ݮΔͷͰ࣮ʹूதͰ͖Δ ʲ
Ћʳ ։ൃڥ͕ڧྗͳ !61
ศརͳͷ͕ࢁ͋Γɺ։ൃεϐʔυ͕ૣ͍ ॳ৺ऀͰʮ·ͣಈ͘ͷʯ͕ग़དྷ্͕Δ·Ͱ͕ૣ͍ w ࠔͬͨˠͰָ͖͍͕ͨ͠ૣ͍ w ࣗ৴ͱ͔Ϟνϕʔγϣϯʹ݁͢Δ ʲ Ћʳ ։ൃڥ͕ڧྗͳ !62
ʲ͓·͚ʳ +%,ͷҠߦͷ
w ϐΫτϦϯΫͰ0SBDMF+%,Λ͍ͬͯͨ +%,ͷҠߦ !64 0SBDMF +%,ʙ̇
w ϐΫτϦϯΫͰ0SBDMF+%,Λ͍ͬͯͨ w 0SBDMFͷαϙʔτϙϦγʔ͕มΘͬͨ ࣮ӡ༻Ͱ͑Δ+%,݄·Ͱ Ҿ͖ଓ͖͏ʹܖ͕ඞཁ ͦΕؒͰαϙʔτऴྃͷ༧ఆ +%,Ҏ߱ಉ͘͡ܖ͕ඞཁ w Կ͔͠ΒରԠΛ͠ͳͯ͘ͳΒͳ͍ঢ়گ
+%,ͷҠߦ !65 αϙʔτ ऴΘΔΑʂ
ߟ͑ΒΕΔબࢶ͍͔ͭ͘ w 0SBDMF+%,Ͱܖ͢Δ w 0SBDMF+%,Ͱܖ͢Δ w ֤ࣾஂମͷ+%,ʹҠߦ͢Δ w ͍ͬͦଞͷݴޠʹͯ͠͠·͏ +%,ͷҠߦ
!66
ߟ͑ΒΕΔબࢶ͍͔ͭ͘ w 0SBDMF+%,Ͱܖ͢Δ w 0SBDMF+%,Ͱܖ͢Δ w ֤ࣾஂମͷ+%,ʹҠߦ͢Δ w ͍ͬͦଞͷݴޠʹͯ͠͠·͏ +%,ͷҠߦ
!67 ͙͢ʹରԠ͢Δͷ͍͠ ͙͢ʹରԠ͢Δͷ͍͠ ͳ͔ͳ͔ͷֹۚʹͳΓͦ͏ʜ ͳ͔ͳ͔ͷֹۚʹͳΓͦ͏ʜ
w ͻͱ·ͣ"EPQU0QFO+%,ʹҠߦ͢Δ͜ͱʹ w खॱʹಛผͳ͜ͱͳ͍ w ΞϓϦέʔγϣϯ͔Β"EPQU0QFO+%,Λࢀর͢ΔΑ͏ʹ͢Δ w ςετڥͰϏϧυɺϢχοτςετ͕௨Δ͔νΣοΫ w ϲ݄΄Ͳςεταʔόʔʹஔ͍ͯΞϓϦέʔγϣϯΛ৮Γ͓ͨ͢
w όάΈ͋ͨΒͳ͚ΕϦϦʔε +%,ͷҠߦ !68 ࠓίί
ࠓޙ w վΊͯͲͷ+%,ʹ͢Δͷ͔ w +BWBͷόʔδϣϯͲ͏͢Δͷ͔ ͳͲΛݕ౼ͯͬͯ͠ରԠΛ͍ͯ͘͠༧ఆ +%,ͷҠߦ !69
ͱɺ͞Βͬͱ͕͓ΘΓ·͕ͨ͠ +%,ͷҠߦ !70
w ରԠ͢ΔதͰɺ+BWBࣗମʹର͢ΔࠔΓ͝ͱಛʹແ͔ͬͨ w ਓͰ·ͳͯ͘ɺੈքதͷਓͷҙݟ͕ಘΒΕΔ w 0SBDMFҎ֎ʹ+%,ͷఏڙऀ͕͍Δ w ݟ͔ͭͬͨ՝ࣾͷ͔Γ w ৽͍͠όʔδϣϯʹ͙͢ʹରԠͰ͖ͳ͍ঢ়گΞʔΩςΫνϟ
+%,ͷҠߦ !71
݁
ྺ࢙తܦҢ ࣾʹઌʹݟ͕͋ͬͨɺଞͷબࢶͷͳ͞ ݴޠͷϢʔβʔ͕ଟ͍ ੩తܕ͚ͰίϯύΠϥ͕ڧྗͰ͋Δ ྫ֎Λ໌֬ʹॲཧͰ͖Δ ϐΫτϦϯΫ͕+BWBͰ͋Δཧ༝
!73
!74 ʮ+BWB͕దͨ͠αʔϏεͱԿ͔ʯ
!75 w Ϣʔβʔ͕ଟ͘ɺن͕େ͖͍αʔϏε w ίϛοτ͢Δϝϯόʔ͕มԽ͍͢͠ɺ ͍ͭ୭͕Ͳ͜Λ৮Δ͔ಡΊͳ͍αʔϏε
!76 w Ϣʔβʔ͕ଟ͘ɺن͕େ͖͍αʔϏε w ίϛοτ͢Δϝϯόʔ͕มԽ͍͢͠ɺ ͍ͭ୭͕Ͳ͜Λ৮Δ͔ಡΊͳ͍αʔϏε Έͳ͞Μͷ͝ҙݟ ͥͻฉ͖͍ͨͰ͢ʂ
!77 ϐΫτϦϯΫ+BWBͰΑ͔ͬͨʁ
!78 :&4
w ୭͕Ͳ͜Λ͍ͭ৮Δ͔Θ͔Βͳ͍ঢ়ଶ গͳ͘ͱνʔϜίʔυΛ৮ΔڪΕ͕͋ΔϓϩμΫτ ͪΐͪ͜ΐ͜ଞ෦͔Βਓ͕དྷͨΓνʔϜฤ͕มΘͬͨΓ͢Δ ͳͷͰ w ੩తܕ͚Ͱ͋Δ͜ͱͰࣗͷΒͳ͍ͱ͜ΖͳΔ҆͘શʹ͍͢͠ w ଞ෦ॺ+BWBྺͷ͋Δਓ͕ଟ͍ͷͰߦ͖དྷ͍͢͠ ϐΫτϦϯΫ͕+BWBͰ͋Δཧ༝
!79
w Ϣʔβ͕ສਓ͍ΔͰ͔͍αʔϏεͰ͋Δ ίϯύΠϧஈ֊Ͱ͔ͬ͠ΓνΣοΫͨ͠ͷΛੈʹग़ͤΔͷ͍ͩ͡ ϥΠϒϥϦͳͲϝϯς͞ΕͯΔͷ͕͔ͭ͑Δͷخ͍͠ ҆શͳαʔϏεΛఏڙ͍͢͠ w ίʔυͷϘϦϡʔϜɺաڈͷࢿ࢈͔ͳΓͰ͔͍ աڈͷࢿ࢈ͱ͍͏ҙຯͰ+7.ݴޠͰ͋Ε׆༻Ͱ͖Δ ϐΫτϦϯΫ͕+BWBͰ͋Δཧ༝ !80
͓͠Βͤ
͓Βͤͦͷ̍ !82 Ұॹʹಇ͘ϝϯόʔΛืूதͰ͢ɻ ΤϯδχΞืूதʂ
͓Βͤͦͷ̍ !83 w ژӺɹెา w ΧϯϑΝϨϯεࣾඅͰʂ ަ௨අ॓ധඅࢀՃඅ͓څྉग़·͢ w ࣾͰͷษڧձ͍Ζ͍Ζ w
ৄͪ͘͜͠Β ΤϯδχΞืूதʂ
͓Βͤͦͷ !84 ژ%FW͔;͐ w ژӺલʙ w ςʔϚ৭ʑ w ίʔώʔɺ࠙ձ͖ w
ৄ͘͠DPOOQBTTͰʂ ษڧձͬͯΔͷͰདྷ͍ͯͩ͘͞ʂ
͓Βͤͦͷ !85 ొஃऀืूதͰ͢ʂ $G1ग़͔ͨͬͨ͠3FKFDUͩͬͨ ͕ࣗΈͨηογϣϯ·ͱΊ ͳͲͳͲͳΜͰ͟͝Εʂ
ສϢʔβʔͷ8FCαʔϏεΛ ӡ༻ͯ͠ߟ͑Δɺ+BWBͰ͋Δཧ༝ ϑϦϡʔגࣜձࣾླਅੜ !NBTBP[Jʣ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ