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
SpringBoot3.4の構造化ログ #kanjava
Search
irof
January 30, 2025
Programming
3
1.5k
SpringBoot3.4の構造化ログ #kanjava
2025-01-30 関ジャバ'25 1月度
irof
January 30, 2025
Tweet
Share
More Decks by irof
See All by irof
技術的負債の正体を知って向き合う / Facing Technical Debt
irof
0
160
関ジャバと言う場
irof
0
74
型で語るカタ
irof
2
1.4k
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
370
複数アプリケーションを育てていくための共通化戦略
irof
9
4.9k
SpringBootにおけるオブザーバビリティのなにか
irof
1
1.1k
Javaアプリケーションモニタリングの基本
irof
7
2.7k
Webアプリケーションを作りましょう
irof
0
200
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
6.6k
Other Decks in Programming
See All in Programming
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
0
230
Software Architecture
hschwentner
6
2.3k
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
300
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
230
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
810
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
720
CSC305 Lecture 05
javiergs
PRO
0
210
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
140
[Kaigi on Rais 2025] 全問正解率3%: RubyKaigiで出題したやりがちな危険コード5選
power3812
0
110
All About Angular's New Signal Forms
manfredsteyer
PRO
0
120
ALL CODE BASE ARE BELONG TO STUDY
uzulla
2
200
Devoxx BE - Local Development in the AI Era
kdubois
0
130
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
A Tale of Four Properties
chriscoyier
161
23k
Context Engineering - Making Every Token Count
addyosmani
5
230
Transcript
SpringBoot3.4ͷߏԽϩά 2025-01-30 ؔδϟό'25 1݄ @irof ߏԽϩάͷഎܠ͔ΒSpringBootͰͷΧελϚΠζ·Ͱ
irof • ݸਓࣄۀओ • ؔδϟόͷதͷਓ • SpringͨͿΜ3͘Β͍͔Β • SpringBoot͕·ͬͨ݁ ՌɺSpringͷόʔδϣϯೝ
ݮ͖ͬͯͨؾ͕ɻ
ຊηογϣϯͷత ✓ߏԽϩάͷجຊΛཧղ͢Δ ✓SpringBoot3.4Ͱͷઃఆํ๏ΛΔ ✓࣮Ͱ׆༻͢ΔώϯτΛಘΔ
ߏԽϩάͷഎܠ
ߏԽϩάͷഎܠ • ΫϥυͳͲΛड͚ͯখ͞ΊͳγεςϜͰෳαʔόʔӡ༻ ʹͳΓɺϩάΛूͯ͠ͷݕࡧɾੳΛߦ͏͜ͱͷޮՌඞ ཁੑ͕ߴ·͖ͬͯ·ͨ͠ɻ • ෳͷϩάΛू͢ΔͱͳΔͱɺϩάʹग़ྗ͍߲ͨ͠૿ ͍͖͑ͯ·͢ɻ • ΞϓϦέʔγϣϯ໊ͱ͔αʔόʔ໊ͱ͔ɻ
1αʔόʔͳΒཁΒͳ͍͚ͩͲ
ԽͰঃʑʹ໘ʹͳͬͯʢྗͰΧόʔʣ ʮX߸ػʯͱ͔͕ѲͰ͖͍ͯΔ͏ͪɺ·ͩͳΜͱ͔…… ͡ΐʔͪΐʔ͔ɹɹɹ͡ΐʔ͡ΐʔʹ
ϩάΛҰՕॴʹूΊͨΒ؇͞ΕΔͷ͚ͩͲ ूΊํͰΰλΰλ͋Δ͚Ͳࠓճͦͷ͡Όͳ͍ ͨͩͷϑΝΠϧαʔόʔ ϩάݟ͑Δ͘Μͷγ ϯϓϧͳྫɻ
ෳαʔϏεʹͳ͖ͬͯͨΓ͢Δͱ͡Θ͡Θͱ
None
ҠૹʮϩάҠૹ͘Μʯ͕ؤுΔͷ͚ͩͲ Xͱ͔Yͱ͔͕গͳ͍͏͍͍͚ͪͩͲɺ૿͑ΔͱͭΒ͘ͳͬͯ͘Δ ʮϩάҠૹ͘Μʯ ɾಠཱͯ͠ଘࡏ͢Δ ɾΞϓϦ͕Δ ɾϩάݟ͑Δ͘Μ͕Δ ͱ͔৭ʑ͋Δɻ
ύʔεʹ͖ͭ·ͱ͏ʢͷ͘͝Ұ෦ʣ • ϓϨʔϯςΩετΛύʔε͢ΔͨΊʹɺϧʔϧ͕ඞཁɻ • վߦ۠ΓˠελοΫτϨʔεόϥόϥࣄ݅ • ͋Δ͋Δ • εϖʔε۠Γˠϝοηʔδ్͕த·Ͱ͔͠ग़ͳ͍ •
͋Δ͋Δ • ؤுΕؤுΕΔʢΈΜͳؤு͖ͬͯͨʣ͚ͲɺͦΕؤுΔ ͱ͜ʁ͕ߏԽϩάͷಈػͷҰͭɻ
΄͔ʹɿϩάʹग़͢ͷΛม͑ͨ࣌ͱ͔ • ϩάʹ߲ΛՃͨ࣌͠ɺϩάҠૹ͘Μซͤͯม͑ͳ͍ͱ ϩά͕·ͬͨ͘ݟ͑ͳ͘ͳͬͨΓ͢Δɻ • ແఀࢭͷϩʔϦϯάσϓϩΠͱ͔৽چόʔδϣϯࠞࡏͳΜͯ ͳΔͱ͞Βʹ͜͠͞૿͢ • ϩάʹ߲Ճ͢Δ͚ͩͰαʔϏεఀࢭ͢ΜͷʁͩΑͶʁ ؤுΕʂ……ͱ͔ͳΔɻͭΒΈɻ
ͯ͜ͱͰɿग़͔࣌͢ΒߏԽ͓ͯ͜͠͏ͥͱ • JSONͱ͔ߏԽςΩετΛ͑ྑ͍ • CSVߏԽςΩετʁ·͊͏Μɻ • SSVʢSpaceSeparatedValuesʣߏԽςΩετʁťŦƄŮɻ ແཧΓݴΘͤͨײ͚ͩͲ ݕࡧͨ͠Β͋ΔͬΆ͍……ʁ
ߏԽϩάͷجຊ
ߏԽϩάͷجຊ • ΩʔͱͷϖΞ • ඪ४తͳϑΥʔϚοτʢJSONʣ • ʢػցతʹʣՄಡੑ͕ߴ͘ɺॲཧ͍͢͠ • ༷ʑͳπʔϧͰར༻Մೳ •
JSONͷΤίγεςϜʹΕΔʢJSONͳΒʣ • มߋʹॊೈʹରԠͰ͖Δ • ༰ͳϦʔμʔύλʔϯ͕Α͘औΒΕ͍ͯΔҹɻ
հɿ༰ͳϦʔμʔ • ඞཁͳͷ͚ͩநग़ͯ͠ɺະ ͷίϯςϯπΛແࢹ͠ɺม ܗతͳσʔλߏΛड༰͢Δ • ͜ͷ໊લαʔϏεσβΠϯ ύλʔϯͰݟͨʢઈ൛ʁʣ • ಉ༷ͷ͜ͱΑ͘ݴΘΕΔɻ
ݹ͘ϙεςϧͷ๏ଇ ʢRFC791, 1981ʣͳͲɻ
ߏԽϩάͷྫ ←ैདྷͷϩά
ैདྷͷϩάͱߏԽϩάͷҧ͍ • ैདྷͷϩά • ղੳݕࡧ͕จࣈྻʹର͢ΔͦΕ • ਓʹ༏͠Ίʢ༏͍͠ͱݴ͍ͬͯͳ͍ʣ • ߏԽϩά •
ཧ͞Εͨσʔλ • ػցʹ͘͞͠ɺਓʹݫ͠Ί • ߏԽϩά͕ಡΈ͍͢ਓਓΛࣙΊͯΔઆ
ਓʹݫ͠ΊɿಡΉؾ͕ى͖ͳ͍ ͜Εʮจࣈͷཏྻʯͬͯೝࣝ͢Δͷ͕Ұൠਓͩͱࢥ͍·͢
pretty printͨ͠ΒಡΊΔʢʁʣ
ߏԽϩάͷجຊɿ·ͱΊ • JSONͰग़ͯͨΒߏԽϩάʢࡶ
Spring Boot 3.4ͰͷߏԽϩά جຊฤ
• logging.structured.format.consoleΛઃఆ͢Δ͚ͩ • ʢϩάԿ͍ͬͯ͡ͳ͍ͳΒʣ • ͪΖΜapplication.ymlͰڥมͰͳΜͰ͍͍ɻ ઃఆ application.ymlͳΒˠ
SpringBoot3.3Ҏલͱͷҧ͍ • ҎલΑΓECS LoggingLogstash Logback EncoderͳͲΛ ༻ͯ͠JSONͰͷग़ྗՄೳ • ඪ४͚ͩͰύλʔϯʹJSONͬΆ͍จࣈྻΛࢦఆ͢Εग़དྷ ͳ͘ͳ͍͕ɺෆׄˍखؒˍॊೈੑʹ͚ܽΔɻ
• 3.4Ҏ߱ͳΒ1Օॴઃఆ͢Δ͚ͩʂ
༗ޮԽͱରԠϑΥʔϚοτ • ༗ޮԽ • logging.structured.format.(console| f ile) ʹࢦఆ • ࢦఆͰ͖ΔϑΥʔϚοτ
• ECS: Elastic Common Schema • GELF: Graylog Extended Log Format • Logstash • ʢΧελϜʢޙड़ʣʣ SpringͷಠࣗܗࣜͰͳ͍ͷͰ͢
SLF4JͰͷ߲ՃɿMDC • MDCʹηοτͨ͠ͷ͕Կͤͣͱग़·͢ɻ ʢMDCͳΜͧΛฉ͘ʣ ͜ΕͶˠ
ࢀߟɿMDCͷ։์ https://irof.hateblo.jp/entry/2024/06/20/152018
SLF4JͰͷ߲ՃɿFluent Logging API • SLF4J 2Ͱಋೖ͞Εͨ৽͍͠API • SLF4Jͷϝδϟʔόʔδϣϯ্͕͕͍ͬͯΔ͜ͱʹؾ͍͍ͮͯ ͳ͍ਓଟ͍ʢؾ͔ͮͳ͍͍ͯ͘Α͏ʹઃܭ͞Ε͍ͯΔʣ Fluent
APIࣗମ͕Έ͋Δ͠ɺ୯७ͳϩάग़ྗͷ ͨΊͷAPIͱͯ͠ಡΈ͍͢ͱݴ͍͍͕ɺ ༷ʑͳίϯςΩετΛग़ྗ͢Δࡍॻ͖͘͢ಡΈ ͍͢ͱݴ͑Δͱࢥ͏ʢݸਓͷײʢগͳ͘ͱҾ static importલఏͷϝιουΑΓɻ
SLF4JͰͷ߲ՃɿFluent Logging API • 1ͭͷϩάʹ͚ͩग़͍ͨ͠ͱ͖MDC͡Όͳͬͪ͘͜ɻ ͜ΕͶˠ
جຊฤɿ·ͱΊ • logging.structured.format.console Λઃఆ͢Δ͚ͩͰߏԽ ϩά͕ग़Δʂ • ͱͯώϡʔϚϯΞϯϦʔμϒϧʂʂ • MDCͱ͔Fluent APIͰࣗ༝ʹ߲ΛՃͰ͖Δʂ
Spring Boot 3.4ͰͷߏԽϩά தͱΧελϚΠζ
ͪΐͬͱͨ͠ΧελϚΠζ • logging.structured.json.(include|exclude|rename|add) • ཁΒΜΘͬͯͷফͨ͠Γ: exclude • Key໊ม͑ͨΓ: rename •
Ճͨ͠Γ: add • શϩάʹڞ௨ͷͷΛՃ͢Δɻ • ଞͷϓϩύςΟࢀরͰ͖Δɻ ྫলུ
ߏԽϩάपΓͷ؆қΫϥεਤ
ߏԽϩάपΓͷ؆қΫϥεਤ ؆қͳJSONΛॻ͕ͭ͘രͯ͠Δɻ JSONͷߏԽϩάग़ྗʹJacksonͳͲ ༻͍ͯ͠ͳ͍ɻ
ߏԽϩάपΓͷ؆қΫϥεਤ ʮߏԽϩάʯ≠ʮJSONϩάʯ StructuredLogFormatterϓϨʔϯςΩετ ग़ͤΔʢϦϑΝϨϯεͷྫͦΕʣ
ߏԽϩάपΓͷ؆қΫϥεਤ ϓϩύςΟͰࢦఆͰ͖Δͷ CommonFormatterͱݺΕΔҰ܈ɻ Common͡Όͳ͍ͷ͖ʹ࡞Εͬͯܗɻ
ߏԽϩάपΓͷ؆қΫϥεਤ Logbackґଘ෦o.s.boot.logging.structuredͷ֎ (o.s.boot.logging.logbackʹ͋Δɻಉ༷ͷ͕log4j2ͷҰࣜɻʣ
دΓಓɿJsonWriter • SpringBoot3.4ͰՃ͞Εͨɻ • ʮͪΐͬͱJSONʹ͍ͨ͠Μ͚ͩͲJacksonͱ͔GSONͱ͔ ೖͬͯͳ͍ʢor໘ʣͩͳ͊ʯʹ͑ͦ͏ʁ ʮSpringBootͬͯͯJackson͑ͳ͍ʯ ͳ͔ͳ͔ϨΞͳ݅ͩͱࢥ͏͚Ͳɻ
JsonWriter#of • standardͰΓͳ͚Εof ͰϚοϐϯάΛॻ͘ɻ • LambdaͷೖΕࢠMembers ͷѻ͍ͳͲɺͦΕͳΓʹΫη ͕͋Δɻ͏Մೳੑ͕͋Δͳ ΒૉৼΓ͠ͱ͍ͨํ͕͍͍ɻ •
ͨͱ͑ӈͷwriterΛvarʹͨ͠ ΒίϯύΠϧ௨Βͳ͍ͱ͔ɺຯ ͳͷ͕ͪΐ͍ͪΐ͍ɻ
JsonWriter.Members • addͰՃ͢Δ • applyingXxx Ͱ͍͡Δ • ValueProcessor݁ߏ͓͠Ζ͍ʢޙड़
͕ͬͭΓΧελϚΠζ • ecs/gelf/logstashͷͲΕؾʹೖΒͳ͍ʂ • addexcluderename͡ΌΓͳ͍ʂʂ • ΦϨΦϨJSONͰग़͍ͨ͠ʂʂʂ • ೋʢࡉ͔͘ݴ͑ࡾʣ͋ΔɻͲ͏͢Δʁʁ •
StructuredLogFormatter(JsonWriterStructuredLogFormatter) • StructuredLoggingJsonMembersCustomizer
StructuredLogFormatterͰͷΧελϚΠζ
StructuredLogFormatterͰͷΧελϚΠζ • ΫϥεΛ࡞ͬͯɺecsͱ͔ͷΘΓʹFQCNΛࢦఆ͢Δ
🚫StructuredLogFormatterɿMarkdownͷϦετͰग़͢ վߦΛҰஈ͛ͯ͞Έͨ ʢ࣮༻ੑͨͿΜͳ͍ʣ
🚫JsonWriterStructuredLogFormatterɿϝοηʔδ͚ͩͷJSONͰग़͢ withNewLineAtEnd()͚ͭͳ͍ͱ1ߦͷJSONʹͳΔ͠ɺ lambdaͷܕলུͰ͖ͳ͍͠ɺຯʹ໘ɻ
🚫StructuredLogFormatterͰͷΧελϚΠζ • ࠜݩ͔Βม͑Δͭ • SpringBoot͋Δ͋Δͷʮ৮ΔͱSpringBoot͔Β֎ΕΔՄೳੑͷ͋Δϩ ΪϯάγεςϜ͚֦ுϙΠϯτʯͰ͢ɻ • ϦϑΝϨϯεʹॻ͍ͯΔ͠ɺࢦఆํ๏ͰΘ͔ΔͩΖͱݴΘΕΕɺͦΕͦ͏ɻ • StructuredLogFormatter
• ͜͜৮Δ͘Β͍ͳΒLogbackͷEncoderͷ͕Α͘Ͷʁ • JsonWriterStructuredLogFormatter • StructuredLoggingJsonMembersCustomizerͰΑ͘Ͷʁ • ͜ͷลΓͷ֦ுΨοπϦLogbackʹґଘ͢ΔͷؾʹͳΔͱ͜ɻ
StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ
StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ • SpringBootͷͳͱ͜ͷҰͭɿҰൠਓ͚ͷΧελϚΠζ ʹCustomizer໊ͬͯલ͕͍ͭͯΔ • ҰൠਓσϑΥͷ··͏΄͏͕͍͍ͱ͔͓͖ͯ͞ • ϓϩύςΟͷaddͱ͔͜ͷ࣮ͰߦΘΕ͍ͯΔ • ॱ൪ϓϩύςΟͷ͕ઌɺՃͨ͠ͷޙΆ͍ɻ
• ͦ͏͍͏࣮ɻυΩϡϝϯτʹͳ͛͞ɻ • ϓϩύςΟͱಠࣗCustomizerͰಉ͡Ωʔ໊৮ΔͷΊͱ͜͏Ͷʁ
StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ • logging.structured.json.customizerʹFQCNͰࢦఆ͢Δ • META-INF/spring.factories ͰࢦఆͰ͖Δɻෳࢦఆ͍ͨ͠ ͱ͔ج൫ͳͲ͕ڧ੍͍ͨ͠ͱ͔ͳΒ͔ͬͪ͜ͳʁ
🤔StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ ग़͢ͳΑʢਅإ ʮ͋ͱͰʯͱݴͬͯͨValueProcessorͷ
StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ • ϩΪϯάγεςϜʹΑΒͳ͍ΧελϚΠζ͕Մೳ • ecs/gelf/logstashͷͲΕ͔ϕʔεʹ͢Δ • JsonWriterΛ௨ͯ͠JSONΛ͍͡ΕΔ • JSONͷதʹؔͯ͜͠Ε·ͰߏԽϩάϥΠϒϥϦͰͬͯ ͨ͜ͱ͋ΔఔͰ͖ΔΜ͡Όͳ͍͔ͳײ͋Δ
• ͕ͬͭΓΧελϚΠζͬͯݴͬͯ͜ΕͰΔͷ͕Α͔Ζ͏
ҙ
όφʔ͕ग़ͳ͘ͳͬͯ͠·͏ • SpringBootىಈ࣌ʹ͓ग़ ܴ͑ͯ͘͠ΕΔӈͷό φʔ͕ߏԽϩάΛ༗ޮ ʹ͢Δͱग़·ͤΜɻ • όφʔ͕ͳ͍ͱக໋తʹ ͳΔγεςϜͰཁҙ Ͱ͢ɻ
͋ɺݩʑཁΒͳ͔ͬͨʁ͔ͦͬ͊ɻ
ӡ༻தͷlogback.xml͕͋Δਓ • logback.xmlͱ͔ࣗͨͪͰ࡞ͬͯͨΒɺ͍͘ΒϓϩύςΟઃ ఆͯ͠ޮՌͳ͍Ͱ͢ɻ͏༷ʹencoderม͑ͯͶɻ • StructuredLogEncoderΛlogback.xmlͱ͔Ͱ͏ͱʮSpring ಈ͍ͯͶʔΑʯౖͬͯΒΕΔɻૉʹlogback-spring.xmlͱ ͔͍·͠ΐɻ
ECSLogstashͳͲ͍ͬͯͳ͍ • ઌͷ௨ΓɺϑΥʔϚοτʹରԠͨ͠ग़ྗΛSpringBoot͕࣮ ͍ͯ͠·͢ɻ • ґଘϥΠϒϥϦΛ୳ͯ͠ecs-logginglogstash-logback- encoderͳͲग़͖ͯ·ͤΜɻ • ͭ·Γecs-loggingͳͲͷઃఆޮ͖·ͤΜɻ •
ͦͷ͋ͨΓ͕ඞཁͳΒSpringBootͷߏԽϩάΘͣɺ ࠓ·Ͱ௨ΓϥΠϒϥϦΛ͍·͠ΐ͏ɻ
ิɿecs-logging • https://www.elastic.co/ guide/en/ecs-logging/ java/1.x/setup.html • encoder(Logbackͷ ߹ʣͷઃఆͱ͔ॻ͍ͯΔ ͚ͲɺSpringBootͰecs Λࢦఆͯ͜͠Εؔ
ͳ͍ΜͰ͢ɻ
ʢ৽͍͠͡Όͳ͍͚ͲʣMDCͱ͔͏࣌ • MDCجຊతʹThreadLocalΛͬͯΔ • ผεϨουʹࣗಈతʹҾ͖ܧ͕Εͳ͍ • ಉ͡εϨουʹ༧ظͤͣҾ͖ܧ͕ΕΔ • ࣗͰεϨου͍͡Δ࣌ؾΛ͚ͭͯͶʂ •
ʮͦΕ͘Β͍ϑϨʔϜϫʔΫ͕໘Έͯ͘Εͳ͍ͷʁʯ • ϑϨʔϜϫʔΫ͕໘ݟͯΔͱ͜͡Όͳ͍ͱ͜ͰεϨουى ͜͞ΕͨΒݫ͍ͬ͢͠ɻʢϑϨʔϜϫʔΫΑΓʣ
࣮Ͱߟ͑Δ͜ͱͷࡐྉ
࣮Ͱߟ͑Δ͜ͱͷࡐྉ ʻಋೖʹࡍͯ͠ʼ
ߏԽϩάΛ͏͔൱͔ʁ • ͘͝খنͳΞϓϦέʔγϣϯΛআ͚ߏԽϩάʹऔΓ ΉՁ͋Γ·͢ɻ • ΞϓϦέʔγϣϯαʔόʔ͚ؒͩͰͳ͘ଞγεςϜΠϯϑϥ Λލ͍Ͱͷϩάԣ۲ݕࡧඪ४උͰ͋ͬͯཉ͍͠ɻ • ͜Ε·ͰߏԽϩάΛग़ྗ͢ΔͨΊʹϥΠϒϥϦͷՃͳ ͲΛߦ͏ඞཁ͕͋Γ·͕ͨ͠ɺෆཁʹͳΓ·ͨ͠ɻ
• ϓϩύςΟࢦఆ͢Δ͚ͩͰ͍͚ͭ·͢ɻͬͨͶʂ
ඪ४ߏԽϩάಋೖݕ౼ϑϩʔ ΧελϚΠζͯ͠ͳ͍ͳΒඪ४ʹΓ͑ͱ͘ͷ͕͍͍ͱࢥ͏Μͩ
͍ͭͰߏԽϩάΛ͏͔ʁ • গͳ͘ͱϩʔΧϧϢχοτςετͰग़ྗ͞ΕΔϩάʹߏ Խϩάෆཁͳ߹͕ଟ͍Ͱ͢ɻ • ߏԽϩά machine-readable ʢSpringBootͷϦϑΝϨϯ εͰͷهड़ʣͰ͕͢ɺhuman-readableͰ͋Γ·ͤΜɻ •
IDEͷλʔϛφϧʹग़͢ͷैདྷ௨ΓϓϨʔϯςΩετ͕͓͢ ͢ΊͰ͢ɻΓସ͑ΒΕΔΑ͏ʹ͠ͱ͖·͠ΐ͏ɻ • ϓϨʔϯςΩετͷϩάݟ͍ͯ͘͢͜͠͏Ͷʁ
࣮Ͱߟ͑Δ͜ͱͷࡐྉ ʻग़͢ͱΑͦ͞͏ͳͷʼ
ग़͢ͱΑͦ͞͏ͳͷɿॲཧ࣌ؒ • ୯Ұ߲ͱͯ͠ɺmsΛͰग़͢ɻ • ϝοηʔδʹจࣈྻͰೖͬͯͨΒܭࢉʹख͕͔͔ؒΔɻ • ߏԽϩάͳΒҰൃͰܭࢉͰ͖Δɻ • LBͱ͔Tomcatͱ͔ͷΞΫηεϩάͰ͍͍Μ͚ͩͲɺ͋Θͤ ͯΞϓϦͷ࣌ؒ͋ΔͱࢥΘ͵ϘτϧωοΫ͕ݟ͔ͭͬͨΓ
͢Δɻ • ͲΕग़ͯͳ͍ͳΒ·ͣͲ͔ͬग़ͦ͏ʁ
ग़͢ͱΑͦ͞͏ͳͷɿॲཧ݁Ռ • ୯Ұ߲ͱͯ͠ग़͢ɻΧʔσΟφϦςΟʔԼ͛Δɻ • ूܭͯ͠ύΠνϟʔτͱ͔Ͱग़͢ͱঢ়گ͕Θ͔ΓΑ͍ɻ • ·͘͠ͳ͍݁ՌΛϑΟϧλϦϯά͢Δ࣌ͱཱ͔ͭɻ • ϩάϨϕϧͱͷΈ߹ΘͤͰߜΓࠐΊͨΓ͢Δ͚Ͳɺ୯Ұ ߲Ͱ͋Δͱख͕ؒݮΔɻ
• HTTP StatusͰࣄΓΔ͜ͱͦΕͳΓʹɻ
ग़͢ͱΑͦ͞͏ͳͷɿϦΫΤετݩ • ೝূϢʔβʔͷ໊લͱ͔ • σϑΥϧτͰग़ͨΓ͢Δ͚Ͳɺग़ͯͳ͍ͳΒՃ͠Α͏
ग़͢ͱΑͦ͞͏ͳͷɿϦΫΤετϔομ • ϦΫΤετύεˍϦΫΤετύϥϝλ • τϨʔεID͔ΒͬͨΓͰ͖ͳ͘ͳ͍͚ͲɺඞͣτϨʔ εID͔ΒḷΔͱ͔ͳΔͷແବɻ • ϩάΛ௨ͯ͠ύε͕ೖͬͯΔͱԿ͔ͱཱͭײ৮ɻ • ग़͢ͷબผ͠·͠ΐ͏Ͷɻ
ग़͢ͱΑͦ͞͏ͳͷɿۀతͳࣝผࢠ • ओཁͳID • ʮจIDʯͱ͔ɻ • Θ͔Γ࣍ୈMDCʹಥͬࠐΜͰɺͦͷID͕༗ޮͳؒͣͬͱೖͬ ͯΔͱḿΓ·͢ɻ • ʮSQLϩάʹ͔͠ग़ͯͳ͍ʯͱ͔ͭΒ͍ɻ
ग़͢ͱΑͦ͞͏ͳͷɿཱͪͦ͏ͳͷ • ௐࠪ࣌ʹखֻ͔Γʹ͍ͯ͠Δͷɺूܭͨ͠Βཱͪͦ͏ͳ ɺͳΜͰɻ • ग़ͯ͠ΈͯோΊͯΈͨΒؾ͖ͮଟ͍ • ಛʹΓ͡ΊԿͬͯͨΔͱࢥ͏ɻ • ߏԽϩάͳΒ͍͢͠͠ɺҾ͖͍͢ɻ
• ςΩετͩͱϝοηʔδʹೖΕΔͷ͕ؔͷࢁͰɺूܭͱ͔ ͮ͠Β͔ͬͨɻ • ྑ͔ͬͨͷଓ͚ͯɺΠϚΠνͳͷফͯ͠ɻҭͯΑ͏ɻ
࣮Ͱߟ͑Δ͜ͱͷࡐྉ ʻͦͷଞʼ
ੑೳ໘ • ϩάͷੑೳ͕ؾʹͳΔͱ͜ΖͰ·ͩࢼͯ͠ͳ͍Ͱ͢ • ͜ͷఔͷՃͳΒͦΜͳʹͳΒͳ͍ͱࢥ͏Μ͚ͩͲ • ͥͻଌఆͯ͠ڭ͍͑ͯͩ͘͞ʂʂ
ߏԽϩάͷઃܭ • ߏԽϩάͷઃܭʢΩʔͷܕʣҰେτϐοΫͰ͕͢ɺߟ ͑ํͷجຊσʔλϞσϦϯάͰ͢ɻϩάσʔλɻ • ಉ͡ͷಉ͡Ωʔ໊Ͱɺҧ͏ͷҧ͏Ωʔ໊Ͱѻ͏ɻ • ໎͏ͳΒҧ͏Ωʔ໊Λ͓ͬͯ͘ɻ • ಉ͡ΩʔΛҧ͏ҙຯͰ͏ͱݫ͍͠ɻ౷߹ൺֱత༰қɻ
• ͨͱ͑ "result" ͕ͱจࣈྻࠞࡏͩͱɺਓผͰ͖ͯ machine-readable͕ଛͳΘΕΔɻ • ࢲ·ͩख୳Γͯ͠Δײ͡ͳͷͰ࠷దղΒͳ͍Ͱ͢ɻ
ϩάपΓͷΈ͕Ͳ͏ͳͬͯΔ͔ • ϩάશମͷྲྀΕʹ͍ΛͤͯΈΑ͏ • ઌͷϩάҠૹ͘Μͱ͔ʢωʔϛϯάΑʢීஈͦΜͳݺͼํͯ͠ͳ͍ • ͍ΖΜͳͱ͜ͰϩάΛ͍ͬͯͨ͡Γ͢Δ • ϩάʹෆ۩߹ʢظ͢Δܗʹͳ͍ͬͯͳ͔ͬͨΓɺϩάϝο ηʔδ్͕தͰ్ΕͨΓʣ͕ى͖ͨ߹ɺͲ͜Ͱ͍ͬͯ
Δͷ͔ɺΈ͕Θ͔͍ͬͯΕΓ͚͕ૣ͘ͳΓ·͢ɻ • Θ͔͔ͬͨΒͱݴͬͯͤΔͱݴ͍ͬͯͳ͍
;Γ͔͑Γɿຊηογϣϯͷత ✓ߏԽϩάͷجຊΛཧղ͢Δ ✓SpringBoot3.4Ͱͷઃఆํ๏ΛΔ ✓࣮Ͱ׆༻͢ΔώϯτΛಘΔ ͍͚ͯͨʁ