Slide 1

Slide 1 text

SpringBoot3.4ͷߏ଄Խϩά 2025-01-30 ؔδϟό'25 1݄౓ @irof ߏ଄Խϩάͷഎܠ͔ΒSpringBootͰͷΧελϚΠζ·Ͱ

Slide 2

Slide 2 text

irof • ݸਓࣄۀओ • ؔδϟόͷதͷਓ • Spring͸ͨͿΜ3͘Β͍͔Β • SpringBoot͕޿·ͬͨ݁ ՌɺSpringͷόʔδϣϯೝ ஌΋ݮ͖ͬͯͨؾ͕ɻ

Slide 3

Slide 3 text

ຊηογϣϯͷ໨త ✓ߏ଄ԽϩάͷجຊΛཧղ͢Δ ✓SpringBoot3.4Ͱͷઃఆํ๏Λ஌Δ ✓࣮຿Ͱ׆༻͢ΔώϯτΛಘΔ

Slide 4

Slide 4 text

ߏ଄Խϩάͷഎܠ

Slide 5

Slide 5 text

ߏ଄Խϩάͷഎܠ • Ϋϥ΢υͳͲΛड͚ͯখ͞ΊͳγεςϜͰ΋ෳ਺αʔόʔӡ༻ ʹͳΓɺϩάΛू໿ͯ͠ͷݕࡧɾ෼ੳΛߦ͏͜ͱͷޮՌ΍ඞ ཁੑ͕ߴ·͖ͬͯ·ͨ͠ɻ • ෳ਺ͷϩάΛू໿͢ΔͱͳΔͱɺϩάʹग़ྗ͍߲ͨ͠໨΋૿ ͍͖͑ͯ·͢ɻ • ΞϓϦέʔγϣϯ໊ͱ͔αʔόʔ໊ͱ͔ɻ

Slide 6

Slide 6 text

1αʔόʔͳΒཁΒͳ͍࿩͚ͩͲ

Slide 7

Slide 7 text

৑௕ԽͰঃʑʹ໘౗ʹͳͬͯʢ౒ྗͰΧόʔʣ ʮX߸ػʯͱ͔୆਺͕೺ѲͰ͖͍ͯΔ͏ͪ͸ɺ·ͩͳΜͱ͔…… ͡ΐʔͪΐʔ͔ɹɹɹ͡ΐʔ͡ΐʔʹ

Slide 8

Slide 8 text

ϩάΛҰՕॴʹूΊͨΒ؇࿨͞ΕΔͷ͚ͩͲ ूΊํͰΰλΰλ͋Δ͚Ͳࠓճ͸ͦͷ࿩͡Όͳ͍ ͨͩͷϑΝΠϧαʔόʔ ΋ϩάݟ͑Δ͘Μͷγ ϯϓϧͳྫɻ

Slide 9

Slide 9 text

ෳ਺αʔϏεʹͳ͖ͬͯͨΓ͢Δͱ͡Θ͡Θͱ

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Ҡૹ͸ʮϩάҠૹ͘Μʯ͕ؤுΔͷ͚ͩͲ Xͱ͔Yͱ͔͕গͳ͍͏ͪ͸͍͍͚ͩͲɺ૿͑ΔͱͭΒ͘ͳͬͯ͘Δ ʮϩάҠૹ͘Μʯ͸ ɾಠཱͯ͠ଘࡏ͢Δ ɾΞϓϦ͕΍Δ ɾϩάݟ͑Δ͘Μ͕΍Δ ͱ͔৭ʑ͋Δɻ

Slide 12

Slide 12 text

ύʔεʹ͖ͭ·ͱ͏໰୊ʢͷ͘͝Ұ෦ʣ • ϓϨʔϯςΩετΛύʔε͢ΔͨΊʹ͸ɺϧʔϧ͕ඞཁɻ • վߦ۠੾ΓˠελοΫτϨʔεόϥόϥࣄ݅ • ͋Δ͋Δ • εϖʔε۠੾Γˠϝοηʔδ్͕த·Ͱ͔͠ग़ͳ͍ • ͋Δ͋Δ • ؤுΕ͹ؤுΕΔʢΈΜͳؤு͖ͬͯͨʣ͚ͲɺͦΕؤுΔ ͱ͜ʁ͕ߏ଄ԽϩάͷಈػͷҰͭɻ

Slide 13

Slide 13 text

΄͔ʹ΋ɿϩάʹग़͢΋ͷΛม͑ͨ࣌ͱ͔ • ϩάʹ߲໨Λ௥Ճͨ࣌͠ɺϩάҠૹ͘Μ΋ซͤͯม͑ͳ͍ͱ ϩά͕·ͬͨ͘ݟ͑ͳ͘ͳͬͨΓ͢Δɻ • ແఀࢭͷϩʔϦϯάσϓϩΠͱ͔৽چόʔδϣϯࠞࡏͳΜͯ ͳΔͱ͞Βʹ΍΍͜͠͞͸૿͢ • ϩάʹ߲໨௥Ճ͢Δ͚ͩͰαʔϏεఀࢭ͢Μͷʁ΍ͩΑͶʁ ؤுΕʂ……ͱ͔ͳΔɻͭΒΈɻ

Slide 14

Slide 14 text

ͯ͜ͱͰɿग़͔࣌͢Βߏ଄Խ͓ͯ͜͠͏ͥͱ • JSONͱ͔ߏ଄ԽςΩετΛ࢖͑͹ྑ͍ • CSV΋ߏ଄ԽςΩετʁ·͊͏Μɻ • SSVʢSpaceSeparatedValuesʣ΋ߏ଄ԽςΩετʁťŦƄŮɻ ແཧ΍ΓݴΘͤͨײ͚ͩͲ ݕࡧͨ͠Β͋ΔͬΆ͍……ʁ

Slide 15

Slide 15 text

ߏ଄Խϩάͷجຊ

Slide 16

Slide 16 text

ߏ଄Խϩάͷجຊ • Ωʔͱ஋ͷϖΞ • ඪ४తͳϑΥʔϚοτʢJSONʣ • ʢػցతʹʣՄಡੑ͕ߴ͘ɺॲཧ͠΍͍͢ • ༷ʑͳπʔϧͰ௚઀ར༻Մೳ • JSONͷΤίγεςϜʹ৐ΕΔʢJSONͳΒʣ • มߋʹॊೈʹରԠͰ͖Δ • ׮༰ͳϦʔμʔύλʔϯ͕Α͘औΒΕ͍ͯΔҹ৅ɻ

Slide 17

Slide 17 text

঺հɿ׮༰ͳϦʔμʔ • ඞཁͳ΋ͷ͚ͩநग़ͯ͠ɺະ ஌ͷίϯςϯπΛແࢹ͠ɺม ܗతͳσʔλߏ଄Λड༰͢Δ • ͜ͷ໊લ͸αʔϏεσβΠϯ ύλʔϯͰݟͨʢઈ൛ʁʣ • ಉ༷ͷ͜ͱ͸Α͘ݴΘΕΔɻ ݹ͘͸ϙεςϧͷ๏ଇ ʢRFC791, 1981ʣͳͲɻ

Slide 18

Slide 18 text

ߏ଄Խϩάͷྫ ←ैདྷͷϩά

Slide 19

Slide 19 text

ैདྷͷϩάͱߏ଄Խϩάͷҧ͍ • ैདྷͷϩά • ղੳ΍ݕࡧ͕จࣈྻʹର͢ΔͦΕ • ਓʹ༏͠Ίʢ༏͍͠ͱ͸ݴ͍ͬͯͳ͍ʣ • ߏ଄Խϩά • ੔ཧ͞Εͨσʔλ • ػցʹ΍͘͞͠ɺਓʹݫ͠Ί • ߏ଄Խϩά͕ಡΈ΍͍͢ਓ͸ਓΛ൒෼ࣙΊͯΔઆ

Slide 20

Slide 20 text

ਓʹݫ͠ΊɿಡΉؾ͕ى͖ͳ͍ ͜Ε͸ʮจࣈͷཏྻʯͬͯೝࣝ͢Δͷ͕Ұൠਓͩͱࢥ͍·͢

Slide 21

Slide 21 text

pretty printͨ͠ΒಡΊΔʢʁʣ

Slide 22

Slide 22 text

ߏ଄Խϩάͷجຊɿ·ͱΊ • JSONͰग़ͯͨΒߏ଄Խϩάʢࡶ

Slide 23

Slide 23 text

Spring Boot 3.4Ͱͷߏ଄Խϩά جຊฤ

Slide 24

Slide 24 text

• logging.structured.format.consoleΛઃఆ͢Δ͚ͩ • ʢϩάԿ΋͍ͬͯ͡ͳ͍ͳΒʣ • ΋ͪΖΜapplication.ymlͰ΋؀ڥม਺Ͱ΋ͳΜͰ΋͍͍ɻ ઃఆ application.ymlͳΒˠ

Slide 25

Slide 25 text

SpringBoot3.3Ҏલͱͷҧ͍ • ҎલΑΓECS Logging΍Logstash Logback EncoderͳͲΛ࢖ ༻ͯ͠JSONͰͷग़ྗ͸Մೳ • ඪ४͚ͩͰ΋ύλʔϯʹJSONͬΆ͍จࣈྻΛࢦఆ͢Ε͹ग़དྷ ͳ͘΋ͳ͍͕ɺෆׄ޷ˍखؒˍॊೈੑʹ͚ܽΔɻ • 3.4Ҏ߱ͳΒ1Օॴઃఆ͢Δ͚ͩʂ

Slide 26

Slide 26 text

༗ޮԽͱରԠϑΥʔϚοτ • ༗ޮԽ • logging.structured.format.(console| f ile) ʹࢦఆ • ࢦఆͰ͖ΔϑΥʔϚοτ • ECS: Elastic Common Schema • GELF: Graylog Extended Log Format • Logstash • ʢΧελϜʢޙड़ʣʣ SpringͷಠࣗܗࣜͰ͸ͳ͍ͷͰ͢

Slide 27

Slide 27 text

SLF4JͰͷ߲໨௥ՃɿMDC • MDCʹηοτͨ͠΋ͷ͕Կ΋ͤͣͱ΋ग़·͢ɻ ʢMDCͳΜͧ΍Λฉ͘ʣ ͜ΕͶˠ

Slide 28

Slide 28 text

ࢀߟɿMDCͷ։์ https://irof.hateblo.jp/entry/2024/06/20/152018

Slide 29

Slide 29 text

SLF4JͰͷ߲໨௥ՃɿFluent Logging API • SLF4J 2Ͱಋೖ͞Εͨ৽͍͠API • SLF4Jͷϝδϟʔόʔδϣϯ্͕͕͍ͬͯΔ͜ͱʹؾ͍͍ͮͯ ͳ͍ਓଟ͍ʢؾ͔ͮͳͯ͘΋͍͍Α͏ʹઃܭ͞Ε͍ͯΔʣ Fluent APIࣗମ͕޷Έ΋͋Δ͠ɺ୯७ͳϩάग़ྗͷ ͨΊͷAPIͱͯ͠͸ಡΈ΍͍͢ͱ͸ݴ͍೉͍͕ɺ ༷ʑͳίϯςΩετΛग़ྗ͢Δࡍ͸ॻ͖΍͘͢ಡΈ ΍͍͢ͱݴ͑Δͱࢥ͏ʢݸਓͷײ૝ʢগͳ͘ͱ΋Ҿ ਺΍static importલఏͷϝιουΑΓ͸ɻ

Slide 30

Slide 30 text

SLF4JͰͷ߲໨௥ՃɿFluent Logging API • 1ͭͷϩάʹ͚ͩग़͍ͨ͠ͱ͖͸MDC͡Όͳͬͪ͘͜ɻ ͜ΕͶˠ

Slide 31

Slide 31 text

جຊฤɿ·ͱΊ • logging.structured.format.console Λઃఆ͢Δ͚ͩͰߏ଄Խ ϩά͕ग़Δʂ • ͱͯ΋ώϡʔϚϯΞϯϦʔμϒϧʂʂ • MDCͱ͔Fluent APIͰࣗ༝ʹ߲໨Λ௥ՃͰ͖Δʂ

Slide 32

Slide 32 text

Spring Boot 3.4Ͱͷߏ଄Խϩά த਎ͱΧελϚΠζ

Slide 33

Slide 33 text

ͪΐͬͱͨ͠ΧελϚΠζ • logging.structured.json.(include|exclude|rename|add) • ཁΒΜΘͬͯͷফͨ͠Γ: exclude • Key໊ม͑ͨΓ: rename • ௥Ճͨ͠Γ: add • શϩάʹڞ௨ͷ΋ͷΛ௥Ճ͢Δɻ • ଞͷϓϩύςΟ΋ࢀরͰ͖Δɻ ྫ͸লུ

Slide 34

Slide 34 text

ߏ଄ԽϩάपΓͷ؆қΫϥεਤ

Slide 35

Slide 35 text

ߏ଄ԽϩάपΓͷ؆қΫϥεਤ ؆қͳJSONΛॻ͘΍͕ͭര஀ͯ͠Δɻ JSONͷߏ଄Խϩάग़ྗʹJacksonͳͲ͸ ࢖༻͍ͯ͠ͳ͍ɻ

Slide 36

Slide 36 text

ߏ଄ԽϩάपΓͷ؆қΫϥεਤ ʮߏ଄Խϩάʯ≠ʮJSONϩάʯ StructuredLogFormatter͸ϓϨʔϯςΩετ ΋ग़ͤΔʢϦϑΝϨϯεͷྫ΋ͦΕʣ

Slide 37

Slide 37 text

ߏ଄ԽϩάपΓͷ؆қΫϥεਤ ϓϩύςΟͰࢦఆͰ͖Δͷ͸ CommonFormatterͱݺ͹ΕΔҰ܈ɻ Common͡Όͳ͍ͷ͸޷͖ʹ࡞Εͬͯܗɻ

Slide 38

Slide 38 text

ߏ଄ԽϩάपΓͷ؆қΫϥεਤ Logbackґଘ෦෼͸o.s.boot.logging.structuredͷ֎ (o.s.boot.logging.logbackʹ͋Δɻಉ༷ͷ͕log4j2ͷ΋Ұࣜɻʣ

Slide 39

Slide 39 text

دΓಓɿJsonWriter • SpringBoot3.4Ͱ௥Ճ͞Εͨɻ • ʮͪΐͬͱJSONʹ͍ͨ͠Μ͚ͩͲJacksonͱ͔GSONͱ͔ ೖͬͯͳ͍ʢor໘౗ʣͩͳ͊ʯʹ͸࢖͑ͦ͏ʁ ʮSpringBoot࢖ͬͯͯJackson࢖͑ͳ͍ʯ ͸ͳ͔ͳ͔ϨΞͳ৚݅ͩͱࢥ͏͚Ͳɻ

Slide 40

Slide 40 text

JsonWriter#of • standardͰ෺଍Γͳ͚Ε͹of ͰϚοϐϯάΛॻ͘ɻ • LambdaͷೖΕࢠ΍Members ͷѻ͍ͳͲɺͦΕͳΓʹΫη ͕͋Δɻ࢖͏Մೳੑ͕͋Δͳ ΒૉৼΓ͠ͱ͍ͨํ͕͍͍ɻ • ͨͱ͑͹ӈͷ͸writerΛvarʹͨ͠ ΒίϯύΠϧ௨Βͳ͍ͱ͔ɺ஍ຯ ͳͷ͕ͪΐ͍ͪΐ͍ɻ

Slide 41

Slide 41 text

JsonWriter.Members • addͰ௥Ճ͢Δ • applyingXxx Ͱ͍͡Δ • ValueProcessor͸݁ߏ͓΋͠Ζ͍ʢޙड़

Slide 42

Slide 42 text

͕ͬͭΓΧελϚΠζ • ecs/gelf/logstashͷͲΕ΋ؾʹೖΒͳ͍ʂ • add΍exclude΍rename͡Ό෺଍Γͳ͍ʂʂ • ΦϨΦϨJSONͰग़͍ͨ͠ʂʂʂ • ೋ୒ʢࡉ͔͘ݴ͑͹ࡾ୒ʣ͋ΔɻͲ͏͢Δʁʁ • StructuredLogFormatter(JsonWriterStructuredLogFormatter) • StructuredLoggingJsonMembersCustomizer

Slide 43

Slide 43 text

StructuredLogFormatterͰͷΧελϚΠζ

Slide 44

Slide 44 text

StructuredLogFormatterͰͷΧελϚΠζ • ΫϥεΛ࡞ͬͯɺecsͱ͔ͷ୅ΘΓʹFQCNΛࢦఆ͢Δ

Slide 45

Slide 45 text

🚫StructuredLogFormatterɿMarkdownͷϦετͰग़͢ վߦΛҰஈ͛ͯ͞Έͨ ʢ࣮༻ੑ͸ͨͿΜͳ͍ʣ

Slide 46

Slide 46 text

🚫JsonWriterStructuredLogFormatterɿϝοηʔδ͚ͩͷJSONͰग़͢ withNewLineAtEnd()͚ͭͳ͍ͱ1ߦͷJSONʹͳΔ͠ɺ lambdaͷܕলུͰ͖ͳ͍͠ɺ஍ຯʹ໘౗ɻ

Slide 47

Slide 47 text

🚫StructuredLogFormatterͰͷΧελϚΠζ • ࠜݩ͔Βม͑Δ΍ͭ • SpringBoot͋Δ͋Δͷʮ৮ΔͱSpringBoot͔Β֎ΕΔՄೳੑͷ͋Δϩ ΪϯάγεςϜ޲͚֦ுϙΠϯτʯͰ͢ɻ • ϦϑΝϨϯεʹ΋ॻ͍ͯΔ͠ɺࢦఆํ๏ͰΘ͔ΔͩΖͱݴΘΕΕ͹ɺͦΕ͸ͦ͏ɻ • StructuredLogFormatter • ͜͜৮Δ͘Β͍ͳΒLogbackͷEncoderͷ͕Α͘Ͷʁ • JsonWriterStructuredLogFormatter • StructuredLoggingJsonMembersCustomizerͰΑ͘Ͷʁ • ͜ͷลΓͷ֦ு͸ΨοπϦLogbackʹґଘ͢Δͷ΋ؾʹͳΔͱ͜ɻ

Slide 48

Slide 48 text

StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ

Slide 49

Slide 49 text

StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ • SpringBootͷ਌੾ͳͱ͜ͷҰͭɿҰൠਓ޲͚ͷΧελϚΠζ ʹ͸Customizer໊ͬͯલ͕͍ͭͯΔ • Ұൠਓ͸σϑΥͷ··࢖͏΄͏͕͍͍ͱ͔͸͓͖ͯ͞ • ϓϩύςΟͷaddͱ͔΋͜ͷ࣮૷ͰߦΘΕ͍ͯΔ • ॱ൪͸ϓϩύςΟͷ͕ઌɺ௥Ճͨ͠ͷ͸ޙΆ͍ɻ • ͦ͏͍͏࣮૷ɻυΩϡϝϯτʹ͸ͳ͛͞ɻ • ϓϩύςΟͱಠࣗCustomizerͰಉ͡Ωʔ໊৮Δͷ΍Ίͱ͜͏Ͷʁ

Slide 50

Slide 50 text

StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ • logging.structured.json.customizerʹFQCNͰࢦఆ͢Δ • META-INF/spring.factories Ͱ΋ࢦఆͰ͖Δɻෳ਺ࢦఆ͍ͨ͠ ͱ͔ج൫ͳͲ͕ڧ੍͍ͨ͠ͱ͔ͳΒ͔ͬͪ͜ͳʁ

Slide 51

Slide 51 text

🤔StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ ग़͢ͳΑʢਅإ ʮ͋ͱͰʯͱݴͬͯͨValueProcessorͷ࿩

Slide 52

Slide 52 text

StructuredLoggingJsonMembersCustomizerͰͷΧελϚΠζ • ϩΪϯάγεςϜʹΑΒͳ͍ΧελϚΠζ͕Մೳ • ecs/gelf/logstashͷͲΕ͔͸ϕʔεʹ͢Δ • JsonWriterΛ௨ͯ͠JSONΛ͍͡ΕΔ • JSONͷத਎ʹؔͯ͜͠Ε·Ͱߏ଄ԽϩάϥΠϒϥϦͰ΍ͬͯ ͨ͜ͱ΋͋Δఔ౓͸Ͱ͖ΔΜ͡Όͳ͍͔ͳײ͸͋Δ • ͕ͬͭΓΧελϚΠζͬͯݴͬͯ΋͜ΕͰ΍Δͷ͕Α͔Ζ͏

Slide 53

Slide 53 text

஫ҙ఺

Slide 54

Slide 54 text

όφʔ͕ग़ͳ͘ͳͬͯ͠·͏ • SpringBootىಈ࣌ʹ͓ग़ ܴ͑ͯ͘͠ΕΔӈͷό φʔ͕ߏ଄ԽϩάΛ༗ޮ ʹ͢Δͱग़·ͤΜɻ • όφʔ͕ͳ͍ͱக໋తʹ ͳΔγεςϜͰ͸ཁ஫ҙ Ͱ͢ɻ ͋ɺݩʑཁΒͳ͔ͬͨʁ͔ͦͬ͊ɻ

Slide 55

Slide 55 text

ӡ༻தͷlogback.xml͕͋Δਓ • logback.xmlͱ͔ࣗ෼ͨͪͰ࡞ͬͯͨΒɺ͍͘ΒϓϩύςΟઃ ఆͯ͠΋ޮՌͳ͍Ͱ͢ɻ࢖͏༷ʹencoderม͑ͯͶɻ • StructuredLogEncoderΛlogback.xmlͱ͔Ͱ࢖͏ͱʮSpring ಈ͍ͯͶʔΑʯౖͬͯΒΕΔɻૉ௚ʹlogback-spring.xmlͱ ͔࢖͍·͠ΐɻ

Slide 56

Slide 56 text

ECS΍LogstashͳͲ͸࢖͍ͬͯͳ͍ • ઌͷ௨ΓɺϑΥʔϚοτʹରԠͨ͠ग़ྗΛSpringBoot͕࣮૷ ͍ͯ͠·͢ɻ • ґଘϥΠϒϥϦΛ୳ͯ͠΋ecs-logging΍logstash-logback- encoderͳͲ͸ग़͖ͯ·ͤΜɻ • ͭ·Γecs-loggingͳͲͷઃఆ͸ޮ͖·ͤΜɻ • ͦͷ͋ͨΓ͕ඞཁͳΒSpringBootͷߏ଄Խϩά͸࢖Θͣɺ ࠓ·Ͱ௨ΓϥΠϒϥϦΛ࢖͍·͠ΐ͏ɻ

Slide 57

Slide 57 text

ิ଍ɿecs-logging • https://www.elastic.co/ guide/en/ecs-logging/ java/1.x/setup.html • encoder(Logbackͷ৔ ߹ʣͷઃఆͱ͔ॻ͍ͯΔ ͚ͲɺSpringBootͰecs Λࢦఆͯ͠΋͜Ε͸ؔ܎ ͳ͍ΜͰ͢ɻ

Slide 58

Slide 58 text

ʢ৽͍͠࿩͡Όͳ͍͚ͲʣMDCͱ͔࢖͏࣌͸ • MDC͸جຊతʹThreadLocalΛ࢖ͬͯΔ • ผεϨουʹ͸ࣗಈతʹ͸Ҿ͖ܧ͕Εͳ͍ • ಉ͡εϨουʹ͸༧ظͤͣҾ͖ܧ͕ΕΔ • ࣗ෼ͰεϨου͍͡Δ࣌͸ؾΛ͚ͭͯͶʂ • ʮͦΕ͘Β͍ϑϨʔϜϫʔΫ͕໘౗Έͯ͘Εͳ͍ͷʁʯ • ϑϨʔϜϫʔΫ͕໘౗ݟͯΔͱ͜͡Όͳ͍ͱ͜ͰεϨουى ͜͞ΕͨΒݫ͍ͬ͢͠ɻʢϑϨʔϜϫʔΫ԰ΑΓʣ

Slide 59

Slide 59 text

࣮຿Ͱߟ͑Δ͜ͱͷࡐྉ

Slide 60

Slide 60 text

࣮຿Ͱߟ͑Δ͜ͱͷࡐྉ ʻಋೖʹࡍͯ͠ʼ

Slide 61

Slide 61 text

ߏ଄ԽϩάΛ࢖͏͔൱͔ʁ • ͘͝খن໛ͳΞϓϦέʔγϣϯΛআ͚͹ߏ଄ԽϩάʹऔΓ૊ ΉՁ஋͸͋Γ·͢ɻ • ΞϓϦέʔγϣϯαʔόʔ͚ؒͩͰͳ͘ଞγεςϜ΍Πϯϑϥ Λލ͍Ͱͷϩάԣ۲ݕࡧ͸ඪ४૷උͰ͋ͬͯཉ͍͠ɻ • ͜Ε·Ͱ͸ߏ଄ԽϩάΛग़ྗ͢ΔͨΊʹϥΠϒϥϦͷ௥Ճͳ ͲΛߦ͏ඞཁ͕͋Γ·͕ͨ͠ɺෆཁʹͳΓ·ͨ͠ɻ • ϓϩύςΟࢦఆ͢Δ͚ͩͰ௥͍͚ͭ·͢ɻ΍ͬͨͶʂ

Slide 62

Slide 62 text

ඪ४ߏ଄Խϩάಋೖݕ౼ϑϩʔ ΧελϚΠζͯ͠ͳ͍ͳΒඪ४ʹ৐Γ׵͑ͱ͘ͷ͕͍͍ͱࢥ͏Μͩ

Slide 63

Slide 63 text

͍ͭͰ΋ߏ଄ԽϩάΛ࢖͏͔ʁ • গͳ͘ͱ΋ϩʔΧϧ΍ϢχοτςετͰग़ྗ͞ΕΔϩάʹߏ ଄Խϩά͸ෆཁͳ৔߹͕ଟ͍Ͱ͢ɻ • ߏ଄Խϩά͸ machine-readable ʢSpringBootͷϦϑΝϨϯ εͰͷهड़ʣͰ͕͢ɺhuman-readableͰ͸͋Γ·ͤΜɻ • IDEͷλʔϛφϧʹग़͢ͷ͸ैདྷ௨ΓϓϨʔϯςΩετ͕͓͢ ͢ΊͰ͢ɻ੾Γସ͑ΒΕΔΑ͏ʹ͠ͱ͖·͠ΐ͏ɻ • ϓϨʔϯςΩετͷϩά΋ݟ΍͍ͯ͘͢͜͠͏Ͷʁ

Slide 64

Slide 64 text

࣮຿Ͱߟ͑Δ͜ͱͷࡐྉ ʻग़͢ͱΑͦ͞͏ͳ΋ͷʼ

Slide 65

Slide 65 text

ग़͢ͱΑͦ͞͏ͳ΋ͷɿॲཧ࣌ؒ • ୯Ұ߲໨ͱͯ͠ɺmsΛ਺஋Ͱग़͢ɻ • ϝοηʔδʹจࣈྻͰೖͬͯͨΒܭࢉʹख͕͔͔ؒΔɻ • ߏ଄ԽϩάͳΒҰൃͰܭࢉͰ͖Δɻ • LBͱ͔Tomcatͱ͔ͷΞΫηεϩάͰ΋͍͍Μ͚ͩͲɺ͋Θͤ ͯΞϓϦͷ࣌ؒ΋͋ΔͱࢥΘ͵ϘτϧωοΫ͕ݟ͔ͭͬͨΓ ͢Δɻ • ͲΕ΋ग़ͯͳ͍ͳΒ·ͣͲ͔ͬ͸ग़ͦ͏ʁ

Slide 66

Slide 66 text

ग़͢ͱΑͦ͞͏ͳ΋ͷɿॲཧ݁Ռ • ୯Ұ߲໨ͱͯ͠ग़͢ɻΧʔσΟφϦςΟʔ͸Լ͛Δɻ • ूܭͯ͠ύΠνϟʔτͱ͔Ͱग़͢ͱঢ়گ͕Θ͔ΓΑ͍ɻ • ޷·͘͠ͳ͍݁ՌΛϑΟϧλϦϯά͢Δ࣌ͱ͔΋໾ཱͭɻ • ϩάϨϕϧͱͷ૊Έ߹ΘͤͰߜΓࠐΊͨΓ΋͢Δ͚Ͳɺ୯Ұ ߲໨Ͱ͋Δͱख͕ؒݮΔɻ • HTTP StatusͰࣄ଍ΓΔ͜ͱ΋ͦΕͳΓʹɻ

Slide 67

Slide 67 text

ग़͢ͱΑͦ͞͏ͳ΋ͷɿϦΫΤετݩ • ೝূϢʔβʔͷ໊લͱ͔ • σϑΥϧτͰग़ͨΓ΋͢Δ͚Ͳɺग़ͯͳ͍ͳΒ௥Ճ͠Α͏

Slide 68

Slide 68 text

ग़͢ͱΑͦ͞͏ͳ΋ͷɿϦΫΤετϔομ • ϦΫΤετύεˍϦΫΤετύϥϝλ • τϨʔεID͔Β௥ͬͨΓ͸Ͱ͖ͳ͘͸ͳ͍͚ͲɺඞͣτϨʔ εID͔ΒḷΔͱ͔ͳΔͷ͸ແବɻ • ϩάΛ௨ͯ͠ύε͕ೖͬͯΔͱԿ͔ͱ໾ཱͭײ৮ɻ • ग़͢΋ͷ͸બผ͠·͠ΐ͏Ͷɻ

Slide 69

Slide 69 text

ग़͢ͱΑͦ͞͏ͳ΋ͷɿۀ຿తͳࣝผࢠ • ओཁͳID • ʮ஫จIDʯͱ͔ɻ • Θ͔Γ࣍ୈMDCʹಥͬࠐΜͰɺͦͷID͕༗ޮͳؒͣͬͱೖͬ ͯΔͱḿΓ·͢ɻ • ʮSQLϩάʹ͔͠ग़ͯͳ͍ʯͱ͔ͭΒ͍ɻ

Slide 70

Slide 70 text

ग़͢ͱΑͦ͞͏ͳ΋ͷɿ໾ཱͪͦ͏ͳ΋ͷ • ௐࠪ࣌ʹखֻ͔Γʹ͍ͯ͠Δ΋ͷɺूܭͨ͠Β໾ཱͪͦ͏ͳ ਺஋ɺͳΜͰ΋ɻ • ग़ͯ͠ΈͯோΊͯΈͨΒؾ͖ͮ͸ଟ͍ • ಛʹ΍Γ͸͡Ί͸Կ΍ͬͯ΋౰ͨΔͱࢥ͏ɻ • ߏ଄ԽϩάͳΒ଍͠΍͍͢͠ɺҾ͖΍͍͢ɻ • ςΩετͩͱϝοηʔδʹೖΕΔͷ͕ؔͷࢁͰɺूܭͱ͔ ͸ͮ͠Β͔ͬͨɻ • ྑ͔ͬͨͷ͸ଓ͚ͯɺΠϚΠνͳͷ͸ফͯ͠ɻҭͯΑ͏ɻ

Slide 71

Slide 71 text

࣮຿Ͱߟ͑Δ͜ͱͷࡐྉ ʻͦͷଞʼ

Slide 72

Slide 72 text

ੑೳ໘ • ϩάͷੑೳ͕ؾʹͳΔͱ͜ΖͰ͸·ͩࢼͯ͠ͳ͍Ͱ͢ • ͜ͷఔ౓ͷՃ޻ͳΒͦΜͳ໰୊ʹͳΒͳ͍ͱࢥ͏Μ͚ͩͲ • ͥͻଌఆͯ͠ڭ͍͑ͯͩ͘͞ʂʂ

Slide 73

Slide 73 text

ߏ଄Խϩάͷઃܭ • ߏ଄ԽϩάͷઃܭʢΩʔ΍஋ͷܕʣ͸ҰେτϐοΫͰ͕͢ɺߟ ͑ํͷجຊ͸σʔλϞσϦϯάͰ͢ɻϩά΋σʔλɻ • ಉ͡΋ͷ͸ಉ͡Ωʔ໊Ͱɺҧ͏΋ͷ͸ҧ͏Ωʔ໊Ͱѻ͏ɻ • ໎͏ͳΒҧ͏Ωʔ໊Λ࢖͓ͬͯ͘ɻ • ಉ͡ΩʔΛҧ͏ҙຯͰ࢖͏ͱݫ͍͠ɻ౷߹͸ൺֱత༰қɻ • ͨͱ͑͹ "result" ͕਺஋ͱจࣈྻࠞࡏͩͱɺਓ͸൑ผͰ͖ͯ ΋machine-readable͕ଛͳΘΕΔɻ • ࢲ΋·ͩख୳Γͯ͠Δײ͡ͳͷͰ࠷దղ͸஌Βͳ͍Ͱ͢ɻ

Slide 74

Slide 74 text

ϩάपΓͷ࢓૊Έ͕Ͳ͏ͳͬͯΔ͔ • ϩάશମͷྲྀΕʹ૝͍Λ஘ͤͯΈΑ͏ • ઌͷϩάҠૹ͘Μͱ͔ʢωʔϛϯάΑʢීஈ͸ͦΜͳݺͼํͯ͠ͳ͍ • ͍ΖΜͳͱ͜ͰϩάΛ͍ͬͯͨ͡Γ͢Δ • ϩάʹෆ۩߹ʢظ଴͢Δܗʹͳ͍ͬͯͳ͔ͬͨΓɺϩάϝο ηʔδ్͕தͰ్੾ΕͨΓʣ͕ى͖ͨ৔߹ɺͲ͜Ͱ΍͍ͬͯ Δͷ͔ɺ࢓૊Έ͕Θ͔͍ͬͯΕ͹੾Γ෼͚͕ૣ͘ͳΓ·͢ɻ • Θ͔͔ͬͨΒͱݴͬͯ௚ͤΔͱ͸ݴ͍ͬͯͳ͍

Slide 75

Slide 75 text

;Γ͔͑Γɿຊηογϣϯͷ໨త ✓ߏ଄ԽϩάͷجຊΛཧղ͢Δ ✓SpringBoot3.4Ͱͷઃఆํ๏Λ஌Δ ✓࣮຿Ͱ׆༻͢ΔώϯτΛಘΔ ͍͚ͯͨʁ