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
290
複数アプリケーションを育てていくための共通化戦略
irof
10
3.9k
SpringBootにおけるオブザーバビリティのなにか
irof
1
950
Javaアプリケーションモニタリングの基本
irof
7
2.6k
Webアプリケーションを作りましょう
irof
0
120
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
6.1k
バッチを作らなきゃとなったときに考えること
irof
2
770
自分ひとりから始められる生産性向上の取り組み #でぃーぷらすオオサカ
irof
12
5.2k
役立つログに取り組もう
irof
36
13k
Other Decks in Programming
See All in Programming
Go Modules: From Basics to Beyond / Go Modulesの基本とその先へ
kuro_kurorrr
0
120
Select API from Kotlin Coroutine
jmatsu
1
150
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
300
從零到一:搭建你的第一個 Observability 平台
blueswen
1
910
Gleamという選択肢
comamoca
6
720
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
810
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
22
6k
A comprehensive view of refactoring
marabesi
0
470
技術懸念に立ち向かい 法改正を穏便に乗り切った話
pop_cashew
0
1.4k
try-catchを使わないエラーハンドリング!? PHPでResult型の考え方を取り入れてみよう
kajitack
3
510
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
17
4.6k
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
450
Featured
See All Featured
A Tale of Four Properties
chriscoyier
159
23k
Designing for humans not robots
tammielis
253
25k
GraphQLとの向き合い方2022年版
quramy
46
14k
How to Ace a Technical Interview
jacobian
276
23k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
RailsConf 2023
tenderlove
30
1.1k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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Ͱͷઃఆํ๏ΛΔ ✓࣮Ͱ׆༻͢ΔώϯτΛಘΔ ͍͚ͯͨʁ