https://jsconf.jp/2023/talk/wakamsha-1/
2023年1月から9月にかけて弊社 BtoB web アプリケーションのリアーキテクチャリングプロジェクトにフロントエンドのシステムアーキテクトとして参画し、技術選定から開発メンバーのスキルトランスファー(育成)、果ては包括的な開発プロセスの改善までと幅広く支援してきました(2023年11月現在も進行中)。そこでの奮闘で得た学びと新たに浮き彫りとなった課題についてご紹介します。
wakamshaNaoki YAMADA'SPOUFOESFBSDIJUFDUJOHBOENPOUITPGTUSVHHMFJOTLJMMUSBOTGFSPGEFWFMPQNFOUUFBNϑϩϯτΤϯυϦΞʔΩςΫνϟϦϯάͱ։ൃνʔϜͷεΩϧτϥϯεϑΝʔʹ͓͚Δ9ϲ݄ؒͷฃಆه
View Slide
4BZNZOBNFԶͷ໊ΛݴͬͯΈΖࣗݾհ*OUSPEVDFNZTFMG
wakamshaNaoki YAMADAࢁాथϑϩϯτΤϯυσΟϕϩούʔגࣜձࣾϚωʔϑΥϫʔυϑϩϯτΤϯυਪਐάϧʔϓFrontend DeveloperMoney Forward, Inc.Frontend Forward Group
ΞδΣϯμ"HFOEBϦΞʔΩςΫνϟϦϯάͷΞτϥΠϯٕज़ࢧԉऀͱͯ͠ॏతʹऔΓΜͩ͜ͱʢ+ ࣺ͋͑ͯͯͨ͜ͱʣ0VUMJOFTPGSFBSBSDIJUFDUVSFSJOH8IBUXFGPDVTFEPO XIBUXFEBSFEUPBCBOEPOBTUFDIOJDBMBTTJTUBOUT
ϓϩδΣΫτͷ֓ཁ1SPKFDUPWFSWJFX
RailsͰߏங͞ΕͨΞϓϦέʔγϣϯج൫͔ΒϑϩϯτΤϯυؔ࿈Λશʹ͠࠶࣮͢Δ$PNQMFUFMZTFQBSBUFBOESFJNQMFNFOU'&TUVffGSPNBDPEFCBTFCVJMUXJUI3BJMTϑϩϯτΤϯυ༻ͷϦϙδτϦΛ৽ઃ͠ɺͦ͜Ͱθϩ͔Β࠶࣮͢Δɻظతͳอकӡ༻ʹ͑ΒΕΔΑ͏ϑϩϯτΤϯυͷίʔυϕʔε͓Αͼ։ൃڥΛઃܭ͢ΔɻόοΫΤϯυ API αʔόʔͱͯ͠ͷʹప͢Δɻ$SFBUFBOFXSFQPTJUPSZGPSUIFGSPOUFOEBOESFJNQMFNFOUJUGSPNTDSBUDIUIFSF%FTJHOUIFGSPOUFOEDPEFCBTFBOEEFWFMPQNFOUFOWJSPONFOUUPXJUITUBOEMPOHUFSNNBJOUFOBODFPQFSBUJPOT5IFCBDLFOEJTEFEJDBUFEUPUIF"1*TFSWFS
νʔϜϞμϯͳϑϩϯτΤϯυ։ൃͷߦʹඞཁͳεΩϧΛशಘ͢Δ5FBNTBDRVJSFUIFTLJMMTOFDFTTBSZUPDBSSZPVUNPEFSO'&EFWFMPQNFOUνʔϜϑϩϯτΤϯυͷίʔυϕʔε͓ΑͼڥΛඋ͠ଓ͚ɺྑͳ։ൃମݧͱߴ͍ੜ࢈ੑΛҡ࣋͢ΔͨΊʹࣗͰ͖ͳͯ͘ͳΒͳ͍ɻ5IFUFBNNVTUCFBCMFUPDPOUJOVFUPNBJOUBJOUIFGSPOUFOEDPEFCBTFBOEFOWJSPONFOUBOECFTFMGESJWFOUPNBJOUBJOBHPPEEFWFMPQNFOUFYQFSJFODFBOEIJHIQSPEVDUJWJUZ
ϚωʔϑΥϫʔυ ΫϥυձܭPlus20202݄ϩʔϯνɻ201311݄ʹϩʔϯνͨ͠ʮΫϥυձܭʯͱ͍͏ϓϩμΫτΛϋʔυϑΥʔΫɻෆཁͳίʔυΛ͗མͱͭͭ͠ඞཁͳػೳΛܧ͗ͯ͠ݱࡏʹࢸΔɻ.POFZ'PSXBSE"DDPVOUJOH1MVT
BE + FE
BE FEGraphQL
👨🦰👩🎤 👨💻🧑💻🧑💻🧑💻Product OwnerUI Designer FrontendEngineerEngineersTechSupport
πʔϧϥΠϒϥϦબఆʹ͓͚ΔॿݴϑϩϯτΤϯυΞʔΩςΫνϟͷఏҊίʔσΟϯάϚχϡΞϧͷఏڙίʔυϨϏϡʔϖΞϓϩάϥϛϯάαϯϓϧίʔυͷ࡞ɾఏڙখنͳ࣮etc…ຊ֨తͳ࣮࡞ۀʹܞΘΒͳ͍ɻ͋͘·Ͱʮٕज़ࢧԉऀʯͱ͍͏ཱͪҐஔͰαϙʔτʹప͢ΔɻAdvice on tool and library selectionProposal of front-end architectureProvision of coding manualsCode reviewPair programmingCreation and Provision of sample codeSmall-scale implementationetc…%PO`UFOHBHFJOGVMMTDBMFJNQMFNFOUBUJPOXPSL0OMZQSPWJEFTVQQPSUJOUIFDBQBDJUZPGUIFl5FDIOJDBM"TTJTUBOUz
ॏతʹऔΓΜͩ͜ͱ'PDVTFEFffPSUT
ؙ҉هΛపఈతʹഉআ͢Δ"WPJESPUFNFNPSJ[BUJPO
ؙ҉هୀ۶Ͱۤ௧ͳ͏͑ɺ͙͢ʹʮؙΕʯ͢ΔɻࣄΛڭ͑Δࡍ֩৺ʹߜͬͯ͑Δɻ֩৺͑͞௫ΜͰ͍Εɺͨͱ͑Ε࣮ͯํΛಋ͖ग़ͤΔɻ.FNPSJ[BUJPOJTUFEJPVT QBJOGVM BOERVJDLMZGPSHPUUFO8IFOUFBDIJOH GPDVTPOUIFDPSFPGUIFTVCKFDU*GZPVIBWFUIFDPSF ZPVDBOEFSJWFBOJNQMFNFOUBUJPOQPMJDZFWFOJGZPVGPSHFUJUؙ҉هΛపఈతʹഉআ͢Δը૾Ҿ༻IUUQTXXXBTBIJQSFTTDPNCPPLEFUBJM@MBOH"WPJESPUFNFNPSJ[BUJPO
Ұʹଟ͘ͷπʔϧݟΛಋೖ͠ͳ͍%POPUJOUSPEVDFNBOZUPPMTBOELOPXMFEHFBUPODF
γχΞϨϕϧͷϑϩϯτΤϯυσΟϕϩούʔ 0ਓ5IFSF`TOPTFOJPSMFWFMGSPOUFOEEFWFMPQFS
5IFSF`TBMPUUPMFBSOFWFOJGZPVMJNJUZPVSTFMGUPUIFCBTJDTجૅ͚ͩͰֶͿ͜ͱେʹ͋Δ͋Ε͜Εͱॳख͔Βઅૢͳ͘ಋೖͨ͠ͱ͜ΖͰखʹෛ͑ͳ͘ͳΔͷ໌നɻجૅΛಥ͖٧ΊͯݶքΛ͔֮͑ͯΒಋೖΛݕ౼ͯ͘͠ͳ͍ɻ&WFOJGZPVJOUSPEVDFUIJTPSUIBUGSPNUIFCFHJOOJOH UIJOHTXJMMHFUPVUPGDPOUSPMBOZXBZ*UTOPUUPPMBUFUPDPOTJEFSJOUSPEVDJOHJUPODFZPVWFUIPSPVHIMZJOWFTUJHBUFEUIFCBTJDTBOEGFFMUIFMJNJUT
,OPXMFEHFXJMMCFJOUSPEVDFEJOTUBHFTBDDPSEJOHUPTLJMMMFWFMεΩϧϨϕϧʹԠͯ͡ஈ֊తʹಋೖঢ়ଶཧ useState , useReducer ͔Β࢝ΊΔɻίϯϙʔωϯτͷΓํɺঢ়ଶObjͷཻɺஔ͘Ґஔʹྀ͢ΕϥΠϒϥϦʹཔΒͣͱ͔ͳΓͷͱ͜Ζ·Ͱ࡞ΓࠐΊΔɻ4UBUFNBOBHFNFOUTUBSUTXJUIVTF4UBUFBOEVTF3FEVDFS*GZPV`SFDBSFGVMBCPVUIPXUPDVUPVUDPNQPOFOUT UIFHSBOVMBSJUZPGTUBUFPCKFDUT BOEXIFSFUPQMBDFUIFN ZPVDBODSFBUFUIFNXJUIGBJSMZIJHIRVBMJUZXJUIPVUSFMZJOHPOMJCSBSJFT
,OPXMFEHFXJMMCFJOUSPEVDFEJOTUBHFTBDDPSEJOHUPTLJMMMFWFMεΩϧϨϕϧʹԠͯ͡ஈ֊తʹಋೖGraphQL Fragment graphql-codegen ͷಋೖͱಉ࣌Ͱͳ͘ɺFragment Colocation ͕ඞཁͳՕॴͷ࣮λεΫ͕ొ͔ͯ͠Βಋೖɻ(SBQI2-'SBHNFOUXBTO`UJOUSPEVDFEBUUIFTBNFUJNFBTHSBQIRMDPEFHFO*OUSPEVDFEBGUFSJNQMFNFOUBUJPOUBTLTXIFSF'SBHNFOU$PMPDBUJPOJTSFRVJSFEBQQFBSFE
(FUSJEPGUIFJSEJTMJLFPG$44CSS ʹର͢ΔۤखҙࣝΛ১͢Δ
CSS Flexbox-FBSOPOMZUIFDPSFGFBUVSFT֩ͱͳΔػೳʹߜΔ·ͣflexbox Λ͍͢ɻ͋Δఔ׳Ε͖ͯͨΒ grid ʹεςοϓΞοϓ͢Ε͍͍ɻ'JSTU VTFflFYCPY0ODFZPVHFUVTFEUPJUUPTPNFFYUFOU ZPVDBOTUFQVQUPHSJE
&YQMBJOVTJOHFYBNQMFTUIBUBSFGBNJMJBSUPUIFPUIFSQFSTPO૬खʹͱͬͯۙͳͷΛྫʹͯ͠આ໌flexbox ྻgrid ࿈ྻʢ㲈 ΦϒδΣΫτʣ'MFYCPYJTBOBSSBZ(SJEJTBOBTTPDJBUJWFBSSBZ 㲈PCKFDU
ϖΞϓϩͰখ͞ͳޭମݧΛͨ͘͞ΜੵΜͰΒ͏(FUNBOZTVDDFTTGVMFYQFSJFODFTUISPVHIQBJSQSPHSBNNJOH݁Ռ͕ࢹ֮తʹଈ࣌ө͞ΕΔͱָ͍͜͠Ε·Ͱ͔ͬͨ͜͠ͱ͕֩৺ΛΔ͜ͱͰղܾ͢Δͱָ͍ࣗ͠ͰϦϑΝΫλϦϯάͯ͠ίʔυ͕ඒ͘͠ͳΔͱָ͍͠*UTGVOXIFOUIFSFTVMUTBSFJNNFEJBUFMZSFflFDUFEWJTVBMMZ*UTGVOUPTPMWFBEJff iDVMUQSPCMFNCZVOEFSTUBOEJOHUIFDPSFPGJU*UTGVOUPSFGBDUPSZPVSPXODPEFBOENBLFJUDMFBO
"HHSFTTJWFJOWFTUNFOUJOBVUPNBUJPOࣗಈԽͷੵۃతͳࢿ
%FWFMPQDPNQSFIFOTJWFBVUPNBUFEUFTUJOHBOEBVUPNBUFECVJMETGSPNBOFBSMZTUBHFૣظ͔ΒแׅతͳࣗಈςετɾࣗಈϏϧυΛॆ࣮ͤ͞Δ։ൃޮΛʮ্͛ΔʯͷͰͳ͘ʮԼ͛ͳ͍ʯΑ͏ʹ͢ΔɻকདྷϦϑΝΫλϦϯάͨ͘͠ͳͬͨͱ͖ʹඋ͑ͯςετΛॆ࣮͓ͤͯ͘͞ɻ3BUIFSUIBOJODSFBTJOHEFWFMPQNFOUFffiDJFODZ USZOPUUPEFDSFBTFJU.BLFTVSFZPVIBWFQMFOUZPGUFTUTJODBTFZPVXBOUUPSFGBDUPSJOUIFGVUVSF
*OUSPEVDFUIF3FOPWBUFGSPNBOFBSMZTUBHFૣظ͔ΒRenovateΛಋೖ͢ΔຖिʹPR͕࡞ΒΕɺฏதʹϚʔδɻminor, patchΞοϓσʔτCI/CD͕ޭ͢ΕࣗಈతʹϚʔδɻMajorΞοϓσʔτϝϯόʔ͕ϨϏϡʔ͢Δɻ13TBSFDSFBUFEFWFSZXFFLFOEBOENFSHFEEVSJOHXFFLEBZT.JOPSBOE1BUDIVQEBUFTXJMMCFBVUPNBUJDBMMZNFSHFEJG$*$%JTTVDDFTTGVM.BKPSVQEBUFTBSFSFWJFXFEEJSFDUMZCZNFNCFST
'PTUFSBEPDVNFOUBUJPODVMUVSFυΩϡϝϯςʔγϣϯ׳शͷৢ
&OIBODFUIF3&"%.&ॆͳREADMEະདྷͷ৽ਓ͕୭ʹཔΒͣڥߏங֤छσΟϨΫτϦͷΛཧղͰ͖Δঢ়ଶΛ࡞Δɻ༧ΊςϯϓϨʔτΛ༻ҙ͓ͯ͘͠ͱΑ͍ɻ$SFBUFBTJUVBUJPOXIFSFGVUVSFOFXDPNFSTDBOVOEFSTUBOEUIFSFTQPOTJCJMJUJFTPGFOWJSPONFOUDPOTUSVDUJPOBOEWBSJPVTEJSFDUPSJFTXJUIPVUSFMZJOHPOBOZPOF*U`TBHPPEJEFBUPQSFQBSFBUFNQMBUFJOBEWBODF
.BLFJUQPTTJCMFUPGPMMPXUIFEFDJTJPONBLJOHQSPDFTTMBUFSҙࢥܾఆͷաఔΛޙ͔ΒḷΕΔΑ͏ʹ͢Δઃܭʹؔ͢Δٞ Design Doc Λॻ͍ͯϨϏϡʔ͠ɺ࣮લʹ߹ҙܗ͢ΔɻυΩϡϝϯτ։ൃϦϙδτϦதͷઐ༻σΟϨΫτϦԼͰཧ͢Δɻ'PSEFTJHOEJTDVTTJPOT XSJUFB%FTJHO%PDBOESFWJFXJUUPCVJMEDPOTFOTVTCFGPSFJNQMFNFOUBUJPO%PDVNFOUTBSFNBOBHFEVOEFSBEFEJDBUFEEJSFDUPSZJOUIFEFWFMPQNFOUSFQPTJUPSZ
&OIBODFUIF+4%PDॆͳ JSDoc෦࣮Λಡ·ΕͨΒෛ͚ɻESLint Λಋೖͯ͠ Doc comment ͷهड़ΛඞਢԽ͢ΔɻGitHub Copilot Λ׆༻͢ΕͦΕ΄Ͳෛ୲ʹͳΒͳ͍ɻ*GTPNFPOFSFBETZPVSJOUFSOBMJNQMFNFOUBUJPO ZPVMPTF*OUSPEVDJOH&4-JOUBOENBLJOHJUNBOEBUPSZUPXSJUF%PDDPNNFOUT*GZPVVTF(JU)VC$PQJMPU JUXPOUCFUIBUNVDIPGBCVSEFO
͋ͳ͕ͨͬͯͦͷϞδϡʔϧʹtype hintͱdoc stringΛॻ͚ͩ͘Ͱɺؒͷଞਓͷ͕࣌ؒੜ·ΕΔɻ+VTUBGFXNJOVUFTPGZPVSUJNFTQFOUXSJUJOHUIFUZQFIJOUBOEEPDTUSJOHGPSUIPTFNPEVMFTXJMMHFOFSBUFBGFXEBZTBZFBSPGPUIFSQFPQMF`TUJNF
4UBSUCZSFJOWFOUJOHUIFXIFFMंྠͷ࠶ൃ໌͔Β࢝ΊΔ
5SZNBLJOHJUJOIPVTFfiSTU·ͣʹઓͯ͠ΈΔ͍͠ͱஅ͔ͯ͠ΒϥΠϒϥϦͷಋೖΛݕ౼͢Δɻઓࣗମ͕࿉ͱͳΓɺ͜ΕΛܦΔ͜ͱͰॳΊͯઃܭεΩϧ্͢Δɻ$POTJEFSJOUSPEVDJOHBMJCSBSZBGUFSEFUFSNJOJOHUIBUJOIPVTFQSPEVDUJPOJTEJffiDVMU5IFDIBMMFOHFJUTFMGJTUSBJOJOH BOEJUJTPOMZUISPVHIUIJTDIBMMFOHFUIBUZPVSEFTJHOTLJMMTXJMMJNQSPWF
ͱ͖ʹϥΠϒϥϦʹཔΒͶͳΒͳ͍͜ͱ͋Δ͕ɺΑ͘ௐͤͣʮྲྀߦͬͯΔ͔Βʯʮศརͦ͏ʯͱ͍͏ཧ༝͚ͩͰ࠾ͯ͠ͳΒͳ͍ɻ4PNFUJNFTZPVIBWFUPSFMZPOMJCT)PXFWFS ZPVTIPVMEO`UBEPQUUIFNKVTUCFDBVTFlUIFZ`SFQPQVMBSzPSlTFFNDPOWFOJFOUzXJUIPVUDBSFGVMMZSFTFBSDIJOHUIFN
$POTJEFSGVUVSFNJHSBUJPOQPTTJCJMJUJFTBUUIFTBNFUJNFBTMJCSBSZJOTUBMMBUJPOϥΠϒϥϦಋೖͱಉ࣌ʹকདྷͷҠߦՄೳੑߟྀ͢ΔͲͷΑ͏ʹ࣮͢ΕίετͰണ͕ͤΔ͔Λॏࢹͯ͠ϨϏϡʔɻઃܭͷܦҢ Design Doc (or ADRs) ͱͯ͢͠ɻ5IFSFWJFXGPDVTFTPOIPXUPJNQMFNFOUJUTPUIBUJUDBOCFSFNPWFEBUMPXDPTU%PDVNFOUUIFEFTJHOQSPDFTTBTB%FTJHO%PD PS"%3T
ؙ҉هΛపఈతʹഉআ͢ΔҰʹଟ͘ͷπʔϧݟΛಋೖ͠ͳ͍CSS ʹର͢ΔۤखҙࣝΛ১͢ΔࣗಈԽͷੵۃతͳࢿυΩϡϝϯςʔγϣϯ׳शͷৢंྠͷ࠶ൃ໌͔Β࢝ΊΔ"WPJESPUFNFNPSJ[BUJPO%POPUJOUSPEVDFNBOZUPPMTBOELOPXMFEHFBUPODF(FUSJEPGUIFJSEJTMJLFPG$44"HHSFTTJWFJOWFTUNFOUJOBVUPNBUJPO'PTUFSBEPDVNFOUBUJPODVMUVSF4UBSUCZSFJOWFOUJOHUIFXIFFM
"GUFSUIFTVQQPSUBDUJWJUJFTʜࢧԉ׆ಈΛऴ͑ͯ
5IFJNQPSUBODFPGUIFEFWFMPQNFOUNBOBHFS`TVOEFSTUBOEJOHPGUIFEFWFMPQNFOUTJUFҙࢥܾఆऀʢ㲈 POʣͷ։ൃݱʹର͢ΔཧղྗͷॏཁੑϚωʔδϟʔؚΉҙࢥܾఆऀ͕ٕज़ʹ͍ͭͯཧղ͍ͯ͠ͳ͍ͱٞʹͳΒͳ͍ɻݱ͔Βٕज़తͳ؍ʹ͍ͭͯओுͰ͖ͳ͍ͱٞʹͳΒͳ͍ɻ*GNBOBHFSTEPOPUVOEFSTUBOEUIFUFDIOPMPHZ UIFSFXJMMCFOPEJTDVTTJPO5IFSFXJMMCFOPEJTDVTTJPOVOMFTTUIFUFDIOJDBMQFSTQFDUJWFDBOCFBTTFSUFEGSPNUIFfiFME
5IFJNQPSUBODFPGBOJORVJTJUJWFNJOEUPXBSETUFDIOPMPHZٕज़ʹର͢Δ୳ڀ৺ͷॏཁੑʮϢʔβʔʹՁΛಧ͚͍ͨʯͱ͍͏͍͚ͩͰ͍͚ͬͯͳ͍ɻٕज़ݚᮎͤͣʹՁΛಧ͚ΒΕΔ΄Ͳ͘ͳ͍ɻ1SPEVDUEFWFMPQNFOUDBOOPUCFEPOFTJNQMZCZXBOUJOHUPEFMJWFSWBMVFUPVTFST*U`TOPUFBTZFOPVHIUPEFMJWFSWBMVFXJUIPVUJNQSPWJOHUFDIOPMPHZ
5IFJNQPSUBODFPGBOJORVJTJUJWFNJOEUPXBSETUFDIOPMPHZٕज़ʹର͢Δ୳ڀ৺ͷॏཁੑʮ͖ʯͱ·Ͱ͍͔ͳ͘ͱʮ໘ന͍ʯͱࢥͬͯΒ͏ඞཁ͕͋Δɻখ͞ͳޭମݧΛͨ͘͞ΜੵΊΔΑ͏ʹ͠·͘Δɻ&WFOJGUIFZEPOUMJLFJU UIFZOFFEUPfiOEJUJOUFSFTUJOH*XJMMBDDPNQBOZZPVTPUIBUZPVDBOBDDVNVMBUFNBOZTNBMMTVDDFTTFYQFSJFODFT
.BUUFSTGPSSFflFDUJPOলૣظ͔Βٕज़ݕূɾΩϟονΞοϓ༻ͷ Experimental ϦϙδτϦΛ࡞Δ͖ͩͬͨɻෳࡶɾଟػೳͳίϯϙʔωϯτϖʔδ͔Βணखͨ͜͠ͱͰඞཁҎ্ʹۤ࿑͢Δ໘͕͋ͬͨɻDesign Doc ͱ ADRs ʹର͢Δཧղ͕ෆ͓ͯ͠Γɺํ͕ཧ͞Ε͍ͯͳ͍ɻ"OFYQFSJNFOUBMSFQPTJUPSZGPSUFDIOJDBMWFSJfiDBUJPOBOEDBUDIVQTIPVMEIBWFCFFODSFBUFEGSPNBOFBSMZTUBHF5IFSFXFSFUJNFTXIFO*TUSVHHMFENPSFUIBOOFDFTTBSZCFDBVTF*TUBSUFEXJUIDPNQMFYBOENVMUJGVODUJPOBMDPNQPOFOUTBOEQBHFT%VFUPBMBDLPGVOEFSTUBOEJOHPG%FTJHO%PDBOE"%3T CPUIXFSFEJTPSHBOJ[FE
"OEOPXʜͦͯ͠ݱࡏʢ202310݄Ҏ߱ʣνϟοτʹΑΔٕज़૬ஊਵ࣌ड͚͚͍ͯΔɻຖि30ؒಉظతͳίϛϡχέʔγϣϯͷΛઃ͚͍ͯΔɻ5FDIOJDBMDPOTVMUBUJPOWJBDIBUJTBWBJMBCMFBUBOZUJNF8FTFUVQBNJOVUFPQQPSUVOJUZGPSTZODISPOPVTDPNNVOJDBUJPOFWFSZXFFL
'VUVSFQSPTQFDUTʜࠓޙͷలίʔσΟϯάϚχϡΞϧɺΞΫηγϏϦςΟΨΠυϥΠϯΛ͡Ίͱ͢ΔυΩϡϝϯςʔγϣϯͷඋɻฐࣾϓϩμΫτԣஅͰར༻ՄೳͳσβΠϯγεςϜʢUI ίϯϙʔωϯτؚΉʣͷ։ൃɻ%FWFMPQJOHEPDVNFOUBUJPOTVDIBTDPEJOHNBOVBMTBOEBDDFTTJCJMJUZHVJEFMJOFT%FWFMPQJOHBEFTJHOTZTUFN JODMVEJOH6*DPNQPOFOUTUIBUDBOCFVTFEBDSPTTBMMPVSQSPEVDUT
5IBOLTTPNVDI͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠