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

AWS CDKとZodを活用したバリデーションパターン集 / validation patterns with cdk and zod

AWS CDKとZodを活用したバリデーションパターン集 / validation patterns with cdk and zod

2023/05/20開催「AWS CDK Conference Japan 2023」での発表資料です。

k.goto

May 18, 2023
Tweet

More Decks by k.goto

Other Decks in Programming

Transcript


  1. LHPUP าͷςοΫ

    "84$%,ͱ;PEΛ׆༻ͨ͠
    όϦσʔγϣϯύλʔϯू
    "84$%,$POGFSFODF+BQBO

    View Slide

  2. ࣗݾ঺հ LHPUP

    w ςοΫϦʔυɾϥʔϝϯ޷͖
    w "84$PNNVOJUZ#VJMEFS %FW5PPMT

    w าͷςοΫ ٕज़ϒϩά

    w ࣗ࡞"84ؔ࿈πʔϧͷ044։ൃ
    w [email protected]@UFDI
    ‣ LHPUP าͷςοΫ

    View Slide

  3. લఏ
    w $%,͸5ZQF4DSJQUͰ࣮૷͍ͯ͠·͢
    w όʔδϣϯ
    ‣ /PEFKT
    ‣ 5ZQF4DSJQU
    ‣ "84$%,

    View Slide

  4. ;PEͱ͸ʁ

    View Slide

  5. ;PEͱ͸ʁ
    w 5ZQF4DSJQUͷόϦσʔγϣϯπʔϧ
    ‣ ϦΫΤετͳͲͷΦϒδΣΫτ৘ใΛɺఆٛͨ͠UZQFͷΦϒδΣΫτʹύʔε͢Δ
    λΠϛϯάͰɺఆٛͨ͠ϧʔϧʹج͍ͮͯόϦσʔγϣϯΛߦ͑Δπʔϧ
    ‣ 5ZQF ܕ
    ఆٛͱಉ͡ϑΝΠϧͰόϦσʔγϣϯϧʔϧ͕ॻ͚Δ

    View Slide

  6. ;PEͱ͸ʁ
    ɾܕνΣοΫOVNCFS TUSJOH BSSBZʜ
    ɾΦϓγϣφϧνΣοΫPQUJPOBM

    ɾۭจࣈνΣοΫNJO

    ɾ&NBJMܗࣜνΣοΫFNBJM

    ɾFUDʜ

    View Slide

  7. $%,ͰόϦσʔγϣϯʁ

    View Slide

  8. $%,ͰόϦσʔγϣϯʁ
    IUUQTTQFBLFSEFDLDPNHPUPLDELWBMJEBUJPO

    View Slide

  9. BEE7BMJEBUJPO
    IUUQTEPDTBXTBNB[PODPNDELBQJWEPDT
    DPOTUSVDUT/PEFIUNMBEEXCSWBMJEBUJPOWBMJEBUJPO
    ౉ͨ͠όϦσʔγϣϯ͕
    DELTZOUI࣌ʹ૸Γ·͢

    View Slide

  10. JOUFSGBDF*7BMJEBUJPO
    IUUQTEPDTBXTBNB[PODPNDELBQJWEPDTDPOTUSVDUT*7BMJEBUJPOIUNM

    View Slide

  11. ݺͼग़ؔ͠܎
    ͜ΕΛ࡞੒ͯ͠
    όϦσʔγϣϯϧʔϧΛ࣮૷
    .Z7BMJEBUPSͷΠϯελϯεΛੜ੒
    UIJTOPEFBEE7BMJEBUJPOʹ౉͢

    View Slide

  12. ॻ͍ͯΈͨ 7BMJEBUPS

    w ྫʣ8"'ͷϦʔδϣϯͱείʔϓͷ૊Έ߹ΘͤͷόϦσʔγϣϯ
    ˞BEE7BMJEBUJPJO͠ͳͯ͘΋DELEFQMPZ࣌ʹΤϥʔʹͳΔྫͰ͕͢ɺ͋͘·ͰྫͰ͢

    View Slide

  13. ॻ͍ͯΈͨ 4UBDL

    w ελοΫΫϥεͰόϦσʔγϣϯ 7BMJEBUPS
    Λ౉͢
    ͨͬͨߦʂ
    *GUSZUISPXOFX&SSPS
    ͱ͔΋͍Βͳ͍ʂ

    View Slide

  14. ࣮ߦͯ͠Έͨ DELTZOUI

    .Z7BMJEBUPSWBMJEBUF
    Ͱ
    SFHJPO͕zVTFBTUzͰͳ͍ͱΤϥʔʹ͢ΔΑ͏όϦσʔγϣϯͯ͋͠Δ
    &SSPS7BMJEBUJPOGBJMFEXJUIUIFGPMMPXJOHFSSPST
    <$EL"EE7BMJEBUJPO4UBDL>3FHJPONVTUCFVTFBTUXIFO$-06%'30/5

    View Slide

  15. ෳ਺Τϥʔͷݕ஌
    w ໭Γ஋͕TUSJOH<>ͳͷͰɺෳ਺ͷΤϥʔΛݕ஌ɾग़ྗͰ͖Δ
    &SSPS7BMJEBUJPOGBJMFEXJUIUIFGPMMPXJOHFSSPST
    <$EL"EE7BMJEBUJPO4UBDL>5FTU&SSPS
    <$EL"EE7BMJEBUJPO4UBDL>5FTU&SSPS
    ʢ࢖༻ྫʣ
    ελοΫʹ౉ͨ͠֎෦ύϥϝʔλ
    Ͱҧ൓ͨ͠ύϥϝʔλΛશ෦ग़ྗ

    View Slide

  16. "84$%,ͱ;PEΛ׆༻ͨ͠
    όϦσʔγϣϯύλʔϯूʁ

    View Slide

  17. $%,ͷ7BMJEBUJPOʹ
    ;PEΛ׆༻ͯ͠Έ·ͨ͠

    View Slide

  18. ίʔυߏ੒
    MJC
    ᵓᴷᴷBQQSVOOFSTQFDUZQFUT
    ᵓᴷᴷDEL[PEWBMJEBUJPOQBUUFSOTTUBDLUT
    ᵓᴷᴷDPO
    fi
    HUT
    ᵓᴷᴷTUBDLJOQVUUT
    ᵋᴷᴷTUBDLWBMJEBUPSUT
    ࠷ޙʹ࿩͢΍ͭ
    ελοΫΫϥε
    7BMJEBUPSΫϥε
    ελοΫʹ౉͢όϦσʔτର৅ύϥϝʔλ
    ;PEͰεΩʔϚఆٛ

    View Slide

  19. ελοΫΫϥε
    7BMJEBUPSͷΠϯελϯεΛੜ੒ͯ͠
    BEE7BMJEBUJPOʹ౉͢

    View Slide

  20. 7BMJEBUPSΫϥε
    ;PEͰόϦσʔτ
    TUBDL*OQVU4DIFNBม਺͕ޙͰ
    ఆٛ͢Δ;PEεΩʔϚม਺

    View Slide

  21. ;PEεΩʔϚܕ UZQF

    εΩʔϚ͔Βύϥϝʔλ༻
    DPO
    fi
    Hͷܕ͕ు͚Δʂ
    όϦσʔγϣϯϧʔϧ

    View Slide

  22. DPOGJH ύϥϝʔλ

    ;PEεΩʔϚ͔Β
    ు͍ͨܕΛ࢖͍ճ͠

    View Slide

  23. ͔͜͜Β

    View Slide

  24. ࣮ࡍͷόϦσʔγϣϯύλʔϯ
    ʹೖΓ·͢

    View Slide

  25. ;PEεΩʔϚͱDPOGJHΛ
    ม͍͖͑ͯ·͢
    ʢελοΫΫϥεͱ7BMJEBUPSΫϥε͸ݻఆʣ

    View Slide

  26. όϦσʔγϣϯύλʔϯ
    w ᶃجຊతͳόϦσʔγϣϯ
    w ᶄศརͳόϦσʔγϣϯ
    w ᶅਖ਼نදݱͳόϦσʔγϣϯ
    w ᶆΧελϜͳόϦσʔγϣϯ DVTUPN

    w ᶇΧελϜͳόϦσʔγϣϯ SF
    fi
    OF

    View Slide

  27. ᶃجຊతͳόϦσʔγϣϯ

    View Slide

  28. ᶃجຊతͳόϦσʔγϣϯ
    ܕ TUSJOH OVNCFS FUDʜ

    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  29. ᶃجຊతͳόϦσʔγϣϯ
    ࠷େ஋
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  30. ᶃجຊతͳόϦσʔγϣϯ
    lEFWzͰ࢝·ͬͯ
    l4UBDLzͰऴΘΔ
    lHPUPlΛؚΉ
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  31. ᶃجຊతͳόϦσʔγϣϯ
    Ҏ্ʢؚΉʣ
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  32. ᶃجຊతͳόϦσʔγϣϯ
    ΑΓେ͖͍
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  33. ᶃجຊతͳόϦσʔγϣϯ
    ͷഒ਺
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  34. ᶃجຊతͳόϦσʔγϣϯ
    DPO
    fi
    HUT

    View Slide

  35. ᶃجຊతͳόϦσʔγϣϯ
    Θ͟ͱΤϥʔʹ͢Δ

    View Slide

  36. ᶃجຊతͳόϦσʔγϣϯ
    &SSPS7BMJEBUJPOGBJMFEXJUIUIFGPMMPXJOHFSSPST
    \JTTVFT<
    \[email protected] WBMJEBUJPO\TUBSUT8JUIEFW^ NFTTBHF*OWBMJEJOQVUNVTUTUBSUXJUIaEFWa QBUI<TUBDL/BNF>^
    \[email protected] WBMJEBUJPO\FOET8JUI4UBDL^ NFTTBHF*OWBMJEJOQVUNVTUFOEXJUIa4UBDLa QBUI<TUBDL/BNF>^
    \[email protected] WBMJEBUJPO\JODMVEFTHPUP^ NFTTBHF*OWBMJEJOQVUNVTUJODMVEFaHPUPa QBUI<TUBDL/BNF>^
    \[email protected] NJOJNVN UZQFOVNCFS JODMVTJWFUSVF FYBDUGBMTF NFTTBHF/VNCFSNVTUCFHSFBUFSUIBOPSFRVBM
    UP QBUI<EFTJSFE$PVOU>^
    \[email protected] NJOJNVN UZQFOVNCFS JODMVTJWFGBMTF FYBDUGBMTF NFTTBHF/VNCFSNVTUCFHSFBUFSUIBO QBUI
    <DQV>^
    > OBNF;PE&SSPS^
    DELTZOUI

    View Slide

  37. ᶄศརͳόϦσʔγϣϯ

    View Slide

  38. ᶄศརͳόϦσʔγϣϯ
    63-ܗࣜ
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  39. ᶄศརͳόϦσʔγϣϯ
    &.BJMܗࣜ
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  40. ᶄศརͳόϦσʔγϣϯ
    *1ܗࣜ
    *1W *1WͲͪΒ΋ରԠ

    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  41. ᶄศརͳόϦσʔγϣϯ
    DPO
    fi
    HUT

    View Slide

  42. ᶄศརͳόϦσʔγϣϯ
    Θ͟ͱΤϥʔʹ͢Δ

    View Slide

  43. ᶄศརͳόϦσʔγϣϯ
    &SSPS7BMJEBUJPOGBJMFEXJUIUIFGPMMPXJOHFSSPST
    \JTTVFT<
    \WBMJEBUJPOVSM [email protected] NFTTBHF*OWBMJEVSM QBUI<JODPNJOH8FCIPPL6SM>^
    \WBMJEBUJPOFNBJM [email protected] NFTTBHF*OWBMJEFNBJM QBUI<TFOEFS"EESFTT>^
    \WBMJEBUJPOJQ [email protected] NFTTBHF*OWBMJEJQ QBUI<JQ8IJUF-JTU >^
    \WBMJEBUJPOJQ [email protected] NFTTBHF*OWBMJEJQ QBUI<JQ8IJUF-JTU >^
    > OBNF;PE&SSPS^
    DELTZOUI

    View Slide

  44. ᶅਖ਼نදݱͳόϦσʔγϣϯ

    View Slide

  45. ᶅਖ਼نදݱͳόϦσʔγϣϯ
    ਖ਼نදݱDSPO
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  46. ᶅਖ਼نදݱͳόϦσʔγϣϯ
    ਖ਼نදݱ"3/ 4/45PQJD

    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  47. ᶅਖ਼نදݱͳόϦσʔγϣϯ
    ਖ਼نදݱ"3/ ౦ژϦʔδϣϯͷ4/45PQJD

    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  48. ᶅਖ਼نදݱͳόϦσʔγϣϯ
    ਖ਼نදݱ"3/ 4όέοτˡӳࣈখจࣈͱ͔

    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  49. ᶅਖ਼نදݱͳόϦσʔγϣϯ
    DPO
    fi
    HUT

    View Slide

  50. ᶅਖ਼نදݱͳόϦσʔγϣϯ
    Θ͟ͱΤϥʔʹ͢Δ

    View Slide

  51. ᶅਖ਼نදݱͳόϦσʔγϣϯ
    &SSPS7BMJEBUJPOGBJMFEXJUIUIFGPMMPXJOHFSSPST
    \JTTVFT<
    \WBMJEBUJPOSFHFY [email protected] NFTTBHF*OWBMJE QBUI<TDIFEVMF&YQSFTTJPO>^
    \WBMJEBUJPOSFHFY [email protected] NFTTBHF*OWBMJE QBUI<TOT5PQJD"SO>^
    \WBMJEBUJPOSFHFY [email protected] NFTTBHF*OWBMJE QBUI<TOT5PQJD5PLZP"SO>^
    \WBMJEBUJPOSFHFY [email protected] NFTTBHF*OWBMJE QBUI<CVDLFU"SO>^
    > OBNF;PE&SSPS^
    DELTZOUI

    View Slide

  52. ᶆΧελϜͳόϦσʔγϣϯ
    DVTUPN

    View Slide

  53. ᶆΧελϜͳόϦσʔγϣϯ DVTUPN

    ࣗલͷܕఆٛ
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  54. ᶆΧελϜͳόϦσʔγϣϯ DVTUPN

    DPO
    fi
    HUT

    View Slide

  55. ᶆΧελϜͳόϦσʔγϣϯ DVTUPN

    ΤσΟλͰܕΤϥʔݕ஌
    εϖʔε࿙Ε

    View Slide

  56. ᶆΧελϜͳόϦσʔγϣϯ DVTUPN

    ΤσΟλͰΧʔιϧ౰ͯΔͱܕ৘ใग़ྗ

    View Slide

  57. ᶇΧελϜͳόϦσʔγϣϯ
    SFGJOF

    View Slide

  58. ᶇΧελϜͳόϦσʔγϣϯ SFGJOF

    ࠨɿೖྗՄೳ஋ͷεΩʔϚఆٛɿVOJPO
    ӈɿΧελϜͳόϦσʔγϣϯϩδοΫ εϖοΫ૊Έ߹Θͤ
    ఆٛSF
    fi
    OF
    ;PEεΩʔϚܕ BQQSVOOFSTQFDUZQFUT

    View Slide

  59. ᶇΧελϜͳόϦσʔγϣϯ SFGJOF

    ΧελϜϩδοΫΛఆٛ SF
    fi
    OF
    ͨ͠εΩʔϚΛࢦఆ
    ;PEεΩʔϚܕ TUBDLJOQVUUT

    View Slide

  60. ᶇΧελϜͳόϦσʔγϣϯ SFGJOF

    DPO
    fi
    HUT

    View Slide

  61. ᶇΧελϜͳόϦσʔγϣϯ SFGJOF

    ΤσΟλͰΧʔιϧ౰ͯΔͱೖྗՄೳ஋͕ग़ྗ
    SF
    fi
    OFͰ͸ͳ͘VOJPOͷػೳ

    View Slide

  62. ᶇΧελϜͳόϦσʔγϣϯ SFGJOF

    ΤσΟλͰೖྗ஋ͷิ׬͕Մೳ
    SF
    fi
    OFͰ͸ͳ͘VOJPOͷػೳ

    View Slide

  63. ᶇΧελϜͳόϦσʔγϣϯ SFGJOF

    Θ͟ͱҧ൓͢Δ૊Έ߹ΘͤΛఆٛ

    View Slide

  64. ᶇΧελϜͳόϦσʔγϣϯ SFGJOF

    &SSPS7BMJEBUJPOGBJMFEXJUIUIFGPMMPXJOHFSSPST
    \JTTVFT<
    \DPEFDVTUPN NFTTBHF*OWBMJE$16BOE.FNPSZDPNCJOBUJPO QBUI<BQQ3VOOFS4QFD>^
    > OBNF;PE&SSPS^
    DELTZOUI
    SF
    fi
    OFʹΑΔΧελϜͳόϦσʔγϣϯʂ

    View Slide

  65. όϦσʔγϣϯύλʔϯ
    w ᶃجຊతͳόϦσʔγϣϯ
    w ᶄศརͳόϦσʔγϣϯ
    w ᶅਖ਼نදݱͳόϦσʔγϣϯ
    w ᶆΧελϜͳόϦσʔγϣϯ DVTUPN

    w ᶇΧελϜͳόϦσʔγϣϯ SF
    fi
    OF

    View Slide

  66. "84$%,ͱ;PEͰ
    όϦσʔγϣϯ͍͖ͯ͠·͠ΐ͏

    View Slide

  67. ࢀߟɿ(JU)VC ࠓ೔ͷίʔυ

    w DEL[PEWBMJEBUJPOQBUUFSOT
    ‣ IUUQTHJUIVCDPNHPUPLDEL[PEWBMJEBUJPOQBUUFSOT

    View Slide

  68. ࢀߟɿϒϩάهࣄ าͷςοΫ

    w "84$%,ͰόϦσʔγϣϯΛߦ͏ BEE7BMJEBUJPO

    ‣ IUUQTHPUPLIBUFOBCMPHDPNFOUSZDELBEEWBMJEBUJPO
    w 5ZQF4DSJQUͷ$%,ελοΫΛ;PEͰόϦσʔγϣϯ͢Δ
    ‣ IUUQTHPUPLIBUFOBCMPHDPNFOUSZUTDEL[PEWBMJEBUJPO
    w $%,ͷ֎෦ύϥϝʔλʹܕ͚ͩͰͳ੍͘໿΋͔͚Δ
    ‣ IUUQTHPUPLIBUFOBCMPHDPNFOUSZDELQBSBNFUFSUZQFWBMJEBUJPO

    View Slide

  69. એ఻ɿࣗ࡞"84ؔ࿈πʔϧ044
    w EFMTUBDL"84$MPVE'PSNBUJPOελοΫڧ੍࡟আπʔϧ
    ‣ IUUQTHPUPLIBUFOBCMPHDPNFOUSZEFMTUBDL
    w DMT4όέοτߴ଎࡟আɾۭʹ͢Δπʔϧ όʔδϣχϯάରԠ

    ‣ IUUQTHPUPLIBUFOBCMPHDPNFOUSZDMT
    w MBNWFS-BNCEBϥϯλΠϜόʔδϣϯݕࡧπʔϧ Ϧʔδϣϯԣஅ

    ‣ IUUQTHPUPLIBUFOBCMPHDPNFOUSZMBNWFS

    View Slide

  70. એ఻ɿొஃ
    w ݄
    +"846(43&ࢧ෦
    ‣ ʰ$MPVE8BUDIෳ߹ΞϥʔϜͰ&-#ͷ99Λॏෳͳ͠ݕ஌͠Α͏ͱͨ͠Β͏·͘
    ͍͔ͳ͔ͬͨ࿩ʱ
    w ໦
    d"84%FW%BZ5PLZP ೥࿈ଓ

    ‣ ʰ"84$%,ͰֶͿ(P'σβΠϯύλʔϯʙ*B$ʹ΋ίʔυઃܭʙʱ

    View Slide

  71. 5IBOL:PV
    LHPUP าͷςοΫ

    View Slide