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.4k
SpringBoot3.4の構造化ログ #kanjava
2025-01-30 関ジャバ'25 1月度
irof
January 30, 2025
Tweet
Share
More Decks by irof
See All by irof
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
300
複数アプリケーションを育てていくための共通化戦略
irof
10
4k
SpringBootにおけるオブザーバビリティのなにか
irof
1
970
Javaアプリケーションモニタリングの基本
irof
7
2.6k
Webアプリケーションを作りましょう
irof
0
130
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
6.2k
バッチを作らなきゃとなったときに考えること
irof
2
770
自分ひとりから始められる生産性向上の取り組み #でぃーぷらすオオサカ
irof
12
5.2k
役立つログに取り組もう
irof
36
13k
Other Decks in Programming
See All in Programming
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
260
CursorはMCPを使った方が良いぞ
taigakono
1
170
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
560
Claude Codeの使い方
ttnyt8701
1
130
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
130
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
240
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
660
Effect の双対、Coeffect
yukikurage
5
1.4k
GoのGenericsによるslice操作との付き合い方
syumai
3
680
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
310
Webからモバイルへ Vue.js × Capacitor 活用事例
naokihaba
0
760
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
430
65k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Fireside Chat
paigeccino
37
3.5k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Six Lessons from altMBA
skipperchong
28
3.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Become a Pro
speakerdeck
PRO
28
5.4k
A Tale of Four Properties
chriscoyier
160
23k
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Ͱͷઃఆํ๏ΛΔ ✓࣮Ͱ׆༻͢ΔώϯτΛಘΔ ͍͚ͯͨʁ