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
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
860
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.1k
Making sense of Google’s agentic dev tools
glaforge
1
280
シンガポールで登壇してきます
yama3133
0
240
OPENLOGI Company Profile for engineer
hr01
1
74k
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
AI Driven AI Governance
pict3
0
480
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
550
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.9k
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
370
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
790
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
280
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
The untapped power of vector embeddings
frankvandijk
2
1.8k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
Building an army of robots
kneath
306
46k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
Unsuck your backbone
ammeep
672
58k
GitHub's CSS Performance
jonrohan
1033
470k
Thoughts on Productivity
jonyablonski
76
5.2k
Agile that works and the tools we love
rasmusluckow
331
22k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
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ʣ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ