Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ちょうぜつ改め21世紀ふつうのソフトウェア設計

 ちょうぜつ改め21世紀ふつうのソフトウェア設計

Forkwell Library #14 2023.1.25 のスライドです。
https://forkwell.connpass.com/event/271212/

Hisateru Tanaka

January 25, 2023
Tweet

More Decks by Hisateru Tanaka

Other Decks in Programming

Transcript

  1. ͪΐ͏ͥͭվΊੈل;ͭ
    ͏ͷιϑτ΢ΣΞઃܭೖ໳

    View full-size slide

  2. w ओʹ1)1Λ࢖͓ͬͯ࢓ࣄͯ͠·͢
    w ͪΐ͏ͥͭΤϯδχΞΊ΋Γʔͪ
    ΌΜ
    w ೥ͷ೥຤ʹຊ͕ग़·ͨ͠
    ాதͻͯ͞Δ

    View full-size slide

  3. ੈلͷίϯϐϡʔλʔ
    Մಈ෦඼ͳ͠ܭࢉػͷ஀ੜ
    &/*"$ ೥୅

    View full-size slide

  4. ੈلͷίϯϐϡʔλʔ
    τϥϯδελूੵԽˠιϑτ΢ΣΞͷෳࡶԽ
    4ZTUFN ೥୅

    View full-size slide

  5. w ޙʹ΢ΥʔλʔϑΥʔϧͱ
    ݺ͹ΕΔΑ͏ʹͳͬͨ΋ͷ
    w ࢖͏ਓ͸ݶΒΕΔˠ΍Γͨ
    ͍͜ͱ͸͔͕ͨ஌Ε͍ͯΔ
    w ओ໰୊͸ߴՁ͗͢Δϋʔυ
    ΢ΣΞΛແବͳ͘࢖͑Δ͔
    w ઃܭ͸༧ଌՄೳɻϓϩάϥ
    ϛϯάҎલʹਓ͕ؒۤ࿑͢
    Δํ͕Α͍݁ՌΛੜΉ
    ౰࣌ͷ;ͭ͏ ΍ΉΛ͑ͣ

    IUUQXXXTDGVTDFEVdDTDJMFDUVSFT-FDUVSFSPZDFQEG

    View full-size slide

  6. w ࣮͸4ZTUFNͷ։ൃޙه
    ग़൛

    w ϒϧοΫεͷ๏ଇʮޙ޻ఔ΁ͷ૿
    һ͸ੜ࢈ੑΛԼ͛Δʯ
    w ιϑτ΢ΣΞʹରͯ͠ʮΞʔΩς
    Ϋνϟʯͱ͍͏ݴ༿ΛॳΊͯ࢖༻
    w ʮ֎Պखज़νʔϜʯͷൺᄻ
    w ͳͥ͜͏ͳΒͳ͔ͬͨͷ͔
    ਓ݄ͷਆ࿩
    ;ͭ͏ʹͳΔ΂͖ͩͬͨ͜ͱ

    View full-size slide

  7. w ͲΕ͚ͩେ͖ͯ͘ڧ͍΋ͷΛ࡞ΕΔ͔
    w ࡞ΔͨΊͷ૊৫ΛͲΕ͚ͩେ͖͘Ͱ͖Δ͔
    w ૊৫ϐϥϛου֊૚ʹΑΔେن໛Խ
    w ্૚ͷΠϯςϦ͸গ਺ͰࡁΉ
    w Լ૚͸ຌ༱ͳ࿑ಇऀΛޏ͏΂͖
    w ࿑ಇऀ͸ϚχϡΞϧ௨Γਖ਼֬ʹಈ͘ػց

    Μ ͳʹ͔ົͩͧʜ

    ੈل·Ͱʹൃୡͨ͠ࢥ૝

    View full-size slide

  8. ੈلͷίϯϐϡʔλʔ
    ύʔιφϧίϯϐϡʔλʔͷ͸͡·Γ
    "QQMF* ೥୅

    View full-size slide

  9. ੈلͷίϯϐϡʔλʔ
    શਓྨن໛ͷύʔιφϧίϯϐϡʔλʔීٴ΁
    /&4 ೥୅

    View full-size slide

  10. ϜʔΞͷ๏ଇ͸࢝·͍ͬͯͨ
    ܭࢉػͷूੵ౓͸೥ͰഒҎ্ʹ

    View full-size slide

  11. ;ͭ͏ͷײ͕֮มΘͬͨ
    ശϞϊ੡଄ͱίϯϐϡʔλʔͷҧ͍
    ࢢൢιϑτ΢ΣΞ

    View full-size slide

  12. w ߴߍੜͷύιίϯগ೥
    w ి࿩λμ͕͚ϋοΧʔ
    w ΦϯϥΠϯͷύιίϯήʔϜͩͱ
    ࢥ͍ͬͯͨ΋ͷ͕/03"% ๺Ξ
    ϝϦΧߤۭӉ஦๷Ӵ࢘ྩ෦
    ͷγ
    εςϜͩͬͨ
    w "QQMF*͔Β೥ͱܦͨͣʹɺ
    ͜Μͳөը͕ʮΘ͔Δʙʯͱ΢
    έΔ࣌୅ʹ
    8BS(BNFT

    ύιίϯগ೥WT֩؅ཧγεςϜ

    View full-size slide

  13. ੈلͷίϯϐϡʔλʔ
    ύιίϯͱຊ֨తͳίϯϐϡʔλʔͷڥ໨͕ͳ͘ͳΔ
    8JOEPXT ೥୅

    View full-size slide

  14. w 8JOEPXTରԠɺ1$"5ޓ׵ͷσό
    Πεɻ෺ཧ͕ΞʔΩςΫνϟʹґଘ
    w ػցͷݴޠͰϓϩάϥϛϯά͠ͳ͘
    ͯ΋ΤΫηϧͰ౳Ձͳܭࢉ͕Ͱ͖Δ
    w ΤϯυϢʔβʔίϯϐϡʔςΟϯ
    ά8:4*8:(1MVH1MBZ
    w ιϑτ΢ΣΞ͸ϋʔυ΢ΣΞʹର͠
    ͯΧϦΧϦʹ࠷దԽ͢ΔΑΓɺແବ
    ͕͋ͬͯ΋ਓ͕ؒ࢖͍΍͘͢
    ೥୅͸΋ͬͱ΋ΤΩαΠςΟϯάͳ࣌୅
    ੈք͸ιϑτ΢ΣΞͷ࣌୅΁

    View full-size slide

  15. ͱ͜Ζ͕ιϑτ΢ΣΞ։ൃ͸ʜ
    ॏްͳϓϩδΣΫτ؅ཧɾϛυϧ΢ΣΞͷංେԽ
    ʮιϑτ΢ΣΞͷ࣌୅΁ʯͬͯͦ͏͍͏͜ͱͳΜʜ

    View full-size slide

  16. w ਓͷࢥߟ͸ͭͶʹݱ࣮͔ΒԿ
    ೥͔஗ΕΔ
    w ถ܉΋͜Ε͕͍͍ͱݴͬͯͨ
    ͡Όͳ͍͔
    w ύιίϯ΍ήʔϜػͳΜͯຊ
    ෺ͷίϯϐϡʔλʔ͡Όͳ͍
    ΋Μ
    w େاۀϚωʔ͕ܦࡁ্ࢧ഑త
    ͳͷ͸ݱ࣮Ͱ͸͋ͬͨΑͶʜ
    લ࣌୅తͳࢥ͍ࠐΈ͕࢒ͨ͠ʮ͋ͬͯ΄͍͠ܗʯ
    ͍·ͩ౎߹ͷྑ͔ͬͨϞσϧ
    ͑Β͍
    ୭Ͱ΋Ͱ͖Δ
    ͸ͣͳΜͩ

    ͜ͱʹͳͬͯΔ

    View full-size slide

  17. w σβΠϯύλʔϯΦϒδΣΫτࢦ޲΁ͷ࠶஫໨
    w &OUFSQSJTF+BWB#FBOTˠܰշͳ+BWB 10+0

    w Φʔϓϯιʔε-".1 -JOVY"QBDIF.Z42-1)1

    w ϙʔϧɾάϨΞϜʮϋοΧʔͱըՈʯz#FBUJOH5IF"WFSBHFTz
    w 91ΤΫετϦʔϜɾϓϩάϥϛϯά 5%%൓෮গ਺ਫ਼Ӷ

    w ΞδϟΠϧιϑτ΢ΣΞ։ൃએݴ
    ैདྷܕιϑτ΢ΣΞ։ൃ΁ͷΞϯνςʔθ
    ੈل͔Βੈل΁

    View full-size slide

  18. ੈلͷίϯϐϡʔλʔ
    ୺຤͸਎ମͷҰ෦΁ɾຊ࣭͸Ϋϥ΢υαʔϏε΁

    View full-size slide

  19. ιϑτ΢ΣΞ։ൃͷൺॏ
    ʮϞϊͷѻ͍ʯ͕εΩϧɻ
    ͲΕ͚ͩଟ͘ͷఆܕతͳ
    ૢ࡞͕಄ʹೖ͍ͬͯΔ͔ɻ
    ʮͲΜͳαʔϏε͕ศར͔ʯ
    ͱ͍͏౴͑ͷͳ͍໰୊͕
    ιϑτ΢ΣΞ։ൃͷओ୊ʹɻ
    ίϯϐϡʔλʔ͸ݸਓͰ࢖͏ಓ۩
    ઐ໳ΦϖϨʔλʔ͕ඞཁ
    ੈل ੈل

    View full-size slide

  20. ͚ΕͲٕज़͸೉͘͠ͳ͍ͬͯΔͷͰ͸
    ΑΓෳࡶͰେ͖ͳߏ଄෺ΛͲ͏΍ͬͯ࡞Δͷ͔

    View full-size slide

  21. ͦ΋ͦ΋ڊେϞϊϦε͕
    ΋͏๞࿨͓ͯ͠Δͷ͡Ό

    View full-size slide

  22. w ʮΦϯαΠτސ٬ʯͱʮϖΞϓϩάϥϛϯάʯͷ௚݁
    w ςετۦಈ։ൃ͕ݪଇ 91͸ϚωδϝϯτͰ͸ͳ͍

    w 5%%͸҉ʹʮ୯ମςετՄೳͳཻ౓΁ͷ໰୊෼ղ͕લఏʯΛҙ
    ຯ͍ͯ͠Δˠ࠷ॳʹ࡞ΒΕͨͷ͸46OJU 4NBMMUBML༻
    ͩΑ
    w ΦϒδΣΫτࢦ޲͸΋ͱ΋ͱʮখ͞ͳܭࢉػ͕ϝοηʔδΛհ͠
    ͯωοτϫʔΫΛ੒ͨ͠࠶ؼతߏ଄ʯΈ͍ͨͳҙຯͩͬͨ
    w ࠓͰݴ͏ϚΠΫϩαʔϏε ଏʹݴ͏ϞδϡϥϞϊϦε΋

    91 ݩ૆ΞδϟΠϧ

    View full-size slide

  23. ΞδϟΠϧ͸খن໛ϓϩδΣΫ
    τ༻ͷํ๏࿦ͱݴΘΕ͕ͨʜ

    View full-size slide

  24. ෼ׂɾ൓෮ɾ෦෼ςετɾࣗݾ׬݁
    ΑΓεέʔϦϯά༨஍͕͋Δͷ͸ͲͪΒͰ͠ΐ͏
    ։ൃऀ͕ϢʔβʔͰ΋͋ΔΑ

    View full-size slide

  25. ઃܭ͸༧ଌՄೳͳػցͷ໰୊͔Β
    ༧ଌෆೳͳਓͷ໰୊ʹͳ͍ͬͯΔ
    ͪͳΈʹ͜Ε͸೥ͷϩΠε࿦จͷ݁࿦ͷਤͰ͢
    IUUQXXXTDGVTDFEVdDTDJMFDUVSFT-FDUVSFSPZDFQEG

    View full-size slide

  26. ϢʔβʔχʔζͷॊೈੑΛࢧ͑Δ
    ͔ͬ͠Γͨ͠ΞʔΩςΫνϟ

    View full-size slide

  27. ιϑτ΢ΣΞઃܭ͸ࣗసंͷ྆ྠ
    ͲͪΒ͕͚ܽͯ΋͏·͘૸Βͳ͍
    υϝΠϯϞσϧ
    গͮͭ͠޲͖Λม͑ΒΕΔ
    ΞʔΩςΫνϟ
    ࣗసं͸લʹਐΉ͔Β౗Εͳ͍
    ΠςϨʔγϣϯ
    υϝΠϯ
    ސ٬͕ຊ౰ʹཉ͔ͬͨ͠΋ͷ
    🤔

    View full-size slide

  28. ֤ιϑτ΢ΣΞʹݻ༗ͷ໰୊
    ॏཁ͕ͩڞ௨ͨ͠ҰൠԽ͸Ͱ͖ͳ͍
    Ͳ͏΍ͬͯεΩϧΛ্ୡͤ͞Ε͹ʜ
    ˠ൓෮܇࿅͔͠ͳ͍
    ཁ݅ఆٛʹ͸ख़࿅͕ඞཁ ϓϩδΣΫτͷதͰ൓෮Ͱ͢Α

    View full-size slide

  29. ڞ௨ͨ͠جຊݪଇ͕͋ΔྖҬ
    ൓෮తͳ։ൃͷۦಈޮ཰ΛߴΊΔํ๏
    ूத͢΂͖໰୊Λখ͘͞ด͡ΒΕΔ࡞Γ
    ߴ଎ʹςετۦಈΛճͤΔ
    ˠྑ͍ઃܭͷൃݟνϟϯεΛ૿΍ͯ͠ҭͯΔ

    View full-size slide

  30. ઃܭೖ໳͗͜ग़ͤΓΌͳΜͱ͔ͳΔ
    ৄ͍ٕ͠๏͸ຊͷதͰʜ

    View full-size slide

  31. ʮ·ͣΦϒδΣΫτࢦ޲
    ΛཧղͤΑʯ͸/(
    ਖ਼͍͠ํ๏͑͋͞Ε͹ԋ៷తʹਖ਼͍͠࢓ࣄʹͳΔͷ͸ݬ૝
    ॊೈੑΛࢧ͑Δݸʑͷ޻෉Λ௨ͯ͡ઌਓͷҙਤΛೝࣝ͢΂͠
    ʮΦϒδΣΫτࢦ޲ͷ׆༻ʯͬͯʜ
    ͲΜͳ͜ͱ͕ॻ͍ͯ͋Δຊͳͷʁ

    View full-size slide

  32. w ೥͝ΖΞϥϯɾέΠ͕ݴ͍ग़ͨ͠Β͍͠
    w 4JNVMBΛ࢖͍ͳ͕Βࢥ͍͍ͭͯɺ4NBMMUBML
    ͰΞΠ
    σΞΛܗʹ͍ͯͬͨ͠
    w ൴Ͱ͢ΒखΛಈ͔͠ͳ͕Β௫Μͩײ֮Λɺઆ໌͚ͩͰΘ͔ͬͨΑ͏
    ͳؾʹͳΕΔͷͩΖ͏͔ ͦͷޙΑΓෳࡶͳࣄ৘Λ๊͑ͨͷʹ

    w ؆୯ͳݴ༿ σʔλܕʹϝιου͕ੜ͍͑ͯΔͱศར
    ͰΘ͔ͬͨ
    ؾʹͤ͞ΔݴઆΛ৴͡ΒΕΔͩΖ͏͔
    w ೥୅ ʮਓ݄ͷਆ࿩ʯୈ̎൛ʙ
    ʹຊ֨తʹ࠶஫໨͞
    Εɺ౫ଡ͞Εͣੈلʹੜ͖࢒ͬͨϓϥΫςΟεͷ࣮ફ͕ઌ
    ΦϒδΣΫτࢦ޲͚ͩΘ͔Δ͸ͳ͍

    View full-size slide

  33. τϨϯυٕज़㱠࿑ಇࢿ֨
    ΦϒδΣΫτࢦ޲Ͱ͖·͢ ࢓ࣄΛ΋Β͑Δ

    View full-size slide

  34. ࿑ಇࢿ֨ͱରՁˠਓʹಧ͚ͨՁ஋
    ੈل ੈل
    💰 💰
    =
    ϓϩάϥϛϯάݴޠ
    ϑϨʔϜϫʔΫ"1*
    ͔͍͍ͬ͜ίʔσΟϯά
    ౴͕ܾ͑·͍ͬͯΔ͜ͱ
    ౴͑ͷͳ͍໰୊
    ݱ࣮తͳ੒Ռ
    ίί΍Ͱ

    View full-size slide

  35. w 7JBXFC #"4&Έ͍ͨͳͷ
    Λ-JTQ
    Ͱॻ͍ͨϙʔϧɾάϨΞϜͷຊ
    w ·ͩ8FC͕ϒϧʔΦʔγϟϯͩͬ
    ͨ࣌୅ɺͣ͹ൈ͚ٕͨज़͕Ξυόϯ
    ςʔδʹͳͬͯڝ߹Λग़͠ൈ͚ͨ
    w ੈք͸࠷৽ٕज़ͱ༏लͳΤϯδχΞ
    Λͧͬͯ͜ٻΊΔΑ͏ʹͳͬͨ
    w ຊ࣭తʹ͸͍͍͜ͱॻ͍ͯ͋Δ͚
    Ͳɺ۩ମ࿦΋͏೥લͷՁ஋؍
    ੈل͔Βੈل΁ͷγϑτظ

    View full-size slide

  36. w (PݴޠͷίʔυͰ͢
    w ͜Μͳίʔυهड़͕Ͱ͖Δ͜ͱΛ͝ଘ஌Ͱ͔ͨ͠ʁ
    w ͜ͷߦ͸͍͍ͬͨԿΛ͍ͯ͠ΔͰ͠ΐ͏͔
    w ࢲ͸Ͳ͏΍ͬͯ͜ͷίʔυΛॻ͍ͨͰ͠ΐ͏͔
    ಥવͰ͕͢ΫΠζͰ͢

    View full-size slide

  37. ͨ͑͜"*ʹ഑ྻΛٯʹ͢Δํ๏Λฉ͍ͨ
    ط஌ͷΞΠσΞͳΒจ๏Τϥʔͷͳ͍ίʔυΛ͙͢ग़ͤΔ

    View full-size slide

  38. ΋ͬͱߴ౓ͳ͜ͱ΋ฉ͍ͯΈͨ
    ʮ%PDLFSͰ8PSE1SFTT΍Γ͍ͨʯ

    View full-size slide

  39. ͕͢͞ʹ͜Ε͸஌Βͳ͍ͩΖʜ
    1ZUIPOͷϨτϩήʔϜΤϯδϯͩͥ
    ͍͍ͦͦ݁͜͜Ռग़ͯ͘͠Δ͡ΌͶʔ͔ʜ

    View full-size slide

  40. ΋͏͙͢͜Ε͕ʮී௨ͷ
    ΍ͭΒʯʹͳΔΜͰ͠ΐ
    ୭ΑΓ΋ૣ͘࠷৽ٕज़ͷ࢖͍ํΛϚελʔ͢Δ͚ͩͰ͸ɺ
    ΋͸΍͜Ε·ͰͷΞυόϯςʔδʹͳΒͳ͍ʜ
    ϋοΧʔͱըՈͷʮී௨ͷ্ʯ͸ผͷͱ͜Ζʹγϑτͨ͠

    View full-size slide

  41. ϋοΧʔ΋ըՈ΋ʜ
    ಉ͡౔ඨͰڝ͍߹͏૬ख͡Όͳ͍Α͜Μͳͷ
    IUUQTXXXDIJDIJQVJDPN

    View full-size slide

  42. ԼखͰ΋͍ͭ͜Β͕࡞Εͳ͍
    ϢχʔΫͳՁ஋Λ࡞ΕΔ͔͕
    উෛͳͷͰ͢ ݴ͍༁

    View full-size slide


  43. ࿑ಇࢿ֨ͱରՁˠਓʹಧ͚ͨՁ஋
    ී௨ ҎԼͷੈلత࿑ಇ
    WTී௨ ੈلͷৗࣝײ

    View full-size slide

  44. ඞਢεΩϧ+BWB։ൃܦݧ
    ʢ೥Ҏ্ʣ🤔
    ͜͏͍͏ͷͬͯɺٕज़ͷ࢖͍ํΛٻΊΒΕ͍ͯΔͷͰ͸
    Ͱ΋ʜ

    View full-size slide

  45. ސ٬͕ຊ౰ʹཉ͔ͬͨ͠ਓࡐ

    View full-size slide

  46. w ڞ௨ͷޠኮ͕ͳ͍ͷͰܦݧԿ೥ͱ
    ͍͏ݴ͍ํʹͳͬͯ͠·͏
    w ʮ೥ͷܦݧʯͱݴͬͨͱ͖ຊ౰
    ʹٻΊΒΕ͍ͯΔ΋ͷ͸਺ࣈͦͷ
    ΋ͷͰ͸ͳ͍
    w ʮจ๏΍"1*ͷ஌ࣝྔʯͰ͸ͳ
    ͘ɺͦΕΛ࢖ͬͨʮ໰୊ղܾͷۤ
    ࿑΍੒ޭମݧʯͷ΄͏͕ཉ͍͠
    ސ٬ͷઆ໌ͨ͠εΩϧཁ݅

    View full-size slide

  47. w ΋ͱ͸ʮӦۀͷઆ໌ʯͷֆ
    w ݴΘΕͨ͜ͱΑΓ΋ʮ͍͢͝ʯΛ
    ग़͢ͷ͕ചΓࠐΈͩͱࢥ͍ͬͯΔ
    w ͚͢͝Ε͹͍͢͝΄Ͳɺ͓ۚΛͨ
    ͘͞Μ΋Β͑Δʹ͕͍ͪͳ͍ͱ͍
    ͬͨࡨ֮
    w ૬खͷؾ࣋ͪΛߟ͑ͯΈ
    ௞͕ۚཉ͍͠ΤϯδχΞͷࣗݾΞϐʔϧ

    View full-size slide

  48. w ຊ౰͸ૉ๿ʹ͜ΕΛࢥ͍෇͚Δਓ͕
    ٻΊ͍ͯΔͷͩͱͨ͠Βʜ
    w ͢Ͱʹ૊৫͸ʮͪΐ͏Ͳ͍͍ιϑτ
    ΢ΣΞʯΛΘ͔͍ͬͯΔ
    w ແବʹΦʔόʔεϖοΫ͞ΛΞϐͬ
    ͯ΋ͦΜͳਓࡐ͸Ϛον͠ͳ͍
    w ʮ ݱ୅ͷ
    ;ͭ͏ʯΛͪΌΜͱͰ͖
    Δਓࡐ͕͍͍
    w ͜͏͍͏࠾༻͢ΔͳΒɺձࣾͱͯ͠
    ͷͷͼ͠Ζ΋͋Γͦ͏ˠ༗๬
    ސ٬͕ຊ౰ʹཉ͔ͬͨ͠ਓࡐ

    View full-size slide

  49. ੈلͷ;ͭ͏ະຬ
    ·ͩ͜ͷײ֮
    ੈلͷ;ͭ͏Ҏ্
    ͬͪ͜ʹͳͬͯΔ
    ஫௿ϨΠϠʔߴϨΠϠʔͱ͍͏࿩Ͱ͸ͳ͍Ͱ͢ɻʮۂܳͦΕࣗମ͕Ձ஋Ͱ͸ͳ͍ʯͷҙຯͰ͢

    View full-size slide

  50. w ΋͠ϗϯτʹʮͰ͖Δਓ͕ଞʹ୭΋͍ͳ
    ͍͔Βʯͱ͍͏ཧ༝ͰɺݴΘΕͨͱ͓Γ
    ͷ࡞ۀΛͤ͞ΒΕΔ࢓ࣄͩͬͨΒͲ͏͔
    w ͍͘ΒεΩϧ͕͋ͬͯ΋͋·Γ׆͔ͤ
    ͣɺεϖοΫͷແବ
    w ༨࣮ͬͨྗ͸ཧղධՁ͞Εͣɺ଴۰͸ਾ
    ͑ஔ͖ɻΘ͔ͬͯ΋Β͑ͳ͍ݽಠײ
    w ͜ͷ࣌୅ͦΜͳΜ͡Όɺ͍͍঎඼͕࡞Ε
    ΔΘ͚ͳ͍ͷͰձࣾͷকདྷੑͳ͠
    w ແ஌ͳਓΛ૬खʹ஌ࣝ֨ࠩΛചΔ࢓ࣄʹ
    ͳͬͯ͠·͏ˠ"*ʹک͑ଓ͚Δ
    ΋͜͠ΜͳձࣾͩͬͨΒʜຊ౰ʹೖΓ͍ͨ

    View full-size slide

  51. ੈلͷιϑτ΢ΣΞΤϯδχΞͱͯ͠ྑ͍ΩϟϦΞΛ
    ఏڙ

    View full-size slide