Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SpringBoot3.4の構造化ログ #kanjava
Search
irof
January 30, 2025
Programming
1.9k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SpringBoot3.4の構造化ログ #kanjava
2025-01-30 関ジャバ'25 1月度
irof
January 30, 2025
More Decks by irof
See All by irof
ふつうのFeature Flag実践入門
irof
8
5.3k
視座の上げ方
irof
1
180
アーキテクチャと考える迷子にならない開発者テスト
irof
10
4.5k
技術的負債の正体を知って向き合う
irof
0
1.2k
関ジャバと言う場
irof
0
440
型で語るカタ
irof
2
1.7k
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
550
複数アプリケーションを育てていくための共通化戦略
irof
9
6.9k
SpringBootにおけるオブザーバビリティのなにか
irof
1
1.5k
Other Decks in Programming
See All in Programming
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
120
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.9k
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
340
dotNET_vulnclicker_intro.pdf
deka_morita
0
110
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
170
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
630
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
21
21k
The Rails Doctrine Decade
koic
2
510
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
350
SREの越境 / SRE Collaboration
y0hgi
2
300
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
For a Future-Friendly Web
brad_frost
184
10k
Crafting Experiences
bethany
1
370
Building Adaptive Systems
keathley
44
3.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Balancing Empowerment & Direction
lara
6
1.3k
Making Projects Easy
brettharned
120
6.8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
420
Optimizing for Happiness
mojombo
378
71k
Building AI with AI
inesmontani
PRO
1
1.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The SEO identity crisis: Don't let AI make you average
varn
0
580
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Ͱͷઃఆํ๏ΛΔ ✓࣮Ͱ׆༻͢ΔώϯτΛಘΔ ͍͚ͯͨʁ