Slide 1

Slide 1 text

ϨΨγʔγεςϜʹͲ͏ཱͪ޲͔͏͔ ෳࡶ͞ͱཧ૝ͱݱ࣮ 2024/11/06 ϛϥΠτσβΠϯɹ΄͛͞Μ

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

΄͛͞Μ • גࣜձࣾϛϥΠτσβΠϯͷόοΫΤϯυΤϯδχΞ • ίʔσΟϯά޷͖Ͱ͍ΖΜͳݴޠΛ৮Γ·͢ • ͚͋͢Μ͞Μ͸̍೥൒ 
 ΍Βͤͯ΋Βͬͯ·͢ • ڈ೥ → ͷ͓͸ͳ͠Λ 
 ͍͍ͤͯͨͩͯ͞·͢

Slide 4

Slide 4 text

͍Ζ͍ΖΞ΢τϓοτ͍ͯ͠·͢ • Zenn ʹهࣄΛॻ͍ͨΓ YouTube ʹಈըΛ্͛ͨΓ͍ͯ͠·͢ 
 
 
 
 
 
 • ࠓ೥ͷ೥࢝ʹल࿨γεςϜ༷͔Β 
 Docker ͷຊΛग़൛͍͖ͤͯͨͩ͞·ͨ͠

Slide 5

Slide 5 text

ϦΞʔΩςΫνϟͱ͸

Slide 6

Slide 6 text

PHP → Kotlin ͱ͸

Slide 7

Slide 7 text

୯७ͳݴޠͷ຋༁ͩͬͨΒ͜͏ • PHP • if • for • class • F5 Ͱίʔυ֬ೝ • Kotlin • if • map / f ilter • data class • let, also • ίϯύΠϧͰίʔυ֬ೝ

Slide 8

Slide 8 text

౰વͦΕ͚ͩͰ͸ͳ͍

Slide 9

Slide 9 text

લճ͓͸ͳͨ͠͠໨ࢦ͢ܗ • ϏδωεͱίʔυΛ࿈ಈ͍ͤͨ͞ • ଎͘։ൃͰ͖ΔΑ͏ʹ͍ͨ͠

Slide 10

Slide 10 text

Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ Interface Class QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ

Slide 11

Slide 11 text

ϦΞʔΩςΫνϟͱ͸ • ݴޠ A → ݴޠ B ͷͨͩͷ຋༁࡞ۀΛͯ͠΋Ձ஋͸௿͍ • ͦΕͬΆ͍ϨΠϠʔΞʔΩςΫνϟΛߟ͑ͯ΋·ͩ଍Γͳ͍ • ໰୊ͷ͋Δঢ়ଶ͔Βൈ͚ग़͞ͳ͚Ε͹ͳΒͳ͍

Slide 12

Slide 12 text

Ͱ͸໰୊ͱ͸ͳʹ͔

Slide 13

Slide 13 text

೔ʑฉ͑͜Δ ʮෳࡶʯͱ͍͏ڣͼ

Slide 14

Slide 14 text

ʮෳࡶʯͳ΋ͷʹ໨ΛΉ͚Δ • େ͖͍΋ͷʹ͸ཱͪ޲͔͑ͳ͍ͷͰɺʮෳࡶʯΛ෼ྨͯ͠ΈΔ • ࢓༷ͷʮෳࡶʯ͞ • ݴ༿ͷʮෳࡶʯ͞ • ίʔυͷʮෳࡶʯ͞ • σʔλͷʮෳࡶʯ͞ • ͦΕͧΕͷʮෳࡶʯʹ͍ͭͯߟ͑ͭͭɺ͋Θͤͯʮཧ૝ʯ΋ೝࣝ͢Δ • ࠓ೔ͷ಺༰ʹ͍͓ͭͯ͜ͱΘΓ • ࢓༷΋ίʔυ΋ͦΕͬΆ͍͚ͩͰݫີʹ͸ຊ෺Ͱ͸͋Γ·ͤΜ • ͦͯ͠࢓༷΋ίʔυ΋΋ͬͱ΋ͬͱͣͬͱͣͬͱ೉ఢͰ͢

Slide 15

Slide 15 text

࢓༷ͷʮෳࡶʯ͞

Slide 16

Slide 16 text

ͨͱ͑͹ ʮجૅ୅ँʯͱ͸ͳʹ͔

Slide 17

Slide 17 text

ίʔυΛಡΉͱ͖ʹਅʹ΍Δ΂͖͜ͱ 基礎代謝 = 0 if ( Request Body に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(体重) } • ࣈ໘ΛಡΉ͜ͱɺͰ͸ͳ͍ • ม਺Λ౰ͯ͸ΊΔ͜ͱɺͰ΋ͳ͍ • ෼ذΛ௥͍͔͚Δ͜ͱɺͰ΋ͳ͍ • ʮԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ʯ ஌Δ͜ͱ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 18

Slide 18 text

ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 19

Slide 19 text

ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 20

Slide 20 text

ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 21

Slide 21 text

ԿͷͨΊʹ͜ͷίʔυ͕͋Δ͔ 基礎代謝 = 0 if ( Request Body に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = Request Body のやつ } else { 400 レスポンス } } else if ( DB に基礎代謝がある ) { if ( 基礎代謝が適正範囲である ) { 基礎代謝 = DB のやつ } else { 基礎代謝 = 計算(体重) } } else { 基礎代謝 = 計算(標準体重) } • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 22

Slide 22 text

͞Βʹ౿ΈࠐΉͱ • ݈߁తͳൣғͰม͑ͯ΋͍͍ • ࢦఆ͕ͳ͚Ε͹อଘࡁΈͷ஋Λ࢖͏ • ஶͣ͘͠Ε͍ͯͨΒݟ௚͢ • ͲͪΒͰ΋ͳ͚Ε͹ඪ४஋ͱ͢Δ • ࣗ෼Ͱଌͬͯࣗ෼Ͱઃఆ͍͍ͯ͠ • ඍม͠ͳ͍Α͏͋Δఔ౓ݻఆ͢Δ • େ͖͘ମॏ͕૿ݮ͍ͯ͠Ε͹࠶ܭࢉ • Θ͔Βͳ͍ਓʹ͸ఏࣔͯ͋͛͠Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 23

Slide 23 text

͜͏͍͏͜ͱ΋ʮجૅ୅ँͷ࢓༷ʯ • جૅ୅ँ͸ʮ܎਺ A + ܎਺ B x ମॏ + ܎਺ C x ೥ྸ...ʯͷʮ੔਺ 4 ܻʯ • ͜Ε͸஋ͷઆ໌͔͍ͯ͠͠ͳ͍ • αʔϏεʹ͓͚Δѻ͍ɺܾ·Γํɺෆඋ΍ෆਖ਼ɺࢉग़ࣜͳͲ͢΂͕ͯ࢓༷ • ஋ͷઆ໌ ( ࣜ΍ܻ਺ ) Λ·ͱΊΔͱཧղͨ͠ؾʹͳΔ͚Ͳɺෆे෼ • ʮ࠷ޙʹܭࢉ͔ͯ͠Β஀ੜ೔Λܴ͑ͨΒͲ͏ͳΔͷʁʯ • ʮอ݈ࢦಋΛड͚ͨΒͲ͏ͳΔͷʁʯ • ʮࣜͱܻ਺Λ஌ͬͯΔʯ͚ͩͰ͸౴͑ΒΕͳ͍

Slide 24

Slide 24 text

ͪΐͬͱ·ͱΊ

Slide 25

Slide 25 text

࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ • ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ

Slide 26

Slide 26 text

ݴ༿ͷʮෳࡶʯ͞

Slide 27

Slide 27 text

ݴ༿ΛͪΌΜͱ࢖͍෼͚Δ

Slide 28

Slide 28 text

ࣅͯΔ͚Ͳҧ͏΋ͷΛࣝผ͢Δ ͍Ζ͍ΖͳςετϢʔβͷεΫγϣͰ͢ɺ࣮ࡏ͢ΔಉҰਓ෺Ͱ͸͋Γ·ͤΜ

Slide 29

Slide 29 text

۠ผͰ͖ͳ͍ͱҙࢥૄ௨Ͱ͖ͳ͍ • ʮମॏ͕ʙʯͰ͸·ͣؒҧ͍ͳ͘ձ࿩Ͱ͖ͳ͍ • ϦϞʔτϫʔΫओྲྀͷࡢࠓɺςΩετͩͱͳ͓೉͍͠ • $weight Ͱສਓ͕ͪΌΜͱཧղͰ͖ΔΘ͚͕ͳ͍

Slide 30

Slide 30 text

ࣅͯΔ͚Ͳҧ͏΋ͷΛࣝผ͢Δ ೛৷લମॏ ݱࡏମॏ ग़࢈༧ఆ࣌ମॏ ໨ඪઃఆ࣌ମॏ ໨ඪମॏ ه࿥ମॏ ͍Ζ͍ΖͳςετϢʔβͷεΫγϣͰ͢ɺ࣮ࡏ͢ΔಉҰਓ෺Ͱ͸͋Γ·ͤΜ

Slide 31

Slide 31 text

ݴ༿ͷؔ܎Λ੔ཧ͢Δ

Slide 32

Slide 32 text

୯ޠͷϦετͰ͸ෆे෼ • ୯ޠͷྻڍ͚ͩͰ͸·ͩ଍Γͳ͍ • ୯ޠͷؔ܎Λ͋Θͤͯ੔ཧ͢Δ • Ϟϊ͸উखʹੜ·ΕΔΘ͚Ͱ͸ͳ͍͠ɺ΄͔ͷϞϊʹ࡞༻͢Δ • ͨͩ୯ޠϦετ͕͋ͬͯ΋Ϟϊͷ࢖͍ํ͸Θ͔Βͳ͍

Slide 33

Slide 33 text

࢓༷ͱݴ༿ͷؔ܎Λͻͨ͢Β੔ཧ͢Δ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ܭࢉ༻ମॏ ਎௕ ೛৷લମॏ ɹɹ ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 34

Slide 34 text

ͪΐͬͱ·ͱΊ

Slide 35

Slide 35 text

୯ޠͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ಉ͡ཁૉʹಉ͡୯ޠΛ࢖͏ • ҧ͏ཁૉʹҧ͏୯ޠΛ࢖͏ • ୯ޠͷؔ܎͕੔ཧͰ͖͍ͯΔ • ΈΜͳ͕ͦͷ୯ޠΛ࢖͏ ࠶ܝ

Slide 36

Slide 36 text

ίʔυͷʮෳࡶʯ͞

Slide 37

Slide 37 text

࢓༷͕੔ཧͰ͖ͨɺίʔυΛॻ͜͏ • ݱߦίʔυͷϝϯς͕ʮΩπ͍ʯͷͰϦΞʔΩςΫνϟΛ͍ͯ͠Δ • ݱߦίʔυͷʮΩπ͍ʯΛ౿ऻͯ͠͸͍͚ͳ͍ • Կ͕ʮΩπ͍ʯͷ͔ཧղ͍ͯ͠ͳ͚Ε͹ճආͰ͖ͳ͍

Slide 38

Slide 38 text

୯Ұ੹೚ͷݪଇΛ ຬͨ͞ͳ͍ίʔυ͸ʮΩπ͍ʯ

Slide 39

Slide 39 text

ͱ͋ΔίʔυΛ৭෼͚ͯ͠ΈΔ Request Body の受け取り if ( バリデーションエラー ) { 400 レスポンス } 基礎代謝 = { たくさんのとても複雑なロジック } if ( 基礎代謝が適正範囲外 ) { 400 レスポンス } 基礎代謝テーブルを更新() ペースやがんばり方を計算() 1 日の消費カロリーを計算() 1 日の摂取カロリーを計算() カロリーテーブルを更新() Response Body の作成 ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 40

Slide 40 text

ͱ͋ΔίʔυΛ৭෼͚ͯ͠ΈΔ Request Body の受け取り if ( バリデーションエラー ) { 400 レスポンス } 基礎代謝 = { たくさんのとても複雑なロジック } if ( 基礎代謝が適正範囲外 ) { 400 レスポンス } 基礎代謝テーブルを更新() ペースやがんばり方を計算() 1 日の消費カロリーを計算() 1 日の摂取カロリーを計算() カロリーテーブルを更新() Response Body の作成 ϑϨʔϜϫʔΫͷίʔυ ϑϨʔϜϫʔΫͷίʔυ HTTP ͷίʔυ ϝΠϯϩδοΫ ϝΠϯϩδοΫ DB ॲཧ DB ॲཧ Ψʔυॲཧ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 41

Slide 41 text

Χϥϑϧ͗͢Δ • ໌Β͔ʹʮ୯Ұ੹೚ʯͰ͸ͳ͍ • ͍͍͜ͱ͸Կ΋ͳ͍ • େ͖͍΋ͷ͸ෳࡶʹͳΔ

Slide 42

Slide 42 text

৭͝ͱʹ࠶഑ஔ͢Δ ϑϨʔϜϫʔΫͷίʔυ HTTP ͷίʔυ ϝΠϯϩδοΫ DB ॲཧ Ψʔυॲཧ

Slide 43

Slide 43 text

Ͳ͔͜ͰݟͨΑ͏ͳ...

Slide 44

Slide 44 text

Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ Interface Class

Slide 45

Slide 45 text

ϨΠϠʔʹ෼͚Δͬͯ ͜Ε͚ͩͷ͜ͱʁ

Slide 46

Slide 46 text

ٻΊΒΕΔ஌͕ࣝଟ͍ 
 ίʔυ͸ʮΩπ͍ʯ

Slide 47

Slide 47 text

ϨΠϠʔ෼཭͕Ͱ͖ͯΔͬΆ͍ίʔυ // 体重を入力したら +10 点 ポイント = 0 record = 体テーブル参照(今日) if ( record !== null && record.体重 !== null && record.体重 !== 0 ) { ポイント += 10 } import orm function 体テーブル参照(日付) { return orm.select(...) } DB ૢ࡞ͷॲཧ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 48

Slide 48 text

஋ͱҰॹʹ஌ࣝ΋͖͍࣋ͬͯͯΔ // 体重を入力したら +10 点 ポイント = 0 record = 体テーブル参照(今日) if ( record !== null && record.体重 !== null && record.体重 !== 0 ) { ポイント += 10 } import orm function 体テーブル参照(日付) { return orm.select(...) } ߦ͕ͳ͍͜ͱ͕͋Δ not null ੍໿͕ͳ͍ 0 ͕ೖ͍ͬͯΔ͜ͱ͕͋Δ͕ະೖྗͱͯ͠ѻ͏ DB ૢ࡞ͷॲཧ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 49

Slide 49 text

ϨΠϠʔ෼཭͸஌ࣝͷ෼཭ • ʮSQL Λॻ͍͍ͯͳ͍ͷͰ DB ʹ͸ґଘ͍ͯ͠ͳ͍ʯͱ͸ݶΒͳ͍ • ʮಘ఺ܭࢉͷίʔυΛಡ΋͏ͱࢥͬͨΒ DB ࢓༷ॻΛݟ͍ͯͨʯ • ͜Μͳ΋ͷ͸ҰྫͰɺϓϩδΣΫτͷਵॴͰൃੜ͢Δ • ʮجૅ୅ँͷܭࢉࣜΛಡΉ͸͕ͣ API ࢓༷ॻΛ୳͍ͯͨ͠ʯ • ผϨΠϠʔͷ஌ࣝ͸ৗʹ࿙Εग़Α͏ͱ͍ͯ͠Δ • ίϯύΠϧ΍੩తղੳʹύε͢Δ͜ͱ͕ϨΠϠʔ෼཭Ͱ͸ͳ͍ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··ίʔυΛ࢖͑Δঢ়ଶ͕෼཭

Slide 50

Slide 50 text

ෆద੾ͳ୯ҐͰڞ௨Խ ͞Ε͍ͯΔͱʮΩπ͍ʯ

Slide 51

Slide 51 text

ࣅ͍ͯΔίʔυ function カロリー計算() { if(記録された体重がある){ 体重 = 記録.体重 } else { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return カロリー計算(基礎代謝) } function 妊婦用カロリー計算() { 体重 = 妊娠.妊娠時体重 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return 妊婦用カロリー計算(基礎代謝) } ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 52

Slide 52 text

ࣅ͍ͯΔίʔυ function カロリー計算() { if(記録された体重がある){ 体重 = 記録.体重 } else { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return カロリー計算(基礎代謝) } function 妊婦用カロリー計算() { 体重 = 妊娠.妊娠時体重 基礎代謝 = { 体重を使って 基礎代謝を計算する とてもとても 長い処理 } return 妊婦用カロリー計算(基礎代謝) } ಉ͡ ྲྀΕ͸ࣅͯΔ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 53

Slide 53 text

ࠞͥΔͱͲ͏ͳΔ͔ function カロリー計算() { if(妊娠中){ 体重 = 妊娠.妊娠時体重 } else { if 記録された体重がある { 体重 = 記録.体重 } else { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } } 基礎代謝 = { 長い処理 } return if(妊娠中){ 妊婦用カロリー計算(基礎代謝) } else { カロリー計算(基礎代謝) } } • ͓ͦΒ͘೔ຊதͰΑ͘ΈΔߏ଄ͷίʔυ • ܗͰڞ௨Խ͍ͯ͠Δ 1. ମॏΛܾΊͯ 2. جૅ୅ँΛग़ͯ͠ 3. ΧϩϦʔܭࢉࣜΛ࢖͏ • ৭Λ͚ͭΔͱෆࣗવ͞͸Ұ໨ྎવ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 54

Slide 54 text

ࠞͥΔͱͲ͏ͳΔ͔ function カロリー計算() { if(妊娠中){ 体重 = 妊娠.妊娠時体重 } else { if 記録された体重がある { 体重 = 記録.体重 } else { 身長 = ユーザ.身長 標準体重 = 22 * 身長 * 身長 体重 = 標準体重 } } 基礎代謝 = { 長い処理 } return if(妊娠中){ 妊婦用カロリー計算(基礎代謝) } else { カロリー計算(基礎代謝) } } • ަΘΒͳ͍ 2 ͭͷίʔυ͕ 1 Օॴʹ͋Δ • ͨͩͦΕ͚ͩ • ʮ͋Δ 1 ࢓༷ͷόϦΤʔγϣϯʯͰ͸ͳ͘ 
 ʮίʔυ͕ 2 ͭ͋Δʯ͚ͩ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 55

Slide 55 text

ʮίʔυ͕ಉ͡ʯΛڞ௨Խ ͷཧ༝ʹͯ͠͸͍͚ͳ͍

Slide 56

Slide 56 text

Ͱ͸Ͳ͏൑அ͢Δ͔

Slide 57

Slide 57 text

ಉ͡࢓༷͔Ͳ͏͔ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ਎௕ ೛৷લମॏ ɹɹ ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 58

Slide 58 text

͜Μͳڞ௨ॲཧ͕࢖͍΍͍͢͸͕ͣͳ͍ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ਎௕ ೛৷લମॏ ɹɹ ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 59

Slide 59 text

ίʔυʹ͢ΔͳΒ͜͜Ͱ͠ΐ ೥ྸ ਎௕ ೛৷લମॏ ੑผ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ɹɹ ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 60

Slide 60 text

த్൒୺ͳ ม਺͸ʮΩπ͍ʯ

Slide 61

Slide 61 text

࢖༻͢ΔλΠϛϯάʹΑͬͯ஋ͷҧ͏ม਺ 体重 = 0 if(Request Body に体重がある){ 体重 = Request Body のやつ } 基礎代謝 = 0 if(Request Body に基礎代謝がある){ 基礎代謝 = それ } else if(DB に基礎代謝がある){ if(基礎代謝が適正範囲である){ 基礎代謝 = それ } else { if(体重 == 0){ 体重 = DB から取得 } 基礎代謝 = 体重で計算 } } else { 体重 = 標準体重 基礎代謝 = 体重で計算 } • ମॏ͕গͣͭ͠ग़དྷ্͕͍ͬͯ͘ • ݸਓతʹ͜ΕΛʮӕ 1 ߦʯͱݺΜͰ͍Δ • 1 ߦ ʹ 1 ߦ෼ͷՁ஋͕ͳ͍ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 62

Slide 62 text

࢖༻͢ΔλΠϛϯάʹΑͬͯ஋ͷҧ͏ม਺ 体重 = 0 if(Request Body に体重がある){ 体重 = Request Body のやつ } 基礎代謝 = 0 if(Request Body に基礎代謝がある){ 基礎代謝 = それ } else if(DB に基礎代謝がある){ if(基礎代謝が適正範囲である){ 基礎代謝 = それ } else { if(体重 == 0){ 体重 = DB から取得 } 基礎代謝 = 体重で計算 } } else { 体重 = 標準体重 基礎代謝 = 体重で計算 } • όάͷԹচ • ࣄނΛى͜͢ʹܾ·͍ͬͯΔ • ಡΈखͷෛՙ΋ߴ͍ • جૅ୅ँͷ͸ͳ͠ΛಡΜͰ͍ͨͷʹ 
 ٸʹମॏͷ͸ͳ͕࢝͠·ͬͯ೴͕ڻ͘ ͜͜Ͱମॏ͕࢖͍ͨ͘ͳͬͨΒʁ ͜͜Λܦ༝ͨ͋͠ͱͰମॏ͕࢖͍ͨ͘ͳͬͨΒʁ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 63

Slide 63 text

ਅʹ̍ߦͳΒແ͔׬੒඼ 体重 = Request Body にある ? それ : DB から取得 基礎代謝 = 0 if(Request Body に基礎代謝がある){ 基礎代謝 = それ } else if(DB に基礎代謝がある){ if(基礎代謝が適正範囲である){ 基礎代謝 = それ } else { if(体重 == 0){ 体重 = DB から取得 } 基礎代謝 = 体重で計算 } } else { 体重 = 標準体重 基礎代謝 = 体重で計算 } • ຊ౰ͷ 1 ߦͱ͸͜͏ • ݟͨ໨ͷߦ਺Ͱ͸ͳ͘ɺ 
 ҙຯͱͯ͠ෆՄ෼ͷ࠷খͷ 1 ·ͱ·Γ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 64

Slide 64 text

݁ہɺ࢓༷ ೥ྸ ɹɹ جૅ୅ँͷ࢓༷ ɹɾܭࢉࣜʹ͍ͭͯʙ ɹɾదਖ਼ൣғʹ͍ͭͯʙ ɹɾݟ௚͠λΠϛϯάʹ͍ͭͯʙ ਎௕ ೛৷લମॏ ɹɹ ɹ೛්ͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ɹɾʁʁʁ ੑผ ɹɹ ΧϩϦʔͷ࢓༷ ɹɾʁʁʁ ɹɾʁʁʁ ͕Μ͹Γํ ϖʔε ܭࢉ༻ମॏ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 65

Slide 65 text

࠷খ୯Ґ͸࢓༷ • ม਺Λ࡞Δաఔ͸ࡽ͞ͳ͍ • ʮܭࢉ༻ମॏͱ͸ʙͰ͋Δʯͱ͍͏આ໌Ͳ͓Γʹ࣮૷͢Δ • ͦ΋ͦ΋੔ཧͨ͠࢓༷ʹʮॳظԽͯ͠ͳ͚Ε͹ʯͱ͔ॻ͍ͯͳ͍ • ܭࢉ༻ମॏ = { ͻͱ·ͱ·Γ } • جૅ୅ँ = { ͻͱ·ͱ·Γ } • ͦ͏͍͏ίʔυΛॻ͘ʹ͸ɺ݁ہʮܭࢉ༻ମॏͱ͸ʙʙͰ͋Δʯͱ 
 ࣗવݴޠͰઆ໌Ͱ͖ͳ͚Ε͹ॻ͚ͳ͍

Slide 66

Slide 66 text

ͪΐͬͱ·ͱΊ

Slide 67

Slide 67 text

ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ

Slide 68

Slide 68 text

σʔλͷʮෳࡶʯ͞

Slide 69

Slide 69 text

σʔλϕʔεͱ υϝΠϯϞσϧͷͣΕ

Slide 70

Slide 70 text

Ͳ͏ߟ͑ͨͬͯͣΕΔ • υϝΠϯϞσϧ͸࢓༷มߋ΍ϦϑΝΫλϦϯάͰ༰қʹมΘΔ • σʔλϕʔε͸ϦϑΝΫλϦϯάΈ͍ͨʹؾܰʹม͑ͳ͍

Slide 71

Slide 71 text

ͣΕํͷྫ औಘɾߋ৽͢Δྻ ඞཁͳྻ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢ • ྫ ) Ϣʔβςʔϒϧͷ email ͱ਎௕Λಉ࣌ʹඞཁͱ͸͠ͳ͍

Slide 72

Slide 72 text

ͣΕํͷྫ औಘɾߋ৽͢Δྻ ࿈ಈ͢Δྻ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢ • ྫ ) ମॏ͕มΘͬͨΒجૅ୅ँ΋มΘΔ

Slide 73

Slide 73 text

ͣΕํͷྫ ૢ࡞͢Δߦ ຊ౰ͷͻͱ·ͱ·Γ͸೚ҙͷ n ߦ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢ • ྫ ) ຖ೔ମॏΛه࿥͢ΔͱμΠΤοτ͕ਐḿ͢Δ

Slide 74

Slide 74 text

͜ͷࠩ෼͸஌ࣝͱ஫ҙͰຒΊΔ • ʮ๨ΕͪΌͩΊͩΑʯʮؾΛ͚ͭͯͶʯ • ਎௕͕ະೖྗͰ 0cm ͩͱࠔΔ͚Ͳɺೝূͷͱ͖͸νΣοΫͯ͠͸ͩΊ • ମॏΛอଘͨ͠Βମॏςʔϒϧ͚ͩͰͳ͘جૅ୅ँςʔϒϧ΋ߋ৽͢Δ • μΠΤοτͷਐḿ͸࢝·ͬͨ೔͔Β਺͑Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 75

Slide 75 text

ʮ͕Μ͹Δʯ͸ແཧ • DB ૢ࡞Λৗʹਖ਼͓֮͑ͯ͘͘͜͠ͱ͸ແཧ • ͔ͩΒυϝΠϯϞσϧΛߟ͑ͯɺͦͪΒΛӡ༻͢Δ υϝΠϯϞσϧ ม׵૚ ࣮͸ 2 ςʔϒϧ 
 ͳΜ͚ͩͲӅṭ ܭࢉ͸೚ͤͯ Ͳ͏ͧ

Slide 76

Slide 76 text

͋Γ͑ͳ͍஋

Slide 77

Slide 77 text

ଘࡏ͢Δ͸͕ͣͳ͍஋ • ͨͱ͑͹ʮ਎௕͕ 0cmʯ • ݱ࣮తʹ͸͋Γ͑ͳ͍ • BMI ͷܭࢉ ( ମॏ / ਎௕ / ਎௕ ) ͢Δͱ͖ࠔΔ • ਎௕͸ 0 ʹ͸ͳΒͳ͍ʮ͸ͣʯ • ͨͱ͑͹ʮ9/2 ͷ 7:00 ʹ৸ͯɺ9/1 ͷ 23:00 ʹى͖ͨʯ • ͜Ε΋͋Γ͑ͳ͍ • ਭ຾͕࣌ؒ -8 ࣌ؒʹͳͬͯ͠·͏ • ब৸࣌ؒ < ىচ࣌ؒͷʮ͸ͣʯ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 78

Slide 78 text

ʮ͸ͣʯͱͲ͏෇͖߹͏͔ • height Λ࢖͏ͱ͖ • 0 Ͱ͸ͳ͍ͱ৴͡Δ • ҰԠ 0 νΣοΫ͢Δ • sleepStart ͱ sleepEnd Λ࢖͏ͱ͖ • sleepStart < sleepEnd ͱ৴͡Δ • ҰԠ͘Β΂ͯΈΔ

Slide 79

Slide 79 text

ϓϩάϥϜ ମࢷ๱཰͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ ੑผ͓͔͍͔͠΋ ʮ͸ͣʯʹਓ͕ؒϧʔϧͰରԠ͢Δͷ͸ແཧ ਎௕͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ ਭ຾͓͔͍͔࣌ؒ͠΋ ੑผ͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ جૅ୅ँ͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ جૅ୅ँ͓͔͍͔͠΋ ΧϩϦʔ͓͔͍͔͠΋ ਎௕͓͔͍͔͠΋ ೥ྸ͓͔͍͔͠΋ ମॏ͓͔͍͔͠΋

Slide 80

Slide 80 text

ϓϩάϥϜ ෆਖ਼ͳ஋͕ଘࡏͰ͖ͳ͍࢓૊Έ͕ඞཁ ਭ຾࣌ؒ ਎௕ ෆ ਖ਼ ͳ ஋ ͸ ௨ ͞ ͳ ͍ ੑผ جૅ୅ँ ΧϩϦʔ ମࢷ๱཰ ମॏ

Slide 81

Slide 81 text

ෆਖ਼ͳ Value Object ͕ੜ·Εͳ͍Α͏ʹ͢Δ class 身長(value: Double) { コンストラクタ(value: Double) { assert(value != 0) this.value = value } } • ͨͩ͜Ε͚ͩ • 100% ৴པͰ͖Δ • ਵॴͷνΣοΫίʔυΛҰ૟Ͱ͖Δ • ಡΈखͷෛ୲΋΁Δ • ίʔυϨϏϡʔ࣌ʹ΋๨Ε͍͍ͯ • όά ( e.g. zero div ) ͷՄೳੑ͕΁Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 82

Slide 82 text

͋Γ͑ͳ͍ঢ়گ

Slide 83

Slide 83 text

ҰํͰɺ୯ମͰ͸൑அͰ͖ͳ͍஋͕͋Δ • ͨͱ͑͹ʮ૿ྔ͔ͭӡಈத৺ʯ • ݮྔ / ૿ྔ ΋ ӡಈத৺ / ৯ࣄத৺ ΋͋Δ • ʮ৯ࣄΛݮΒͯ͠ݮྔ͢Δʯͷ͸͍͍͚Ͳ 
 ʮӡಈΛݮΒͯ͠૿ྔ͢Δʯͷ͸ෆ݈߁͔ͩΒ૊Έ߹Θ͕ͤѱ͍ • ͨͱ͑͹ʮ50kg Λ໨ࢦ͢ʯ • 140cm ͷਓͳΒʮద੾ͳμΠΤοτʯ • 170cm ͷਓͳΒʮ૫ͤ͗ͯ͢ೝΊΒΕͳ͍ʯͷͰঢ়گ͕ѱ͍ • ஋ͦͷ΋ͷʹྑ͠ѱ͕͠ͳ͘ɺ૊Έ߹Θͤ΍ঢ়گʹΑܾͬͯ·Δ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 84

Slide 84 text

ෆਖ਼ͳ஋͕ଘࡏͰ͖ͳ͍࢓૊Έ͕ඞཁ ෆਖ਼ͳঢ়گ͸௨͞ͳ͍ ෆਖ਼ͳ૊Έ߹Θͤ͸௨͞ͳ͍ ํ๏ ૿ݮ ໨ඪઃఆ ෆ ਖ਼ ͳ ஋ ͸ ௨ ͞ ͳ ͍

Slide 85

Slide 85 text

ͪΐͬͱ·ͱΊ

Slide 86

Slide 86 text

σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍ 0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ

Slide 87

Slide 87 text

Έ͖͑ͯͨʮཧ૝ʯͱ ΍ͬͯΈͨʮݱ࣮ʯ

Slide 88

Slide 88 text

࢓༷

Slide 89

Slide 89 text

࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ • ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ

Slide 90

Slide 90 text

࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ • ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ ɹPHP ಡΊ͹͍͍ ( ݟ͚ͭ΍͍͢ )

Slide 91

Slide 91 text

࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ • ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ ɹPHP ಡΊ͹͍͍ ( ݟ͚ͭ΍͍͢ ) ɹͻͨ͢Β੔ཧ͢Δ͔͠ͳ͍ ɹίʔυͷஅยΛ·ͱΊɺ ɹղऍ͠ɺӫཆ࢜͞Μͱ͸ͳ͢

Slide 92

Slide 92 text

ͻͨ͢ΒίʔυΛಡΜͰ੔ཧ ɹPHP ΛಡΈɺཧղͯ͠੔ཧ ɹͯ͠ɺࣗવݴޠԽ͢Δ ɹ૯߹తͳྗͱܦݧ͕ඞཁͰɺ ɹ͙͢શһͰ͖Δ΋ͷͰ͸ͳ͍

Slide 93

Slide 93 text

࢓༷ͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ͋Δཁૉʹ͍ͭͯ • ஋ͷϧʔϧ͕͸͖ͬΓ͍ͯ͠Δ • ࢖͍ํ / ࢖ΘΕํ͕͸͖ͬΓ͍ͯ͠Δ • ͋Γ͑Δ͜ͱ / ͋Γ͑ͳ͍͜ͱ͕͸͖ͬΓ͍ͯ͠Δ • ϥΠϑαΠΫϧ͕͸͖ͬΓ͍ͯ͠Δ • ؔ܎͢Δૢ࡞͕͸͖ͬΓ͍ͯ͠Δ ࠶ܝ ɹPHP ಡΊ͹͍͍ ( ݟ͚ͭ΍͍͢ ) ɹͻͨ͢Β੔ཧ͢Δ͔͠ͳ͍ ɹίʔυͷஅยΛ·ͱΊɺ ɹղऍ͠ɺӫཆ࢜͞Μͱ͸ͳ͢ ɹRDRA Ͱ੔ཧͰ͖͸͡Ί͍ͯΔ ɹPHP ΛಡΈɺཧղͯ͠੔ཧ ɹͯ͠ɺࣗવݴޠԽ͢Δ ɹ૯߹తͳྗͱܦݧ͕ඞཁͰɺ ɹ͙͢શһͰ͖Δ΋ͷͰ͸ͳ͍

Slide 94

Slide 94 text

ͪΌΜͱ RDRA Λଓ͚Δͱ݁ߏΘ͔Δ ը૾͸ΠϝʔδͰ͢ ( ͱͯ΋ͦͷ··ܝࡌͰ͖ͣ... ) ੔ཧͰ͖ͨ UC ͕૿͑Δͱ ؔ࿈͕ͩΜͩΜݟ͑ͯ͘Δ ࢓༷੔ཧͱͯ͠ӡ༻͢Ε͹ ҙ֎ͱՃච΍ϝϯς͸ؾָ ( ࢓༷ॻͩͱࢥ͏ͱপ )

Slide 95

Slide 95 text

୯ޠ

Slide 96

Slide 96 text

୯ޠͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ಉ͡ཁૉʹಉ͡୯ޠΛ࢖͏ • ҧ͏ཁૉʹҧ͏୯ޠΛ࢖͏ • ୯ޠͷؔ܎͕੔ཧͰ͖͍ͯΔ • ΈΜͳ͕ͦͷ୯ޠΛ࢖͏ ࠶ܝ

Slide 97

Slide 97 text

୯ޠͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ಉ͡ཁૉʹಉ͡୯ޠΛ࢖͏ • ҧ͏ཁૉʹҧ͏୯ޠΛ࢖͏ • ୯ޠͷؔ܎͕੔ཧͰ͖͍ͯΔ • ΈΜͳ͕ͦͷ୯ޠΛ࢖͏ ࠶ܝ ɹͱͯ΋ҙࣝͯ͠ߦ͍͑ͯΔ ɹSlack ΍ϝϞாͰུ͑ͣ͞͞ ɹܾΊͨ୯ޠΛ࢖ͬͯॻ͍͍ͯΔ

Slide 98

Slide 98 text

୯ޠͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ಉ͡ཁૉʹಉ͡୯ޠΛ࢖͏ • ҧ͏ཁૉʹҧ͏୯ޠΛ࢖͏ • ୯ޠͷؔ܎͕੔ཧͰ͖͍ͯΔ • ΈΜͳ͕ͦͷ୯ޠΛ࢖͏ ࠶ܝ ɹͱͯ΋ҙࣝͯ͠ߦ͍͑ͯΔ ɹSlack ΍ϝϞாͰུ͑ͣ͞͞ ɹܾΊͨ୯ޠΛ࢖ͬͯॻ͍͍ͯΔ ɹపఈͯ֓͠೦ϞσϦϯάΛ͢Δ

Slide 99

Slide 99 text

పఈͯ֓͠೦ϞσϦϯά͢Δ ɹϒϨΠΫεϧʔ͕ى͜Δ ( ຊ౰ ) ɹ΍Ε͹΍Δ΄Ͳཧղ౓͕ਂ·Δ ɹPHP ΍ DB ͔Β࢓༷໘͚ͩΛ ɹநग़͢Δͷ͸͔ͳΓ೉͍͠ ɹͲ͏ͯ͠΋͙͢ந৅Խ΍ڞ௨Խ ɹʹҙ͕ࣝҳΕͯͯ͠͠·͏ͷͰ ɹ͔ͳΓͷ܇࿅͕ඞཁ

Slide 100

Slide 100 text

֓೦ϞσϦϯάதͷ͋Δ͋Δ • ʮը໘ A Ͱ͸ମॏνΣοΫ͕ < ͚ͩͲɺը໘ B Ͱ͸ <= ͩͬͨʯ • ʮ֓೦Ϟσϧʹ ԋࢉࢠ ͱ͍͏ interface Λ࡞Γ LT ͱ LE Λ࣮૷͢Δʯ • ʮ͍΍͍΍ɺӫཆ࢜͞Μ͸ LT ͱ LE ͬͯ࢖͍ํͯ͠Δͷʁʯ • ʮҙຯ͕͋ΔߦҝͳΒཧղ໊ͯ͠લΛݟग़͢ɺͳ͚Ε͹ͨͩͷཚΕʯ • Ͳ͏ͯ͠΋ PHP ͷ࣮૷Λͦͷ··Ҡ২ͯ͠͠·͍͕ͪ • PHP → நग़ͨ͠࢓༷ → Kotlin Λ͠ͳ͚Ε͹͍͚ͳ͍ ෳ਺ͷ࿩ΛϚʔδͨ͠ϑΟΫγϣϯͰɺಛఆݸਓͷ࿩Ͱ͸͋Γ·ͤΜ

Slide 101

Slide 101 text

୯ޠͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ಉ͡ཁૉʹಉ͡୯ޠΛ࢖͏ • ҧ͏ཁૉʹҧ͏୯ޠΛ࢖͏ • ୯ޠͷؔ܎͕੔ཧͰ͖͍ͯΔ • ΈΜͳ͕ͦͷ୯ޠΛ࢖͏ ࠶ܝ ɹపఈͯ֓͠೦ϞσϦϯάΛ͢Δ ɹಠཱ෦ୂͳͷͰ·ͩہॴత ɹʮԿਓ͔Ͱ΍ͬͯ·͢ʯ ɹ͘Β͍ͷن໛ײͰࣾ಺શҬ ɹʹݴ༿Λਁಁͤ͞Δͷ͸ ɹݱ࣮తʹ͸ແཧ ɹݱ࣌఺Ͱ͸ʮྡਓ·Ͱʯ ɹͱͯ΋ҙࣝͯ͠ߦ͍͑ͯΔ ɹSlack ΍ϝϞாͰུ͑ͣ͞͞ ɹܾΊͨ୯ޠΛ࢖ͬͯॻ͍͍ͯΔ ɹPHP ΍ DB ͔Β࢓༷໘͚ͩΛ ɹநग़͢Δͷ͸͔ͳΓ೉͍͠ ɹͲ͏ͯ͠΋͙͢ந৅Խ΍ڞ௨Խ ɹʹҙ͕ࣝҳΕͯͯ͠͠·͏ͷͰ ɹ͔ͳΓͷ܇࿅͕ඞཁ

Slide 102

Slide 102 text

ίʔυ

Slide 103

Slide 103 text

ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ

Slide 104

Slide 104 text

ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ

Slide 105

Slide 105 text

Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ Interface Class

Slide 106

Slide 106 text

ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ ɹॻ͘ʹ΋ϨϏϡʔ͢Δʹ΋ ɹਂ͍ཧղͱܦݧ͕ඞཁͰ ɹͱͯ΋Ή͔͍ͣ͠

Slide 107

Slide 107 text

ίʔσΟϯάதͷ͋Δ͋Δ • ʮυϝΠϯϞσϧͷ HashMap ʹ Any ͕ग़͖ͯͪΌ͏ʯ • ʮDB ʹ Json ͰೖͬͯΔ͔Β...ʯ • ʮ͡Ό͋ͦΕ͸ DB ͷ͸ͳ͠ʯ • ʮ΄Μͱ͏ʹѻ͍͍ͨ΋ͷ͸ͳʹʁʯ • Αͦͷ஌ࣝ͸΄Μͱ͏ʹ؆୯ʹ͙͢࿙ΕΔ • ूΊͨ஌ࣝͷ࠶഑ஔΛҙࣝ͠ଓ͚Δͷ͸೉͍͠ ෳ਺ͷ࿩ΛϚʔδͨ͠ϑΟΫγϣϯͰɺಛఆݸਓͷ࿩Ͱ͸͋Γ·ͤΜ

Slide 108

Slide 108 text

ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ ɹॻ͘ʹ΋ϨϏϡʔ͢Δʹ΋ ɹਂ͍ཧղͱܦݧ͕ඞཁͰ ɹͱͯ΋Ή͔͍ͣ͠ ɹ஋ͳΒ؆୯

Slide 109

Slide 109 text

• աڈʹઃఆ͍ͯ͠Ε͹ DB ࢀর • อଘ͞Ε͍ͯΔجૅ୅ँ͕ దਖ਼͔νΣοΫ • దਖ਼ͱ͸... • ະઃఆͳΒମॏͰܭࢉ • ܭࢉʹ࢖͏ମॏ͸... • ମॏΛه࿥͍ͯ͠Ε͹ DB ࢀর • ׈ΓࢭΊͱͯ͠ඪ४ମॏ Λ·ͣܭࢉ • ਎௕ɾ೥ྸ͕ඞཁ ͳͷͰ DB ࢀর • ... ʮجૅ୅ँͱ͸ʯ ɹαʔϏε࢓༷ͬΆ͍΋ͷͱ ɹIO ͕ਂ͘བྷΈ߹ͬͨ৔߹ɺ ɹυϝΠϯʹ΋ΫΤϦʹ΋ ɹॻ͖ʹ͍͘

Slide 110

Slide 110 text

ίʔυͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • 1 ϑΝΠϧ ( Ϋϥε ) ʹෳ਺ͷ͜ͱΛ΍Βͤͳ͍ • ϑΝΠϧ ( Ϋϥε ) ͷ஌ࣝ΋෼཭Ͱ͖͍ͯΔ • ஌Βͳ͍͍ͯ͘͜ͱΛ஌Βͳ͍··࢖͑Δ • ίʔυͷܗͰ͸ͳ͘࢓༷ͷ୯ҐͰڞ௨Խ͢Δ • ʮجૅ୅ँͱ͸ʙͰ͢ʯͱॻ͚Δ ࠶ܝ ɹׂͱػցతʹຬͨͤΔ ɹॻ͘ʹ΋ϨϏϡʔ͢Δʹ΋ ɹਂ͍ཧղͱܦݧ͕ඞཁͰ ɹͱͯ΋Ή͔͍ͣ͠ ɹ஋ͳΒ؆୯ ɹࢀর༻ͷυϝΠϯϞσϧͷ ɹΑ͏ͳ΋ͷ͕ඞཁͩͱߟ͑ͨ ɹαʔϏε࢓༷ͬΆ͍΋ͷͱ ɹIO ͕ਂ͘བྷΈ߹ͬͨ৔߹ɺ ɹυϝΠϯʹ΋ΫΤϦʹ΋ ɹॻ͖ʹ͍͘

Slide 111

Slide 111 text

Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ Interface Class QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ QueryModel QueryModelImpl ɹϩδοΫͱ IO Λڐ͞ΕΔ ɹࢀরʹݶఆͨ͠ package ͕Ͱ͖ͨ ɹΞϨϯδͳͷͰಛʹઆ໌͕ඞཁ

Slide 112

Slide 112 text

σʔλ

Slide 113

Slide 113 text

σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍ 0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ

Slide 114

Slide 114 text

σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍ 0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ

Slide 115

Slide 115 text

Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ ɹపఈͯ͠υϝΠϯΛ ɹʮਖ਼͍͠ʯ΋ͷʹ͢Δ Interface Class

Slide 116

Slide 116 text

σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍ 0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ ɹຊ౰ʹղ์͞ΕΔ ɹ΋͏໭Εͳ͍ ɹշద͞ͱ҆৺ײ

Slide 117

Slide 117 text

σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍ 0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ ɹຊ౰ʹղ์͞ΕΔ ɹ΋͏໭Εͳ͍ ɹշద͞ͱ҆৺ײ ɹ૚͕૝ఆ௨Γػೳͨ͠ ɹΫΤϦ͸Ϡό͘ͳΔ

Slide 118

Slide 118 text

Presentation Application Infrastructure Domain Request Controller Factory DomainService ू໿ QueryService QueryServiceImpl Repository UseCase RepositoryImpl ϦΞʔΩςΫνϟʹΑͬͯ ど ͏ͳΓ͍͔ͨ 2023/09/14 ΑΓ࠶ܝ ɹͶ͡ΕΛௐ੔͢Δ͜͜ͷ ɹΫΤϦ͕ෳࡶʹͳΓ΍͍͢ ɹR/W ճ਺͸࠷దԽ͠ʹ͍͘ Interface Class

Slide 119

Slide 119 text

σʔλͷʮෳࡶʯ͔Βߟ͑Δʮཧ૝ʯ • ෆਖ਼ͳ஋ΛଘࡏͰ͖ͳ͍Α͏ʹ࢓૊ΈͰରԠ͢Δ • ෆਖ਼ͳঢ়گʹ͍ͭͯ΋ಉ༷ • ෆਖ਼ͳ૊Έ߹Θͤʹ͍ͭͯ΋ಉ༷ • 1 ΍ 0 ΍ null ͷνΣοΫΛ͠ଓ͚ͳ͍͍ͯ͘ • ϞσϧΛσʔλͱ෼͚ͯӡ༻Ͱ͖Δ ࠶ܝ ɹ৽ͨʹੜ·Εͳ͘ͳͬͯ΋ ɹաڈͷσʔλ͸ύλʔϯ͕ແݶ ɹޙํޓ׵ͷέΞ͕ඞཁ ɹValue Object ͰରԠ ɹUse Case ͰରԠ ɹू໿ͰରԠ ɹຊ౰ʹղ์͞ΕΔ ɹ΋͏໭Εͳ͍ ɹշద͞ͱ҆৺ײ ɹ૚͕૝ఆ௨Γػೳͨ͠ ɹΫΤϦ͸Ϡό͘ͳΔ

Slide 120

Slide 120 text

੔ཧͯ͠΋σʔλ͕௚ΔΘ͚Ͱ͸ͳ͍ ɹ͓͔͍͠σʔλ͸࣮ࡍ͋Δ ɹੲͷσʔλΛࢀর͢Δʹ͸ ɹσʔλύον΍ൈ͚ಓ͕ඞཁ ɹΊͪΌͪ͘Ό͠ΜͲ͍ ɹ୳͢ͷ͕೉͍͠͠ςετ͕͠ʹ͍͘

Slide 121

Slide 121 text

σʔλνΣοΫதͷ͋Δ͋Δ • ʮμΠΤοτΛୡ੒ͨ͠ܗ੻͕͋Δͷʹମॏ͕อଘ͞Εͯͳ͍ʯ • ʮෳ਺ͷςʔϒϧʹ·͕ͨΔෆਖ਼ͳΜͯύλʔϯ͕ແݶͰ୳͖͠Εͳ͍ʯ • ʮ਎௕͕ 200cm ͳͷʹମॏ͕ 50kg ͔͠ͳ͍ʯ • ʮςʔϒϧతʹ͓͔͘͠ͳͯ͘΋ BMI ͕ҟৗ஋ʯ • ਖ਼௚ΘΓͱͲ͏͠Α͏΋ͳ͍ͷͰɺΨʔυΛ؇ΊͨΓσʔλύονͨ͠Γ͢Δ • ݎ࿚ੑͱϦεΫճආͱ౤ࢿίετͷτϨʔυΦϑΛ൑அ͠ଓ͚Δ͔͠ͳ͍ ࢓༷ͱίʔυ͸αϯϓϧͰɺ࣮ࡍͷͦΕͱ͸ҟͳΓ·͢

Slide 122

Slide 122 text

̍೥൒΍ͬͯΈͯ

Slide 123

Slide 123 text

͍͍͜ͱ • ࢓༷ཧղ౓͕֨ஈʹ͕͋Δ • ϒϨΠΫεϧʔ͕සൃ͢Δ • ࢓༷ͷυΩϡϝϯτԽ΋ϓϩηεʹೖ͓ͬͯΓɺͪΌΜͱͨ·͍ͬͯ͘ • ίʔυ͕࣮֬ʹΑ͘ͳ͍ͬͯΔ • ʮසग़͢Δ 50 ߦͷṖίʔυʯ͕ʮݱࡏମॏͷऔಘʯʹੜ·ΕมΘͬͨ • େํ਑͸ڌΓॴʹͳΔ • ઃܭ͔Β࣮૷·Ͱେ͖ͳํ਑͕͋ΔͷͰɺʮ͍͍ʯͷํ޲͕ϒϨʹ͍͘

Slide 124

Slide 124 text

Ή͔͍ͣ͜͠ͱ • ίετ͸େ͖͍ • ࢓༷ͷཧղͱ੔ཧɺͦͷޙͷઃܭ͸΋ͷ͍͕͔͔࣌ؒ͢͝Δ • ਺ϲ݄ͰͰ͖ΔΑ͏ʹͳΔ΋ͷͰ͸ͳ͘ɺεϐʔυͷग़ͳ͍ظ͕ؒଓ͖͕ͪ • ׆ಈͷՁ஋͸ݟࣦΘͳ͍Α͏ʹ͍ͨ͠ • ͙͢ޮՌͷग़ʹ͍͘ੑ࣭ͷ׆ಈͳͷͰɺԿΛՁ஋ͱ͢Δ͔ݟࣦΘͳ͍Α͏ʹ͍ͨ͠ • ʮίʔυ͕Α͘ͳͬͨʯ͚ͩͰ͸౤ࢿ͠ଓ͚ͯ΋Β͑ͳ͍ • ձࣾͷʮਏ͍ʯ͕มΘͬͨͱ͖ʹ൓ԠͰ͖ͳ͍ͱɺ׆ಈͷՁ஋͕ܹݮ͢Δ • ࣭ͱεϐʔυͷτϨʔυΦϑ൑அ͕ࠓޙͷ՝୊ • ϋΠϦλʔϯɾϋΠίετͱ͍͏ͷΛ࣮ײ͢Δ • ͢΂ͯͷػೳ΍υϝΠϯΛ௒ίΞϩδοΫͱಉ͡࡞ΓࠐΈΛ͢Δͷ͔

Slide 125

Slide 125 text

ʮϦΞʔΩςΫνϟͷݱ࣮ʯ ΁ͷݸਓతͳࡶײ

Slide 126

Slide 126 text

ʮݱ࣮ʯ͸టष۪ͯ͘௚ • ϦΞʔΩςΫνϟͬͯɺΠέΠέٕज़ͱͭΑͭΑ࣮૷͹͔ΓͰ͸ͳ͍ • ۪௚ʹటʹ·ΈΕͯ࢓༷Λ੔ཧ͢Δ • ੔ͬͨ࢓༷͔Β͔͠γϯϓϧͳίʔυ͸࡞Εͳ͍ • ίʔυ΍σʔλͷઅͰ΋ʮ࢓༷ʯʮ࢓༷ʯͱݴ͍ଓ͚ͨɺ͜Ε͕ݱ࣮ • ΋ͷֶ͍͢͝ͼ͕͋Δ͠ɺଟ෼ΈΜͳ͕ฉ͍ͯ૝૾ͨ͠ΑΓͣͬͱָ͍͠ • Ͱ΋ͨ·ʹҋͷਂ͞ʹح੠͕ͰͨΓ͢Δ

Slide 127

Slide 127 text

ઓ͍ଓ͚Δ͔͠ͳ͍ ·͓ͨձ͍͠·͠ΐ͏