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
型で語るカタ
irof
2
990
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
330
複数アプリケーションを育てていくための共通化戦略
irof
10
4.7k
SpringBootにおけるオブザーバビリティのなにか
irof
1
1k
Javaアプリケーションモニタリングの基本
irof
7
2.7k
Webアプリケーションを作りましょう
irof
0
160
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
6.4k
バッチを作らなきゃとなったときに考えること
irof
2
810
自分ひとりから始められる生産性向上の取り組み #でぃーぷらすオオサカ
irof
12
5.3k
Other Decks in Programming
See All in Programming
AIに安心して任せるためにTypeScriptで一意な型を作ろう
arfes0e2b3c
0
340
Understanding Kotlin Multiplatform
l2hyunwoo
0
250
202507_ADKで始めるエージェント開発の基本 〜デモを通じて紹介〜(奥田りさ)The Basics of Agent Development with ADK — A Demo-Focused Introduction
risatube
PRO
6
1.4k
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
3
2k
Gemini CLIの"強み"を知る! Gemini CLIとClaude Codeを比較してみた!
kotahisafuru
3
960
新しいモバイルアプリ勉強会(仮)について
uetyo
1
250
Flutterと Vibe Coding で個人開発!
hyshu
1
240
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
540
Strands Agents で実現する名刺解析アーキテクチャ
omiya0555
1
120
GUI操作LLMの最新動向: UI-TARSと関連論文紹介
kfujikawa
0
720
0から始めるモジュラーモノリス-クリーンなモノリスを目指して
sushi0120
0
250
PHPUnitの限界をPlaywrightで補完するテストアプローチ
yuzneri
0
400
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
The World Runs on Bad Software
bkeepers
PRO
70
11k
BBQ
matthewcrist
89
9.8k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
For a Future-Friendly Web
brad_frost
179
9.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Six Lessons from altMBA
skipperchong
28
3.9k
Site-Speed That Sticks
csswizardry
10
760
The Cult of Friendly URLs
andyhume
79
6.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Raft: Consensus for Rubyists
vanstee
140
7.1k
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Ͱͷઃఆํ๏ΛΔ ✓࣮Ͱ׆༻͢ΔώϯτΛಘΔ ͍͚ͯͨʁ