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
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.6k
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
880
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
220
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
9
4k
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
280
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
300
Network Firewallやっていき!
news_it_enj
0
170
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
670
穢れた技術選定について
watany
17
5.5k
AI時代の闇と光
tatsuya1970
0
110
SRE Next 2026 何でも屋からの脱却
bto
0
940
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
290
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
260
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
How STYLIGHT went responsive
nonsquared
100
6.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
350
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Designing for humans not robots
tammielis
254
26k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
How to Ace a Technical Interview
jacobian
281
24k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
Designing for Performance
lara
611
70k
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ʣ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ