モジュラモノリスで表現する複雑なドメイン領域と境界 / Expressing complex domain regions and boundaries with 'modular monoliths

51f4d2341131b6b9bfa996bdb9b8dfa8?s=47 showmant
October 17, 2020

モジュラモノリスで表現する複雑なドメイン領域と境界 / Expressing complex domain regions and boundaries with 'modular monoliths

51f4d2341131b6b9bfa996bdb9b8dfa8?s=128

showmant

October 17, 2020
Tweet

Transcript

  1. 4DBMB.BUTVSJ4IPNB5BLFP TIPXNBOU "MQ *OD &YQSFTTJOHDPNQMFYEPNBJO SFHJPOTBOECPVOEBSJFTXJUI NPEVMBSNPOPMJUIT

  2. "CPVUNF 4IPNB5BLFP"MQ *OD w(SBEVBUFEGSPN%FQBSUNFOUPG*OGPSNBUJPO4DJFODFBOE&OHJOFFSJOH w'PSNFSTPGUXBSFFOHJOFFSBU$ZCFSBHFOU"EUFDI4UVEJP w$PGPVOEFSBOE%FWFMPQNFOUEJSFDUPSBU"MQ *OD w-PWF3BNFO 3BNFO 3BNFO

    3BNFO+JSP /1# .-# /#"BOE4DBMB w5XJUUFSTIPXNBOU@ ϥʔϝϯ͕ڰ͏΄Ͳ޷͖ͳΞϧϓגࣜձࣾɺڞಉ૑ۀऀͷ஛ඌਖ਼അ TIPXNBOU
  3. "CPVU"MQ *OD 'PVOEFEJO w FNQMPZFFTJODMVEJOHFOHJOFFST w %FMJWFSJOH4VCTDSJQUJPONBOBHFNFOUTPGUXBSF 4DBMFCBTF 4BB4 

    w 6TF%%% 4DBMB $MFBO"SDIJUFDUVSF 5ZQF4DSJQU 3FBDU Ξϧϓגࣜձࣾ͸໊ͷΤϯδχΞ͕ࡏ੶͠ɺαϒεΫϦϓγϣϯ؅ཧͷ4BB4Λఏڙ %%%ɺ4DBMBΛ࠾༻͠ϑϩϯτΤϯυ͸3FBDUɺ5ZQF4DSJQUͰ࣮૷
  4. 5PEBZT5PQJD w 8IJDIEPNBJOBSFBTEPFT4DBMFCBTFIBOEMF  w 8IBUXFSFTPNFQSPCMFNTXF`WFFODPVOUFSFEXIJMFEFWFMPQJOH 4DBMFCBTF  w 8IZEJEXFBEPQUNPEVMBSNPOPMJUIT

     w )PXEJEXFEFTJHOUIFNPEVMBSNPOPMJUIT  w )PXBSFUIFNPEVMBSNPOPMJUITXPSLJOHTPGBS  w 8IBUJTUIFOFYUTUFQ ຊ೔ͷΞδΣϯμ͸ΞʔΩςΫνϟͷ࿩ͳͷͰɺ૊৫΍υϝΠϯྖҬʹ͍ͭͯઆ໌͠ͳ͕Β ϞδϡϥϞϊϦεʹ͍͓ͭͯ࿩͍ͤͯͨͩ͘͞ɻ
  5. 4DBMFCBTF 8IBUJT4DBMFCBTF w 4VCTDSJQUJPO#VTJOFTT&⒏DJFODZ3FWFOVF0QUJNJ[BUJPO1MBUGPSN w $FOUSBMJ[FENBOBHFNFOUPGDPNQMFYQSPEVDUEFTJHO DPOUSBDUT  CJMMJOH JOWPJDF

    FUDJOUIFTVCTDSJQUJPOCVTJOFTT w .BYJNJ[FQSPpUTCZSFEVDJOHPQFSBUJPOBMDPTUTBOEJODSFBTJOH CVTJOFTTqFYJCJMJUZ 4DBMFCBTF͸αϒεΫϦϓγϣϯϏδωεͷޮ཰Խɺ࠷దԽϓϥοτϑΥʔϜɻ αϒεΫϦϓγϣϯʹ͓͚Δෳࡶͳ঎඼ɾܖ໿ͷ؅ཧٴͼൃੜ͢Δ੥ٻΛ؅ཧ͠·͢ɻ
  6. 8IBUXFTPMWF w .BOBHFDPNQMFYQSPEVDUDBUBMPHT w .BOBHFNFOUPGDPOUSBDUEJWFSTJUZBOETUBUVT w $BMDVMBUJPOBOENBOBHFNFOUPGCJMMJOHBNPVOUBDDPSEJOHUPUIF WBSJFUZPGDPOUSBDUT ঎඼ͷෳࡶੑͷ؅ཧɾܖ໿ͷଟ༷ੑ΍ঢ়ଶͷ؅ཧɾ͔ͦ͜Βੜ·ΕΔ੥ٻ΍ձܭͷ؅ཧΛ୲͏ 4DBMFCBTF

  7. %PNBJO"SFBXFDPWFS ѻ͏ྖҬ͸όοΫΦϑΟεͷେ͖ͳ෦෼ͱͳΔ $POUSBDU $VTUPNFS 1SPEVDU $BUBMPH #JMMJOH *OWPJDF4BB4 "VUIPSJUZ "VUIPSJ[BUJPO

    "DDPVOUJOH "OBMZUJDT 4DBMFCBTF
  8. #FGPSF.PEVMBS.POPMJUI w 4QFFEJTUIFNPTUJNQPSUBOUUIJOHGPSBTUBSUVQ w "MUIPVHIJUXBTQSFEJDUBCMFUIBUUIFSFXFSFNVMUJQMFDPOUFYUTJOUFSNT PGCVTJOFTTTDPQFBOEUIBUUIFDPOUFYUTDPVMECFEJWJEFEVQJOUIF GVUVSF JUXBTEFDJEFEUIBUUIF.POPSFQP.POPMJUIXBTUIFCFTU PQUJPOCBTFEPOUIFCVTJOFTTBOEPSHBOJ[BUJPOBMQIBTFT w

    6TF$MFBO"SDIJUFDUVSFBOETCUUPCVJMEBOEPQFSBUFQSPKFDU EFQFOEFODJFT ૑ۀظ͸౰વϞϊϨϙϞϊϦεͰ͸͡·ΓɺTCUΛ͔ͭͬͨ$MFBO"SDIJUFDUVSFΛߏங 4UBSUXJUI.POPSFQP.POPMJUI
  9. 8IZEJEUIFBSDIJUFDUVSFOFFEUPFWPMWF 5PJNQSPWFEPNBJOEFTJHO w &BDIEPNBJOJTDPNQMFY4DBMFCBTFEFBMTXJUIEPNBJOTUIBUJOUFSBDUXJUIFBDI PUIFS w 5IFSFXBTBOJODSFBTFJOUIFOVNCFSPGNPEFMTXJUIDMFBSMZEJ⒎FSFOUDPOUFYUT  TVDIBTVTBHFNFBTVSFNFOUGPSCJMMJOHDBMDVMBUJPOT BVUIPSJ[BUJPOBOE

    BVUIFOUJDBUJPOBTBDPNNPOCBTJT5IFZBSFUJHIUMZDPVQMFEPWFSUJNFXJUIPVU DPOTUSBJOUT w *UTEJ⒏DVMUUPWFSJGZJGJUTBHPPENPEFMUPUJHIUMZDPVQMF"NPOPMJUIJDXPVMECFBO VOFOGPSDFBCMFDPOTUSBJOUBOEDBOPOMZCFDFOTPSFECZSFWJFX w $POUJOVPVTTFBSDIGPSUIFSJHIUEPNBJOEFTJHOBOEDPOUFYUCPVOEBSJFTBSF UIFNPTUJNQPSUJOPSEFSUPEFMJWFSDPOUJOVPVTJNQSPWFNFOU ͳͥɺΞʔΩςΫνϟͷਐԽ͕ٻΊΒΕ͔ͨɻҟͳΔίϯςΩετΛѻ͏υϝΠϯ͕૿͑ͨɻίϯςΩετڥքΛ ҙࣝͨ͠υϝΠϯઃܭ͕ܧଓతͳվળͷσϦόϦʔʹ͓͍ͯඇৗʹॏཁͰ͋Δͱߟ͑Δɻ
  10. 8IZOPU.JDSPTFSWJDFT 5PPNBOZUIJOHTUPDPOTJEFS UPPEJ⒏DVMUGPSTUBSUVQT w "EWBOUBHF w %FQMPZNFOU*OEFQFOEFODF w 1SFWFOUUIFDPOUFYUPGEPNBJOTGSPNHFUUJOHNJYFEVQXJUIFBDIPUIFS w

    *NQSPWFE1SPEVDUJWJUZBOE4QFFE w 5IJOHTUPDPOTJEFSXJUI.JDSPTFSWJDFTGPSFYBNQMF w JOUFSTFSWJDFDPNNVOJDBUJPO EJTUSJCVUFEPSDPNQFOTBUJOHUSBOTBDUJPO  NPOJUPSJOHɺ$*$% σϓϩΠͷಠཱੑ΍ίϯςΩετڥքͷڧ੍తͳҙࣝ෇͚͸Ͱ͖Δ͕ɺߟྀ͠ͳ͚Ε͹ͳΒͳ͍఺͕ଟ͍
  11. 8IZOPU.JDSPTFSWJDFT 5PPNBOZUIJOHTUPDPOTJEFS UPPEJ⒏DVMUGPSTUBSUVQT w 'PS6T w %PFTO`UNBUDIUIFTJ[FBOECVTJOFTTQIBTFPGUIFPSHBOJ[BUJPO w /PCFOFpUTPGBSUPIBWJOHUIFEFQMPZNFOUCFJOEFQFOEFOU w

    5IFCFOFpUXFXBOUUPSFBQJTUPTQMJUUIFDPOUFYUBOE DPOTUSBJODPOUFYUEFQFOEBODZ զʑͷ૊৫ɾࣄۀϑΣʔζͰ͸ίϯςΩετͷڥքΛ෼ׂ͠ɺґଘʹ੍໿Λ΋ͨͤΔ͜ͱͷΈ͕ඞཁͳਐԽͩͬͨ
  12. 4JOHMF3FQPTJUPSZ 4JOHMF"QQMJDBUJPO 8IZ$IPPTF.PEVMBS.POPMJUI 8IBUJTJU w "NPEVMBSNPOPMJUIJTBO BSDIJUFDUVSFUIBUBJNTUP JNQSPWFUIFNPEVMBSJUZPGUIF TZTUFN MJLFBNJDSPTFSWJDF

     XIJMFIBWJOHPOMZPOFUFTUBOE EFQMPZNFOUQJQFMJOF MJLFB NPOPMJUI *UEPFTUIJTCZ EJWJEJOHUIFNPOPMJUIBQQMJDBUJPO JOUPNPEVMFT TVDIBTBEPNBJO NPEFM FUD ϞδϡϥϞϊϦε͸୯ҰσϓϩΠΛҡ࣋ͭͭ͠υϝΠϯϞσϧͳͲΛ୯Ґͱͯ͠Ϟδϡʔϧ෼ׂ͢Δ͜ͱͰ Ϟδϡʔϧੑͷ޲্Λૂ͏ΞʔΩςΫνϟ $POUFYU" $POUFYU#
  13. 8IZ$IPPTF.PEVMBS.POPMJUI w #VJMEBQQMJDBUJPOTUIBUDBODPOTDJPVTMZBOEDPNQVMTJWFMZQFSGPSN DPOUFYUTQMJUUJOH w 4UBSUJOHTNBMMBOEqFYJCMFJTBQQSPQSJBUFGPSUIFTJ[FPGBUFBNT USZ w FBTZUPEFWFMPQBNJDSPTFSWJDFBTBOFYUFOTJPOPGUIJTQSPKFDU ίϯςΩετ෼ׂΛҙࣝతʹߦ͑Δɺখ͞ͳτϥΠΛߦ͑ΔɺϚΠΫϩαʔϏεԽΛݟਾ͑ͨ։ൃ͕ߦ͑Δ

  14. )PX%JE8F%FTJHO*U 4DBMFCBTFTBQQMJDBUJPOMBZFST ґଘੑٯసͷݪଇΛద༻্ͯ͠ҐϨΠϠʔ͔ΒԼҐϨΠϠʔ΁ͷࢀরͷΈՄೳ Secondary Adapter UseCase Domain Primary Adapter Shared

    Primary Adapter Shared SecondaryAdapter Shared Library Shared Domain Only the code from the top to the bottom layer can be referenced
  15. 1SJNBSZBOE4FDPOEBSZ"EBQUFS w 1SJNBSZ"EBQUFS w UIFBDUPSUIBUESJWFTUIFBQQMJDBUJPO w &BTJMZDIBOHFBDUPSTBOESVOCVTJOFTTMPHJD w 4FDPOEBSZ"EBQUFS w

    ESJWFOCZUIFBQQMJDBUJPO w FJUIFSHFUUIFTPMVUJPOPSTJNQMZJOGPSNJU ϓϥΠϚϦΞμϓλ͸)UUQ΍$POTVNFSͳͲͷΠϯλʔϑΣʔεΛ࣮૷ ηΧϯμϦ͸%#ΞΫηε΍֎෦αʔϏεͱͷ࿈ܞΛ୲͍ͬͯΔ )PX%JE8F%FTJHO*U
  16. 1SFQBSFBOTCUQSPKFDUGPSFBDIDPOUFYU TCUϓϩδΣΫτΛίϯςΩετ͝ͱʹ༻ҙ Secondary Adapter UseCase Domain Primary Adapter Shared Primary

    Adapter Shared Secondary Adapter Shared Library Shared Domain AuthN Ctx AuthZ Ctx Subscription Ctx Invoice Ctx )PX%JE8F%FTJHO*U
  17. 1SFQBSF.POPMJUI"EBQUFSMBZFSTGPSTZTUFNFOUSZQPJOUT ༻ҙͨ͠ϓϩδΣΫτΛϞϊϦεΞμϓλʹґଘͤ͞Δ MonolithAdapter Secondary Adapter UseCase Domain Primary Adapter Shared

    Primary Adapter Shared Secondary Adapter Shared Library Shared Domain AuthN Ctx AuthZ Ctx Subscription Ctx Invoice Ctx )PX%JE8F%FTJHO*U
  18. 8IZEPFTUIF.POPMJUI"EBQUFSSFGFSFODFBMMUIFPUIFSBEBQUFST ϞϊϦεΞμϓλ͸σϓϩΠ୯Ґͷू໿ͱɺίϯςΩετؒ௨৴Λ࣮ݱ͢ΔͨΊʹ͋Δ MonolithAdapter AuthN Ctx AuthZ Ctx Subscription Ctx Invoice

    Ctx Secondary Adapter UseCase Domain Primary Adapter Shared Primary Adapter Shared Secondary Adapter Shared Library Shared Domain w 5PHSPVQUIFNUPHFUIFSBTBVOJUPG EFQMPZNFOU w 5PJNQMFNFOUJOUFSDPOUFYU DPNNVOJDBUJPO )PX%JE8F%FTJHO*U
  19. CVJMETCU .POPMJUI"QJΞμϓλʔʹ֤ίϯςΩετͷ)UUQ"EBQUFSΛґଘ͍ͤͯ͞Δ )PX%JE8F%FTJHO*U

  20. TCUNBLFTJUFBTZUPNPEVMBSJ[FDPOUFYUT w *UXBTWFSZFBTZUPDPOTPMJEBUFUIFEFQMPZNFOUVOJUTXIJMFNBJOUBJOJOH DPOUFYUCPVOEBSJFT w TCUTSFQSFTFOUBUJPOPGQSPKFDUEJWJTJPOJTBNB[JOH TCUͷදݱྗ͕ͱʹ͔͘ૉ੖Β͘͠୯ҰσϓϩΠΛอͪͳ͕ΒɺϓϩδΣΫτ෼ׂΛඇৗʹ؆୯ʹ࣮ࢪͰ͖ͨ )PX%JE8F%FTJHO*U

  21. )PXUPEFBMXJUIJOUFSDPOUFYUDPNNVOJDBUJPO w 6TFBVUPHFOFSBUFEH31$CZ4DBMB1#BTBOJOUFSDPOUFYU DPNNVOJDBUJPO w )PXFWFS UIF.PEVMBS.POPMJUIEPFTOPUBDUVBMMZDPNNVOJDBUF XJUIH31$CVUSFQMBDFTJUXJUIKVTUBGVODUJPODBMMJO%* H31$Λ࢖ͬͨίϯςΩετؒ௨৴ͷ४උΛ͢Δ͕ɺϞδϡϥϞϊϦεͰ͸௨ৗͷؔ਺ݺͼग़͠ʹࠩ͠ସ͑Δ )PX%JE8F%FTJHO*U

  22. %FpOFUIFJOUFSGBDFPGJOUFSTFSWJDFDPNNVOJDBUJPOCZQSPUPCVG *%- ίϯςΩετؒ௨৴ʹ੍໿Λ΋͍ͨͤͯͳ͍ͷͰɺڞ௨4FDPOEBSZ"EBQUFSʹQSPUPͷఆٛΛ഑ஔ͢Δ͜ͱͰ શίϯςΩετ͔ΒࢀরՄೳͳঢ়ଶʹ͢Δ There are currently no restrictions on

    inter-service communication. The protocol buffer's definition is placed in a shared SecondaryAdapter so that it can be referenced from all contexts. Secondary Adapter UseCase Domain Primary Adapter Shared Primary Adapter Shared SecondaryAdapter Shared Library Shared Domain )PX%JE8F%FTJHO*U
  23. %FpOFUIFJOUFSGBDFPGJOUFSTFSWJDFDPNNVOJDBUJPOCZQSPUPCVG *%- ϓϩτίϧόοϑΝʔͷఆٛྫ )PX%JE8F%FTJHO*U

  24. w 6TF4DBMB1#UPBVUPNBUJDBMMZHFOFSBUF4DBMBDBTFDMBTTFTBOE GVODUJPOJOUFSGBDFTGSPNQSPUPCVG w 8FEFpOF31$JOUFSGBDFTBT3FNPUF'VODUJPO 4DBMB1#Λ࢖͏͜ͱͰQSPUPCVG͔ΒࣗಈͰΠϯλʔϑΣʔε͕ग़ྗ͞ΕΔɻ 31$ΠϯλʔϑΣʔεΛ3FNPUF'VODUJPOͱݺশ͢Δ )PX%JE8F%FTJHO*U

  25. ࣮૷͸H31$ͷϓϥΠϚϦΞμϓλʹߦ͏ɻଞͷϨΠϠʔ΍ಉҰϨΠϠʔͷଞͷΤϯτϦʔϙΠϯτ͔Β ࢀর͢Δ͜ͱ͸Ͱ͖ͳ͍ RemoteFunction is implemented here. Because an implementation called

    via gRPC implementation is here, reference from other layers is not allowed. MonolithAdapter AuthNCtx AuthZCtx SubscriptionCtx InvoiceCtx Secondary Adapter UseCase Domain Http Adapter Shared Primary Adapter Shared Secondary Adapter Shared Library Shared Domain Batch Adapter Kinesis Adapter gRPC Adapter 8IFSFEJEXFJNQMFNFOUUIF3FNPUFGVODUJPO )PX%JE8F%FTJHO*U
  26. *NQMFNFOUGVODUJPOTPOUIFH31$BEBQUFSPGFBDIDPOUFYUT ࣗಈੜ੒͞Εͨ3FNPUF'VODUJPOͷ࣮૷Λ֤ίϯςΩετͷH31$ΞμϓλʔͰߦ͏ )PX%JE8F%FTJHO*U

  27. 4UVC DMJFOU ͸ࣗಈͰੜ੒͞ΕΔ͕ɺϞδϡϥϞϊϦεͰ͸H31$Λ࣮ࡍʹ࢖͏͜ͱ͸ͳ͍ͷͰ 3FNPUF'VODUJPOʹPWFSSJEFͯࠩ͠͠ସ͑Δ w 5IF4UVC BVUPNBUJDBMMZ HFOFSBUFE DPOUBJOTBO JNQMFNFOUBUJPOPGH31$

    DPNNVOJDBUJPO w 3FQMBDJOHUIFJNQMFNFOUBUJPO PGBH31$DBMMXJUIBTJNQMF GVODUJPODBMMCZPWFSSJEJOHJU "MUIPVHINFUIPETBSFPWFSSJEEFOUPTJNQMJGZUIFFYQMBOBUJPO  UIFSFJTBXBZXFEPOUIBWFUPPWFSSJEFFWFSZUJNF SFNPUF'VODUJPOJTBEEFE *OKFDUSFNPUFGVODUJPOUPTUVC )PX%JE8F%FTJHO*U
  28. 3FQMBDFUIF4UVCJNQMFNFOUBUJPOJONPOPMJUI$UY ϞϊϦείϯςΩετͷΈ͕͢΂ͯͷڥքΛ·͙ͨ͜ͱ͕Ͱ͖ΔͷͰɺ ڞ௨ηΧϯμϦΞμϓλʹ͋ΔΠϯλʔϑΣʔεʹରͯ͠ɺ֤ίϯςΩετͷH31$Ξμϓλʹઃஔ͞Ε࣮ͨ૷Λ%*͢Δ Monolith context is able to cross the

    boundaries of each context. the Implementation is injected in the gRPC adapter for each context into an auto-generated RemoteFunction in the Shared SecondaryAdapter. Secondary Adapter UseCase Domain Http Shared Http Shared Secondary Adapter Shared Library Shared Domain Batch SharedBatch Kinesis Shared Kinesis gRPC Shared gRPC Monolith Adapter )PX%JE8F%FTJHO*U
  29. ϞϊϦείϯςΩετͰηΧϯμϦΞμϓλʔʹࣗಈੜ੒͞Εͨ3FNPUF'VODUJPOʹର࣮ͯ͠૷ͷ%*Λߦ͏ 8IFSFEJEXFJNQMFNFOUUIF3FNPUFGVODUJPO )PX%JE8F%FTJHO*U

  30. $BMMJOHTFSWJDFTBDIJFWFJOUFSDPOUFYUCZSVOOJOH4UVC ݺͼग़͠ݩ͸4UVCΛ࣮ߦ͢Δ͜ͱͰαʔϏεؒ௨৴Λ࣮ݱͰ͖Δ )PX%JE8F%FTJHO*U

  31. $MBTTMPDBUJPOPGUIFJOUSPEVDFEJNQMFNFOUBUJPO ঺հ࣮ͨ͠૷Λ൓өͨ͠ϑΝΠϧ഑ஔ͸্هͷΑ͏ͳΠϝʔδ )PX%JE8F%FTJHO*U

  32. %BUBCBTFBSDIJUFDUVSF w $VSSFOUMZ UIFNJHSBUJPOpMFTBSFQMBDFEJOFBDIDPOUFYU CVUUIFZBSF DPMMFDUFEJOPOFQMBDFCZTZNCPMJDMJOLBOEPQFSBUFEJOPOF%# w 8FBMMPXEBUBNJHSBUJPOBUUIFUJNFPGNJDSPTFSWJDFTDVUPVU ݱঢ়͸ϚΠάϨʔγϣϯϑΝΠϧ͸֤ίϯςΩετʹ഑ஔ͍ͯ͠Δ͕ɺTZNCPMJDMJOLͰ͔ॴʹूΊɺͭͷ%#Ͱӡ༻ɻ ˞ϚΠΫϩαʔϏε੾Γग़࣌͠ͷσʔλҠߦ͸ڐ༰͍ͯ͠Δ

    4JOHMF %# .JHSBUJPOpMFJODPOUFYU# .JHSBUJPOpMFJODPOUFYU$ .POPMJUIDPOUFYU 4ZNCPMJDMJOL .JHSBUF )PX%JE8F%FTJHO*U
  33. )PXJUXPSLTGPSVT 1PTJUJWFT w 4UBSUXJUIBTNBMMTDBMF MPXJNQBDUBSFB w 5SJBMBOEFSSPSJOEFpOJOHCPVOEBSJFTCBTFEPOUIFEJTDVTTJPO w %PNBJONPEFMJOHXJUISFTQFDUUPDPOUFYUCPVOEBSJFT w

    "0QQPSUVOJUZGPS$PSSFDU%PNBJO%FTJHOBOE$POUFYU#PVOEBSJFT Өڹൣғͷগͳ͍ͱ͜Ζ͔Βখ͘͞τϥΠͰ͖Δɻ΍Γͳ͕ΒɺυϝΠϯڥքͷ࠶ఆٛ΋ߦΘΕ͍ͯΔɻ ίϯςΩετڥքΛҙࣝͨ͠υϝΠϯઃܭ΋Ͱ͖ΔΑ͏ʹͳͬͨɻ
  34. )PXJUXPSLTGPSVT 5IJOHTXFOFFEUPDPOTJEFS w "MPUPGCPJMFSQMBUFTJODPNNVOJDBUJPOTBOE%*BDSPTTDPOUFYUT w 5IFSFJTDVSSFOUMZPOMZBTJOHMF%# CVUUIJTXJMMOFFEUPCFTQMJUVQJO UIFGVUVSF ϞϊϨϙϞϊϦεͱൺ΂Ε͹ɺίϯςΩετ௨৴΍%*ͷϘΠϥʔϓϨʔτ͕૿Ճͨ͠ͷ͸ࣄ࣮Ͱ͋Γɺվળ͕ඞཁ ݱࡏ͸%#ӡ༻ʹͳ͍ͬͯΔͷͰ͍ۙকདྷɺ෼ׂ͢Δɻ

  35. $PODMVTJPOBOEPVSOFYUTUFQ w .PEVMBS.POPMJUIJTPOFPGUIFHPPETPMVUJPOTUIBUDBOCFEFWFMPQFEXIJMF DPOTJEFSJOHUIFDPOUFYUCPVOEBSJFT w $PNQBSFEUP.JDSPTFSWJDF ZPVDBOTUBSUXJUIBTNBMMUSZ w TCUBOE4DBMB1#BSFXPOEFSGVM BOEXJUIUIFNJUTFBTZUPBDIJFWF

    w 4DBMFCBTFJTTUJMMHPJOHUPCFBUSJBMBOEFSSPSQSPDFTTPGEPNBJOEFTJHO w *OTPNFDBTFT XFNBZSFWFSUCBDLUP.POPMJUIBHBJO w 8FXBOUUPDBSWFPVUUIFTFSWJDFTUIBUIBWFBTJHOJpDBOUCFOFpUPG NJDSPTFSWJDJOH υϝΠϯઃܭͷࢼߦࡨޡΛ܁Γฦ͢͜ͱʹ͓͍ͯඇৗʹ༗ޮͳखஈͰ͋Δ͕ɺ৔߹ʹΑͬͯ͸ϞϊϦεʹ໭͢͜ͱ΋ ߟ͑ΒΕΔɻ͏·͘ਐΊΒΕɺ૊৫΋੒௕͍͚ͯ͠͹ɺϚΠΫϩαʔϏεԽʹ΋ൺֱత༰қʹਐΊΒΕΔͷͰ͸ͳ͍͔ɻ
  36. "UUIFFOE 4DBMFCBTFΛҰॹʹ։ൃ͍ͨ͠ΤϯδχΞͷํେืू 8&"3&)*3*/(

  37. 3FGFSFODF w )PX4IPQJGZ.JHSBUFEUPB.PEVMBS.POPMJUI w IUUQTXXXJOGPRDPNOFXTTIPQJGZNPEVMBSNPOPMJUI w .PEVMBS.POPMJUI ϞδϡϥʔϞϊϦε ͷهࣄͱ͔৭ʑಡΜͰΈͨ w

    IUUQTSLBHBDPNCMPHSFBEQPTUNPEVMBSNPOPMJUI