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

Serverless Application

disc99
July 20, 2019

Serverless Application

Serverlessを利用したアプリケーションの設計について #shinjukult で発表した資料

disc99

July 20, 2019
Tweet

More Decks by disc99

Other Decks in Technology

Transcript

  1. ϝϦοτɾσϝϦοτ w ར༻෼͚ͩ՝ۚ w αʔόϦιʔεɺίϯςφͷந৅Խ w ΠϕϯτυϦϒϯͰ༧ଌෆՄೳͳϫʔΫϩʔυʹ ΋ରԠՄ w αʔόʔϨεϓϩόΠμʔʹΑΔࣗಈνϡʔχϯά

    w Ϋϥ΢υωΠςΟϒͳઃܭʹڲਖ਼   w ਐԽͷܹ͍͠෼໺ͰΤίγεςϜɺφϨοδ͕ෆ଍ w ίʔϧυελʔτͷύϑΥʔϚϯε w ؔ਺ͷґଘؔ܎؅ཧ w αʔόʔϨεϓϩόΠμʔͷϩοΫΠϯ
  2. ϝϦοτɾσϝϦοτ w ར༻෼͚ͩ՝ۚ w αʔόϦιʔεɺίϯςφͷந৅Խ w ΠϕϯτυϦϒϯͰ༧ଌෆՄೳͳϫʔΫϩʔυʹ ΋ରԠՄ w αʔόʔϨεϓϩόΠμʔʹΑΔࣗಈνϡʔχϯά

    w Ϋϥ΢υωΠςΟϒͳઃܭʹڲਖ਼   w ਐԽͷܹ͍͠෼໺ͰΤίγεςϜɺφϨοδ͕ෆ଍ w ίʔϧυελʔτͷύϑΥʔϚϯε w ؔ਺ͷґଘؔ܎؅ཧ w αʔόʔϨεϓϩόΠμʔͷϩοΫΠϯ
  3. ϝϦοτɾσϝϦοτ w ར༻෼͚ͩ՝ۚ w αʔόϦιʔεɺίϯςφͷந৅Խ w ΠϕϯτυϦϒϯͰ༧ଌෆՄೳͳϫʔΫϩʔυʹ ΋ରԠՄ w αʔόʔϨεϓϩόΠμʔʹΑΔࣗಈνϡʔχϯά

    w Ϋϥ΢υωΠςΟϒͳઃܭʹڲਖ਼   w ਐԽͷܹ͍͠෼໺ͰΤίγεςϜɺφϨοδ͕ෆ଍ w ίʔϧυελʔτͷύϑΥʔϚϯε w ؔ਺ͷґଘؔ܎؅ཧ w αʔόʔϨεϓϩόΠμʔͷϩοΫΠϯ
  4. ϝϦοτɾσϝϦοτ w ར༻෼͚ͩ՝ۚ w αʔόϦιʔεɺίϯςφͷந৅Խ w ΠϕϯτυϦϒϯͰ༧ଌෆՄೳͳϫʔΫϩʔυʹ ΋ରԠՄ w αʔόʔϨεϓϩόΠμʔʹΑΔࣗಈνϡʔχϯά

    w Ϋϥ΢υωΠςΟϒͳઃܭʹڲਖ਼   w ਐԽͷܹ͍͠෼໺ͰΤίγεςϜɺφϨοδ͕ෆ଍ w ίʔϧυελʔτͷύϑΥʔϚϯε w ؔ਺ͷґଘؔ܎؅ཧ w αʔόʔϨεϓϩόΠμʔͷϩοΫΠϯ
  5. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  6. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  7. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  8. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  9. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  10. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  11. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  12. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  13. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  14. Ϣʔεέʔε   w ϚϧνϝσΟΞॲཧ w σʔλϕʔεͷมߋ·ͨ͸มߋσʔλͷΩϟϓνϟ $%$  w

    *P5ηϯαʔೖྗϝοηʔδ w εέʔϥϒϧͳετϦʔϜॲཧ w νϟοτϘοτ w όονδϣϒ·ͨ͸εέδϡʔϧ͞ΕͨλεΫ w )5513&45"1*ͱ8FCΞϓϦέʔγϣϯ w ϞόΠϧόοΫΤϯυ w ϏδωεϩδοΫ w ܧଓతΠϯςάϨʔγϣϯͷύΠϓϥΠϯ $/$'4FSWFSMFTT8IJUFQBQFSW IUUQTHJUIVCDPNDODGXHTFSWFSMFTT
  15. Ϋϥ΢υωΠςΟϒʹର͢Δཧղෆ଍ w Ϋϥ΢υ͕ར༻͞ΕΔ໨తͱͦͷϕετɾϓϥΫςΟεΛཧղ͢Δ w FY5IF5XFMWF'BDUPS"QQ $BB4ʹ͓͚ΔϕετɾϓϥΫςΟε  w $BB4΍1BB4ͷઃܭ͕લఏͰ'BB4͕͋Δ w

    ϕΞϝλϧͷࢥߟͰ'BB4Λར༻ͯ͠΋੍໿͕ଟ͗ͯ͢ϋϚΓ΍͍͢ w FYϚΠΫϩαʔϏεΞʔΩςΫνϟ w ෼ࢄɾૄ݁߹ͳγεςϜͷલఏͳ͠ʹɺߋʹࡉ෼Խ͞ΕͨγεςϜΛѻ͏ͷ ͸೉͍͠  
  16. Ϋϥ΢υωΠςΟϒʹର͢Δཧղෆ଍ w Ϋϥ΢υ͕ར༻͞ΕΔ໨తͱͦͷϕετɾϓϥΫςΟεΛཧղ͢Δ w FY5IF5XFMWF'BDUPS"QQ $BB4ʹ͓͚ΔϕετɾϓϥΫςΟε  w $BB4΍1BB4ͷઃܭ͕લఏͰ'BB4͕͋Δ w

    ϕΞϝλϧͷࢥߟͰ'BB4Λར༻ͯ͠΋੍໿͕ଟ͗ͯ͢ϋϚΓ΍͍͢ w FYϚΠΫϩαʔϏεΞʔΩςΫνϟ w ෼ࢄɾૄ݁߹ͳγεςϜͷલఏͳ͠ʹɺߋʹࡉ෼Խ͞ΕͨγεςϜΛѻ͏ͷ ͸೉͍͠  
  17. Ϋϥ΢υωΠςΟϒʹର͢Δཧղෆ଍ w Ϋϥ΢υ͕ར༻͞ΕΔ໨తͱͦͷϕετɾϓϥΫςΟεΛཧղ͢Δ w FY5IF5XFMWF'BDUPS"QQ $BB4ʹ͓͚ΔϕετɾϓϥΫςΟε  w $BB4΍1BB4ͷઃܭ͕લఏͰ'BB4͕͋Δ w

    ϕΞϝλϧͷࢥߟͰ'BB4Λར༻ͯ͠΋੍໿͕ଟ͗ͯ͢ϋϚΓ΍͍͢ w FYϚΠΫϩαʔϏεΞʔΩςΫνϟ w ෼ࢄɾૄ݁߹ͳγεςϜͷલఏͳ͠ʹɺߋʹࡉ෼Խ͞ΕͨγεςϜΛѻ͏ͷ ͸೉͍͠  
  18. Ϋϥ΢υωΠςΟϒʹର͢Δཧղෆ଍ w Ϋϥ΢υ͕ར༻͞ΕΔ໨తͱͦͷϕετɾϓϥΫςΟεΛཧղ͢Δ w FY5IF5XFMWF'BDUPS"QQ $BB4ʹ͓͚ΔϕετɾϓϥΫςΟε  w $BB4΍1BB4ͷઃܭ͕લఏͰ'BB4͕͋Δ w

    ϕΞϝλϧͷࢥߟͰ'BB4Λར༻ͯ͠΋੍໿͕ଟ͗ͯ͢ϋϚΓ΍͍͢ w FYϚΠΫϩαʔϏεΞʔΩςΫνϟ w ෼ࢄɾૄ݁߹ͳγεςϜͷલఏͳ͠ʹɺߋʹࡉ෼Խ͞ΕͨγεςϜΛѻ͏ͷ ͸೉͍͠  
  19. ૄ݁߹ͱඇಉظͷϐλΰϥεΠον w ؔ਺͕ࡉ෼Խ͞ΕΔ͜ͱͰɺಉ͡Α͏ͳϏδωεϩδοΫͷίϐʔ͕ੜ·ΕͨΓɺڞ௨ؔ਺Λݺͼग़ͨ͢ ΊʹɺωοτϫʔΫΛܦ༝͠ͳ͚Ε͹ͳΒͳ͍ w ैདྷͷΞʔΩςΫνϟͷ՝୊ͱͷτϨʔυΦϑ w FYਫฏεέʔϧ w ैདྷΞϓϦέʔγϣϯ͝ͱεέʔϧ

    w αʔόʔϨεݺͼग़͠ͷଟ͍ؔ਺͚ͩΛεέʔϧ -BNCEBͳΒσϑΥϧτ݅ಉ࣮࣌ߦ  w FYେྔΞΫηε w ಉظ༧ଌΛ௒͑ΔͱॲཧͰ͖ͳ͍Մೳੑ͕͋Δ w ඇಉظΩϡʔͳͲʹੵΈஞ࣮࣍ߦ͕Մೳɺߋʹਫฏεέʔϧ  
  20. ૄ݁߹ͱඇಉظͷϐλΰϥεΠον w ؔ਺͕ࡉ෼Խ͞ΕΔ͜ͱͰɺಉ͡Α͏ͳϏδωεϩδοΫͷίϐʔ͕ੜ·ΕͨΓɺڞ௨ؔ਺Λݺͼग़ͨ͢ ΊʹɺωοτϫʔΫΛܦ༝͠ͳ͚Ε͹ͳΒͳ͍ w ैདྷͷΞʔΩςΫνϟͷ՝୊ͱͷτϨʔυΦϑ w FYਫฏεέʔϧ w ैདྷΞϓϦέʔγϣϯ͝ͱεέʔϧ

    w αʔόʔϨεݺͼग़͠ͷଟ͍ؔ਺͚ͩΛεέʔϧ -BNCEBͳΒσϑΥϧτ݅ಉ࣮࣌ߦ  w FYେྔΞΫηε w ಉظ༧ଌΛ௒͑ΔͱॲཧͰ͖ͳ͍Մೳੑ͕͋Δ w ඇಉظΩϡʔͳͲʹੵΈஞ࣮࣍ߦ͕Մೳɺߋʹਫฏεέʔϧ  
  21. ૄ݁߹ͱඇಉظͷϐλΰϥεΠον w ؔ਺͕ࡉ෼Խ͞ΕΔ͜ͱͰɺಉ͡Α͏ͳϏδωεϩδοΫͷίϐʔ͕ੜ·ΕͨΓɺڞ௨ؔ਺Λݺͼग़ͨ͢ ΊʹɺωοτϫʔΫΛܦ༝͠ͳ͚Ε͹ͳΒͳ͍ w ैདྷͷΞʔΩςΫνϟͷ՝୊ͱͷτϨʔυΦϑ w FYਫฏεέʔϧ w ैདྷΞϓϦέʔγϣϯ͝ͱεέʔϧ

    w αʔόʔϨεݺͼग़͠ͷଟ͍ؔ਺͚ͩΛεέʔϧ -BNCEBͳΒσϑΥϧτ݅ಉ࣮࣌ߦ  w FYେྔΞΫηε w ಉظ༧ଌΛ௒͑ΔͱॲཧͰ͖ͳ͍Մೳੑ͕͋Δ w ඇಉظΩϡʔͳͲʹੵΈஞ࣮࣍ߦ͕Մೳɺߋʹਫฏεέʔϧ  
  22. ૄ݁߹ͱඇಉظͷϐλΰϥεΠον w ؔ਺͕ࡉ෼Խ͞ΕΔ͜ͱͰɺಉ͡Α͏ͳϏδωεϩδοΫͷίϐʔ͕ੜ·ΕͨΓɺڞ௨ؔ਺Λݺͼग़ͨ͢ ΊʹɺωοτϫʔΫΛܦ༝͠ͳ͚Ε͹ͳΒͳ͍ w ैདྷͷΞʔΩςΫνϟͷ՝୊ͱͷτϨʔυΦϑ w FYਫฏεέʔϧ w ैདྷΞϓϦέʔγϣϯ͝ͱεέʔϧ

    w αʔόʔϨεݺͼग़͠ͷଟ͍ؔ਺͚ͩΛεέʔϧ -BNCEBͳΒσϑΥϧτ݅ಉ࣮࣌ߦ  w FYେྔΞΫηε w ಉظ༧ଌΛ௒͑ΔͱॲཧͰ͖ͳ͍Մೳੑ͕͋Δ w ඇಉظΩϡʔͳͲʹੵΈஞ࣮࣍ߦ͕Մೳɺߋʹਫฏεέʔϧ  
  23. ૄ݁߹ͱඇಉظͷϐλΰϥεΠον w ؔ਺͕ࡉ෼Խ͞ΕΔ͜ͱͰɺಉ͡Α͏ͳϏδωεϩδοΫͷίϐʔ͕ੜ·ΕͨΓɺڞ௨ؔ਺Λݺͼग़ͨ͢ ΊʹɺωοτϫʔΫΛܦ༝͠ͳ͚Ε͹ͳΒͳ͍ w ैདྷͷΞʔΩςΫνϟͷ՝୊ͱͷτϨʔυΦϑ w FYਫฏεέʔϧ w ैདྷΞϓϦέʔγϣϯ͝ͱεέʔϧ

    w αʔόʔϨεݺͼग़͠ͷଟ͍ؔ਺͚ͩΛεέʔϧ -BNCEBͳΒσϑΥϧτ݅ಉ࣮࣌ߦ  w FYେྔΞΫηε w ಉظ༧ଌΛ௒͑ΔͱॲཧͰ͖ͳ͍Մೳੑ͕͋Δ w ඇಉظΩϡʔͳͲʹੵΈஞ࣮࣍ߦ͕Մೳɺߋʹਫฏεέʔϧ  
  24. ৽ͨͳ֓೦ʹର͢Δઃܭɾӡ༻ख๏ͷཱ֬ w ෼໺ࣗମ͕·ͩ·ͩ੒௕த w ࣮ߦ؀ڥ w πʔϧ w ϥΠϒϥϦ w

    ϕετɾϓϥΫςΟεͱΞϯνύλʔϯͳͲ͸͜Ε͔Β΋มΘΔ༨஍͕ଟ͍ w ௕ظతͳӡ༻Λݟਾ͑ͮΒ͍
 ʢ୯ػೳͳͨΊஔ͖׵͑͸͠΍͍͢ʣ w ࣄۀ੒௕ͳͲϏδωεཁ݅ͷมԽʹαʔόʔϨε͕Ϛον͠ͳ͘ͳͬͨͱ͖ͷόο ΫΞοϓϓϥϯ  
  25. ৽ͨͳ֓೦ʹର͢Δઃܭɾӡ༻ख๏ͷཱ֬ w ෼໺ࣗମ͕·ͩ·ͩ੒௕த w ࣮ߦ؀ڥ w πʔϧ w ϥΠϒϥϦ w

    ϕετɾϓϥΫςΟεͱΞϯνύλʔϯͳͲ͸͜Ε͔Β΋มΘΔ༨஍͕ଟ͍ w ௕ظతͳӡ༻Λݟਾ͑ͮΒ͍
 ʢ୯ػೳͳͨΊஔ͖׵͑͸͠΍͍͢ʣ w ࣄۀ੒௕ͳͲϏδωεཁ݅ͷมԽʹαʔόʔϨε͕Ϛον͠ͳ͘ͳͬͨͱ͖ͷόο ΫΞοϓϓϥϯ  
  26. ৽ͨͳ֓೦ʹର͢Δઃܭɾӡ༻ख๏ͷཱ֬ w ෼໺ࣗମ͕·ͩ·ͩ੒௕த w ࣮ߦ؀ڥ w πʔϧ w ϥΠϒϥϦ w

    ϕετɾϓϥΫςΟεͱΞϯνύλʔϯͳͲ͸͜Ε͔Β΋มΘΔ༨஍͕ଟ͍ w ௕ظతͳӡ༻Λݟਾ͑ͮΒ͍
 ʢ୯ػೳͳͨΊஔ͖׵͑͸͠΍͍͢ʣ w ࣄۀ੒௕ͳͲϏδωεཁ݅ͷมԽʹαʔόʔϨε͕Ϛον͠ͳ͘ͳͬͨͱ͖ͷόο ΫΞοϓϓϥϯ  
  27. ৽ͨͳ֓೦ʹର͢Δઃܭɾӡ༻ख๏ͷཱ֬ w ෼໺ࣗମ͕·ͩ·ͩ੒௕த w ࣮ߦ؀ڥ w πʔϧ w ϥΠϒϥϦ w

    ϕετɾϓϥΫςΟεͱΞϯνύλʔϯͳͲ͸͜Ε͔Β΋มΘΔ༨஍͕ଟ͍ w ௕ظతͳӡ༻Λݟਾ͑ͮΒ͍
 ʢ୯ػೳͳͨΊஔ͖׵͑͸͠΍͍͢ʣ w ࣄۀ੒௕ͳͲϏδωεཁ݅ͷมԽʹαʔόʔϨε͕Ϛον͠ͳ͘ͳͬͨͱ͖ͷόο ΫΞοϓϓϥϯ  
  28. ৽ͨͳ֓೦ʹର͢Δઃܭɾӡ༻ख๏ͷཱ֬ w ෼໺ࣗମ͕·ͩ·ͩ੒௕த w ࣮ߦ؀ڥ w πʔϧ w ϥΠϒϥϦ w

    ϕετɾϓϥΫςΟεͱΞϯνύλʔϯͳͲ͸͜Ε͔Β΋มΘΔ༨஍͕ଟ͍ w ௕ظతͳӡ༻Λݟਾ͑ͮΒ͍
 ʢ୯ػೳͳͨΊஔ͖׵͑͸͠΍͍͢ʣ w ࣄۀ੒௕ͳͲϏδωεཁ݅ͷมԽʹαʔόʔϨε͕Ϛον͠ͳ͘ͳͬͨͱ͖ͷόο ΫΞοϓϓϥϯ  
  29. ৽ͨͳ֓೦ʹର͢Δઃܭɾӡ༻ख๏ͷཱ֬ w ෼໺ࣗମ͕·ͩ·ͩ੒௕த w ࣮ߦ؀ڥ w πʔϧ w ϥΠϒϥϦ w

    ϕετɾϓϥΫςΟεͱΞϯνύλʔϯͳͲ͸͜Ε͔Β΋มΘΔ༨஍͕ଟ͍ w ௕ظతͳӡ༻Λݟਾ͑ͮΒ͍
 ʢ୯ػೳͳͨΊஔ͖׵͑͸͠΍͍͢ʣ w ࣄۀ੒௕ͳͲϏδωεཁ݅ͷมԽʹαʔόʔϨε͕Ϛον͠ͳ͘ͳͬͨͱ͖ͷόο ΫΞοϓϓϥϯ  
  30. ໨తʹཱͪฦΔ w ϏδωεϩδοΫʹूத w αʔόʔϨεԽʹΑͬͯϏδωεϩδοΫͷ࣮૷͸ม͑ͨ͘ͳ͍ w αʔόʔϨεͷϝϦοτʢεέʔϥϏϦςΟ΍Ϧιʔεͷந৅Խɺίετ࠷దԽɺ αʔόʔϨεϓϩόΠμʔʹΑΔηΩϡϦςΟ΍ύϑΥʔϚϯε޲্ʣ͸औΓೖΕͨ ͍ w

    τϨʔυΦϑ͸ཧղ্ͨ͠Ͱɺີ݁߹ͳ΄͏͕ྑ͍෦෼΋͋Δ w ਐԽ͕ܹ͍ٕ͠ज़෼໺Ͱɺ͍͟ͱ͍͏ͱ͖ͷόοΫΞοϓϓϥϯΛ࢒͓͖͍ͯͨ͠ w ཉ͍͠ͷ͸ϥϯλΠϜ ӡ༻ ͷϝϦοτͰɺઃܭ΍։ൃ͸ैདྷͷΞϓϩʔνͷ΄͏͕ྑ͍ ৔߹΋ଟ͍  
  31. ໨తʹཱͪฦΔ w ϏδωεϩδοΫʹूத w αʔόʔϨεԽʹΑͬͯϏδωεϩδοΫͷ࣮૷͸ม͑ͨ͘ͳ͍ w αʔόʔϨεͷϝϦοτʢεέʔϥϏϦςΟ΍Ϧιʔεͷந৅Խɺίετ࠷దԽɺ αʔόʔϨεϓϩόΠμʔʹΑΔηΩϡϦςΟ΍ύϑΥʔϚϯε޲্ʣ͸औΓೖΕͨ ͍ w

    τϨʔυΦϑ͸ཧղ্ͨ͠Ͱɺີ݁߹ͳ΄͏͕ྑ͍෦෼΋͋Δ w ਐԽ͕ܹ͍ٕ͠ज़෼໺Ͱɺ͍͟ͱ͍͏ͱ͖ͷόοΫΞοϓϓϥϯΛ࢒͓͖͍ͯͨ͠ w ཉ͍͠ͷ͸ϥϯλΠϜ ӡ༻ ͷϝϦοτͰɺઃܭ΍։ൃ͸ैདྷͷΞϓϩʔνͷ΄͏͕ྑ͍ ৔߹΋ଟ͍  
  32. ໨తʹཱͪฦΔ w ϏδωεϩδοΫʹूத w αʔόʔϨεԽʹΑͬͯϏδωεϩδοΫͷ࣮૷͸ม͑ͨ͘ͳ͍ w αʔόʔϨεͷϝϦοτʢεέʔϥϏϦςΟ΍Ϧιʔεͷந৅Խɺίετ࠷దԽɺ αʔόʔϨεϓϩόΠμʔʹΑΔηΩϡϦςΟ΍ύϑΥʔϚϯε޲্ʣ͸औΓೖΕͨ ͍ w

    τϨʔυΦϑ͸ཧղ্ͨ͠Ͱɺີ݁߹ͳ΄͏͕ྑ͍෦෼΋͋Δ w ਐԽ͕ܹ͍ٕ͠ज़෼໺Ͱɺ͍͟ͱ͍͏ͱ͖ͷόοΫΞοϓϓϥϯΛ࢒͓͖͍ͯͨ͠ w ཉ͍͠ͷ͸ϥϯλΠϜ ӡ༻ ͷϝϦοτͰɺઃܭ΍։ൃ͸ैདྷͷΞϓϩʔνͷ΄͏͕ྑ͍ ৔߹΋ଟ͍  
  33. ໨తʹཱͪฦΔ w ϏδωεϩδοΫʹूத w αʔόʔϨεԽʹΑͬͯϏδωεϩδοΫͷ࣮૷͸ม͑ͨ͘ͳ͍ w αʔόʔϨεͷϝϦοτʢεέʔϥϏϦςΟ΍Ϧιʔεͷந৅Խɺίετ࠷దԽɺ αʔόʔϨεϓϩόΠμʔʹΑΔηΩϡϦςΟ΍ύϑΥʔϚϯε޲্ʣ͸औΓೖΕͨ ͍ w

    τϨʔυΦϑ͸ཧղ্ͨ͠Ͱɺີ݁߹ͳ΄͏͕ྑ͍෦෼΋͋Δ w ਐԽ͕ܹ͍ٕ͠ज़෼໺Ͱɺ͍͟ͱ͍͏ͱ͖ͷόοΫΞοϓϓϥϯΛ࢒͓͖͍ͯͨ͠ w ཉ͍͠ͷ͸ϥϯλΠϜ ӡ༻ ͷϝϦοτͰɺઃܭ΍։ൃ͸ैདྷͷΞϓϩʔνͷ΄͏͕ྑ͍ ৔߹΋ଟ͍  
  34. ໨తʹཱͪฦΔ w ϏδωεϩδοΫʹूத w αʔόʔϨεԽʹΑͬͯϏδωεϩδοΫͷ࣮૷͸ม͑ͨ͘ͳ͍ w αʔόʔϨεͷϝϦοτʢεέʔϥϏϦςΟ΍Ϧιʔεͷந৅Խɺίετ࠷దԽɺ αʔόʔϨεϓϩόΠμʔʹΑΔηΩϡϦςΟ΍ύϑΥʔϚϯε޲্ʣ͸औΓೖΕͨ ͍ w

    τϨʔυΦϑ͸ཧղ্ͨ͠Ͱɺີ݁߹ͳ΄͏͕ྑ͍෦෼΋͋Δ w ਐԽ͕ܹ͍ٕ͠ज़෼໺Ͱɺ͍͟ͱ͍͏ͱ͖ͷόοΫΞοϓϓϥϯΛ࢒͓͖͍ͯͨ͠ w ཉ͍͠ͷ͸ϥϯλΠϜ ӡ༻ ͷϝϦοτͰɺઃܭ΍։ൃ͸ैདྷͷΞϓϩʔνͷ΄͏͕ྑ͍ ৔߹΋ଟ͍  
  35. ໨తʹཱͪฦΔ w ϏδωεϩδοΫʹूத w αʔόʔϨεԽʹΑͬͯϏδωεϩδοΫͷ࣮૷͸ม͑ͨ͘ͳ͍ w αʔόʔϨεͷϝϦοτʢεέʔϥϏϦςΟ΍Ϧιʔεͷந৅Խɺίετ࠷దԽɺ αʔόʔϨεϓϩόΠμʔʹΑΔηΩϡϦςΟ΍ύϑΥʔϚϯε޲্ʣ͸औΓೖΕͨ ͍ w

    τϨʔυΦϑ͸ཧղ্ͨ͠Ͱɺີ݁߹ͳ΄͏͕ྑ͍෦෼΋͋Δ w ਐԽ͕ܹ͍ٕ͠ज़෼໺Ͱɺ͍͟ͱ͍͏ͱ͖ͷόοΫΞοϓϓϥϯΛ࢒͓͖͍ͯͨ͠ w ཉ͍͠ͷ͸ϥϯλΠϜ ӡ༻ ͷϝϦοτͰɺઃܭ΍։ൃ͸ैདྷͷΞϓϩʔνͷ΄͏͕ྑ͍ ৔߹΋ଟ͍  
  36. ໨తʹཱͪฦΔ w ϏδωεϩδοΫʹूத w αʔόʔϨεԽʹΑͬͯϏδωεϩδοΫͷ࣮૷͸ม͑ͨ͘ͳ͍ w αʔόʔϨεͷϝϦοτʢεέʔϥϏϦςΟ΍Ϧιʔεͷந৅Խɺίετ࠷దԽɺ αʔόʔϨεϓϩόΠμʔʹΑΔηΩϡϦςΟ΍ύϑΥʔϚϯε޲্ʣ͸औΓೖΕͨ ͍ w

    τϨʔυΦϑ͸ཧղ্ͨ͠Ͱɺີ݁߹ͳ΄͏͕ྑ͍෦෼΋͋Δ w ਐԽ͕ܹ͍ٕ͠ज़෼໺Ͱɺ͍͟ͱ͍͏ͱ͖ͷόοΫΞοϓϓϥϯΛ࢒͓͖͍ͯͨ͠ w ཉ͍͠ͷ͸ϥϯλΠϜ ӡ༻ ͷϝϦοτͰɺઃܭ΍։ൃ͸ैདྷͷΞϓϩʔνͷ΄͏͕ྑ͍ ৔߹΋ଟ͍  
  37. ߟ͑ํ w ಉ৺ԁܥͷΞʔΩςΫνϟʹΑΔ੹຿ͷ෼཭ w %%% ϨΠϠʔυΞʔΩςΫνϟ  %*1 w ϔΩαΰφϧΞʔΩςΫνϟ

    w ΫϦʔϯΞʔΩςΫνϟ w ΦχΦϯΞʔΩςΫνϟ ˞ࠓճ͸ΫϦʔϯΞʔΩςΫνϟΛྫʹ঺հ  
  38. ߟ͑ํ w ಉ৺ԁܥͷΞʔΩςΫνϟʹΑΔ੹຿ͷ෼཭ w %%% ϨΠϠʔυΞʔΩςΫνϟ  %*1 w ϔΩαΰφϧΞʔΩςΫνϟ

    w ΫϦʔϯΞʔΩςΫνϟ w ΦχΦϯΞʔΩςΫνϟ ˞ࠓճ͸ΫϦʔϯΞʔΩςΫνϟΛྫʹ঺հ w ϏδωεϩδοΫ΍Ϣʔεέʔε͕த৺Ͱ֎ଆʹґଘ͠ͳ͍  
  39. ߟ͑ํ w ಉ৺ԁܥͷΞʔΩςΫνϟʹΑΔ੹຿ͷ෼཭ w %%% ϨΠϠʔυΞʔΩςΫνϟ  %*1 w ϔΩαΰφϧΞʔΩςΫνϟ

    w ΫϦʔϯΞʔΩςΫνϟ w ΦχΦϯΞʔΩςΫνϟ ˞ࠓճ͸ΫϦʔϯΞʔΩςΫνϟΛྫʹ঺հ w ϏδωεϩδοΫ΍Ϣʔεέʔε͕த৺Ͱ֎ଆʹґଘ͠ͳ͍ w ֎෦ΠϯλʔϑΣΠεʢαʔόʔϨεϓϩόΠμʔґଘʣͷॲཧ͸Ϗδωεϩ δοΫΛ࠶ར༻  
  40. ߟ͑ํ w ಉ৺ԁܥͷΞʔΩςΫνϟʹΑΔ੹຿ͷ෼཭ w %%% ϨΠϠʔυΞʔΩςΫνϟ  %*1 w ϔΩαΰφϧΞʔΩςΫνϟ

    w ΫϦʔϯΞʔΩςΫνϟ w ΦχΦϯΞʔΩςΫνϟ ˞ࠓճ͸ΫϦʔϯΞʔΩςΫνϟΛྫʹ঺հ w ϏδωεϩδοΫ΍Ϣʔεέʔε͕த৺Ͱ֎ଆʹґଘ͠ͳ͍ w ֎෦ΠϯλʔϑΣΠεʢαʔόʔϨεϓϩόΠμʔґଘʣͷॲཧ͸Ϗδωεϩ δοΫΛ࠶ར༻ w ϏδωεϩδοΫ͸ෳ਺ͷؔ਺Ͱڞ༗  
  41. FY4QSJOH$MPVE'VODUJPO ࣮૷   w 'SBNFXPSLT%SJWFST*OUFSGBDF"EBQUFST w -BNCEB͔Βͷݺͼग़͠Λड͚Δ)BOEMFSͱ 'VODUJPO w

    -BNCEBͷΠϕϯτ͔Β"QQMJDBUJPO4FSWJDF Λݺͼग़͢ബ͍ॲཧ w αʔόʔϨεϓϩόΠμʔґଘͷॲཧΛด͡ࠐ ΊΔ class AccountCreateHandler extends SpringBootApiGatewayRequestHandler {} class AccountCreate implements Function<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> { AccountService accountService; @Override public APIGatewayProxyResponseEvent apply(APIGatewayProxyRequestEvent req) { // ... accountService.create(); // ... return new APIGatewayProxyResponseEvent(); } }
  42. FY4QSJOH$MPVE'VODUJPO ࣮૷   w 'SBNFXPSLT%SJWFST*OUFSGBDF"EBQUFST w -BNCEB͔Βͷݺͼग़͠Λड͚Δ)BOEMFSͱ 'VODUJPO w

    -BNCEBͷΠϕϯτ͔Β"QQMJDBUJPO4FSWJDF Λݺͼग़͢ബ͍ॲཧ w αʔόʔϨεϓϩόΠμʔґଘͷॲཧΛด͡ࠐ ΊΔ class AccountCreateHandler extends SpringBootApiGatewayRequestHandler {} class AccountCreate implements Function<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> { AccountService accountService; @Override public APIGatewayProxyResponseEvent apply(APIGatewayProxyRequestEvent req) { // ... accountService.create(); // ... return new APIGatewayProxyResponseEvent(); } }
  43. FY4QSJOH$MPVE'VODUJPO ࣮૷   w 'SBNFXPSLT%SJWFST*OUFSGBDF"EBQUFST w -BNCEB͔Βͷݺͼग़͠Λड͚Δ)BOEMFSͱ 'VODUJPO w

    -BNCEBͷΠϕϯτ͔Β"QQMJDBUJPO4FSWJDF Λݺͼग़͢ബ͍ॲཧ w αʔόʔϨεϓϩόΠμʔґଘͷॲཧΛด͡ࠐ ΊΔ class AccountCreateHandler extends SpringBootApiGatewayRequestHandler {} class AccountCreate implements Function<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> { AccountService accountService; @Override public APIGatewayProxyResponseEvent apply(APIGatewayProxyRequestEvent req) { // ... accountService.create(); // ... return new APIGatewayProxyResponseEvent(); } }
  44. FY4QSJOH$MPVE'VODUJPO ࣮૷   w 'SBNFXPSLT%SJWFST*OUFSGBDF"EBQUFST w -BNCEB͔Βͷݺͼग़͠Λड͚Δ)BOEMFSͱ 'VODUJPO w

    -BNCEBͷΠϕϯτ͔Β"QQMJDBUJPO4FSWJDF Λݺͼग़͢ബ͍ॲཧ w αʔόʔϨεϓϩόΠμʔґଘͷॲཧΛด͡ࠐ ΊΔ class AccountCreateHandler extends SpringBootApiGatewayRequestHandler {} class AccountCreate implements Function<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> { AccountService accountService; @Override public APIGatewayProxyResponseEvent apply(APIGatewayProxyRequestEvent req) { // ... accountService.create(); // ... return new APIGatewayProxyResponseEvent(); } }
  45. FY4QSJOH$MPVE'VODUJPO ࣮૷   w "QQMJDBUJPO#VTJOFTT3VMFT&OUFSQSJTF#VTJOFTT3VMFT w "QQMJDBUJPO4FSWJDF w ͜ΕҎ߱ͷॲཧ͸ैདྷͷΞϓϦέʔγϣϯઃܭͱಉ͡

    w αʔόʔϨεϓϩόΠμʔʹඇґଘ @Service class AccountService { void create() { // Application Business Rules… } }
  46. FY4QSJOH$MPVE'VODUJPO ࣮૷   w "QQMJDBUJPO#VTJOFTT3VMFT&OUFSQSJTF#VTJOFTT3VMFT w "QQMJDBUJPO4FSWJDF w ͜ΕҎ߱ͷॲཧ͸ैདྷͷΞϓϦέʔγϣϯઃܭͱಉ͡

    w αʔόʔϨεϓϩόΠμʔʹඇґଘ @Service class AccountService { void create() { // Application Business Rules… } }
  47. FY4QSJOH$MPVE'VODUJPO ࣮૷   w "QQMJDBUJPO#VTJOFTT3VMFT&OUFSQSJTF#VTJOFTT3VMFT w "QQMJDBUJPO4FSWJDF w ͜ΕҎ߱ͷॲཧ͸ैདྷͷΞϓϦέʔγϣϯઃܭͱಉ͡

    w αʔόʔϨεϓϩόΠμʔʹඇґଘ @Service class AccountService { void create() { // Application Business Rules… } }
  48. FY4QSJOH$MPVE'VODUJPO ࣮૷   w "QQMJDBUJPO#VTJOFTT3VMFT&OUFSQSJTF#VTJOFTT3VMFT w "QQMJDBUJPO4FSWJDF w ͜ΕҎ߱ͷॲཧ͸ैདྷͷΞϓϦέʔγϣϯઃܭͱಉ͡

    w αʔόʔϨεϓϩόΠμʔʹඇґଘ @Service class AccountService { void create() { // Application Business Rules… } }
  49. FY4QSJOH$MPVE'VODUJPO NVMUJGVODUJPOT   w )BOEMFSͱ'VODUJPO͸-BNCEBͷ୯ҐͰෳ਺ఆٛ w ݺͼग़͢"QQMJDBUJPO4FSWJDF͸ͭ class AccountCreate

    implements Function</* ... */> { AccountService accountService; @Override public APIGatewayProxyResponseEvent apply(/* ... */) { // ... accountService.create(account); // ... return new APIGatewayProxyResponseEvent(); } }
  50. FY4QSJOH$MPVE'VODUJPO NVMUJGVODUJPOT   w )BOEMFSͱ'VODUJPO͸-BNCEBͷ୯ҐͰෳ਺ఆٛ w ݺͼग़͢"QQMJDBUJPO4FSWJDF͸ͭ class AccountUpdate

    implements Function</* ... */> { AccountService accountService; @Override public APIGatewayProxyResponseEvent apply(/* ... */) { // ... accountService.update(account); // ... return new APIGatewayProxyResponseEvent(); } }
  51. FY4QSJOH$MPVE'VODUJPO NVMUJGVODUJPOT   w )BOEMFSͱ'VODUJPO͸-BNCEBͷ୯ҐͰෳ਺ఆٛ w ݺͼग़͢"QQMJDBUJPO4FSWJDF͸ͭ class AccountDelete

    implements Function</* ... */> { AccountService accountService; @Override public APIGatewayProxyResponseEvent apply(/* ... */) { // ... accountService.delete(accountId); // ... return new APIGatewayProxyResponseEvent(); } }
  52. FY4QSJOH$MPVE'VODUJPO NVMUJGVODUJPOT   w σϓϩΠπʔϧͰKBSͱ)BOEMFSͷؔ܎ੑΛ؅ཧ
 ˞FY4FSWFSMFTT'SBNFXPSL provider: # …

    environment: MAIN_CLASS: example.AccountApplication package: artifact: build/libs/account.jar functions: accountCreate: handler: example.adapter.AccountCreateHandler events: - http: path: /accounts method: post environment: FUNCTION_NAME: accountCreate accountUpdate: handler: example.adapter.AccountUpdateHandler events: - http: path: /accounts method: put environment: FUNCTION_NAME: accountUpdate accountDelete: handler: example.adapter.AccountDeleteHandler events: - http: path: /accounts method: delete environment: FUNCTION_NAME: accountDelete
  53. FY4QSJOH$MPVE'VODUJPO NVMUJGVODUJPOT   w ύοέʔδϯά͞ΕͨϑΝΠϧΛෳ਺ͷ-BNCEBʹల։ w )BOEMFS͕ผͳͨΊɺผͳ'VODUJPOͱͯ͠ىಈ w -BNCEB

    ϥϯλΠϜ ͸ෳ਺͕ͩϏδωεϩδοΫ͸ͭ Λڞ༗ BDDPVOUKBS BDDPVOU$SFBUF BDDPVOU6QEBUF BDDPVOU%FMFUF
  54. ڞ༗ϥΠϒϥϦ w ϚΠΫϩαʔϏεΞʔΩςΫνϟͷதͷΞϯνύλʔϯ w ϚΠΫϩαʔϏεಉ༷ɺαʔόʔϨεͷϝϦοτ΋ࣦ ͍΍͍͢ w ີ݁߹ w ىಈɺ࣮ߦ଎౓ͷ௿Լ

    w Ϧιʔε࢖༻ྔͷ૿Ճ w εέʔϥϏϦςΟͷѱԽ w ϏδωεϩδοΫΛڞ༗͢Δ୯Ґ͸৻ॏʹ w τϨʔυΦϑΛཧղ͠ڞ༗͢Δ͔Λબ୒  
  55. ڞ༗ϥΠϒϥϦ w ϚΠΫϩαʔϏεΞʔΩςΫνϟͷதͷΞϯνύλʔϯ w ϚΠΫϩαʔϏεಉ༷ɺαʔόʔϨεͷϝϦοτ΋ࣦ ͍΍͍͢ w ີ݁߹ w ىಈɺ࣮ߦ଎౓ͷ௿Լ

    w Ϧιʔε࢖༻ྔͷ૿Ճ w εέʔϥϏϦςΟͷѱԽ w ϏδωεϩδοΫΛڞ༗͢Δ୯Ґ͸৻ॏʹ w τϨʔυΦϑΛཧղ͠ڞ༗͢Δ͔Λબ୒  
  56. ڞ༗ϥΠϒϥϦ w ϚΠΫϩαʔϏεΞʔΩςΫνϟͷதͷΞϯνύλʔϯ w ϚΠΫϩαʔϏεಉ༷ɺαʔόʔϨεͷϝϦοτ΋ࣦ ͍΍͍͢ w ີ݁߹ w ىಈɺ࣮ߦ଎౓ͷ௿Լ

    w Ϧιʔε࢖༻ྔͷ૿Ճ w εέʔϥϏϦςΟͷѱԽ w ϏδωεϩδοΫΛڞ༗͢Δ୯Ґ͸৻ॏʹ w τϨʔυΦϑΛཧղ͠ڞ༗͢Δ͔Λબ୒  
  57. ڞ༗ϥΠϒϥϦ w ϚΠΫϩαʔϏεΞʔΩςΫνϟͷதͷΞϯνύλʔϯ w ϚΠΫϩαʔϏεಉ༷ɺαʔόʔϨεͷϝϦοτ΋ࣦ ͍΍͍͢ w ີ݁߹ w ىಈɺ࣮ߦ଎౓ͷ௿Լ

    w Ϧιʔε࢖༻ྔͷ૿Ճ w εέʔϥϏϦςΟͷѱԽ w ϏδωεϩδοΫΛڞ༗͢Δ୯Ґ͸৻ॏʹ w τϨʔυΦϑΛཧղ͠ڞ༗͢Δ͔Λબ୒  
  58. ڞ༗ϥΠϒϥϦ w ϚΠΫϩαʔϏεΞʔΩςΫνϟͷதͷΞϯνύλʔϯ w ϚΠΫϩαʔϏεಉ༷ɺαʔόʔϨεͷϝϦοτ΋ࣦ ͍΍͍͢ w ີ݁߹ w ىಈɺ࣮ߦ଎౓ͷ௿Լ

    w Ϧιʔε࢖༻ྔͷ૿Ճ w εέʔϥϏϦςΟͷѱԽ w ϏδωεϩδοΫΛڞ༗͢Δ୯Ґ͸৻ॏʹ w τϨʔυΦϑΛཧղ͠ڞ༗͢Δ͔Λબ୒