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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
AIが自律的に回る開発ループを設計してチーム開発に組み込む
nekorush14
0
120
從開發到部署全都交給 AI:實作 AI 驅動的自動化流程
appleboy
0
160
【FinOps】データドリブンな意思決定を目指して
z63d
0
300
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
水を運ぶ人としてのリーダーシップ
izumii19
4
990
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
0
330
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
0
290
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
300
Deep Data Security 機能解説
oracle4engineer
PRO
2
110
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.7k
Kiro Ambassador を目指す話
k_adachi_01
0
130
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
120
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Statistics for Hackers
jakevdp
799
230k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
My Coaching Mixtape
mlcsv
0
150
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
4 Signs Your Business is Dying
shpigford
187
22k
First, design no harm
axbom
PRO
2
1.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
What's in a price? How to price your products and services
michaelherold
247
13k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
Building AI with AI
inesmontani
PRO
1
1.1k
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ʣ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ