$30 off During Our Annual Pro Sale. View Details »

Second-System Syndrome: A tale of power-assert

Takuto Wada
November 19, 2023

Second-System Syndrome: A tale of power-assert

Second-System Syndrome: A tale of power-assert
#jsconfjp
https://jsconf.jp/2023/

Takuto Wada

November 19, 2023
Tweet

More Decks by Takuto Wada

Other Decks in Programming

Transcript

  1. QPXFSBTTFSUJTBUSBOTQJMFSBOEXPSLTMJLFBDIBSN assert(truthy === falsy) | | | | | 0

    "1" false import assert from 'node:assert'; const truthy = '1'; const falsy = 0; assert(truthy === falsy); /P"1*JTUIFCFTU"1*
  2. 25IFQPTJUJPOJOUIFDBOPOJDBMJ[FEBTTFSUJPONBZCFEJ ff FSFOUGSPNUIF PSJHJOBMQPTJUJPO8IBUTIPVME*EP  2ਖ਼نԽ͞ΕͨΞαʔγϣϯͷதͷҐஔ͸ΦϦδφϧͷҐஔͱ͸ҟͳΔ͸ͣͰ͢ɻ Ͳ͏͠·͔͢ʁ "%F fi OFBMPHJDBMQBUIUPQPJOUUPBTQFDJ

    fi DMPDBUJPOJOUIFBTTFSUJPO FYQSFTTJPO/BNFJUFTQBUI&BDIMPDBUJPOJOUIFBTTFSUJPOJTQPJOUFEUPCZ FTQBUI OPUQPTJUJPO "ΞαʔγϣϯͷதͷಛఆͷҐஔΛࢦࣔͨ͢͠Ίͷ࿦ཧతͳύεΛఆٛ͠·͢ɻͦ ΕΛʮFTQBUIʯͱ໊෇͚·͠ΐ͏ɻΞαʔγϣϯͷதͷ֤෦Ґ͸ҐஔͰ͸ͳ͘ FTQBUIͰࢦࣔ͠͠·͢ɻ
  3. 2)PXEP*HFUUIFBDUVBMMPDBUJPOGSPNUIFMPHJDBMFTQBUIBUSVOUJNF  2࣮ߦ࣌ʹ࿦ཧతͳFTQBUI͔Β࣮ࡍͷҐஔΛऔಘ͢Δʹ͸Ͳ͏͠·͔͢ʁ "#VOEMFBQBSTFSBOEBWJTJUPSPOUIFSVOUJNFTJEF'JSTU QBSTFUIF DBOPOJDBMJ[FEBTTFSUJPOUP"45XJUIMPDBUJPOJOGPSNBUJPO BOEXIFOUSBWFSTJOH "45XJUIUIFWJTJUPS DPNQBSFFTQBUIXJUIUIFDVSSFOUUSBWFSTBMQBUIBUFBDI OPEFBOESFUVSOUIFMPDBUJPOJGNBUDIFE5IJTXJMMDSFBUFBNBQQJOHCFUXFFO

    MPHJDBMFTQBUITBOEQIZTJDBMMPDBUJPOT "ϥϯλΠϜଆʹQBSTFSͱWJTJUPSΛόϯυϧ͠·͢ɻ·ͣ͸ਖ਼نԽ͞ΕͨΞαʔ γϣϯΛMPDBUJPO৘ใ෇͖ͰQBSTF͠ɺWJTJUPSͰτϥόʔε͢Δࡍʹ֤ϊʔυͰ FTQBUIͱͷൺֱΛߦ͍ɺϚονͨ͠ΒͦͷҐஔΛฦ͢Α͏ʹ͠·͢ɻ͜ΕͰ࿦ཧύε ͱ෺ཧҐஔͷϚοϐϯά͕Ͱ͖·͢ɻ
  4. 8IBUBDMFWFSTPMVUJPO const truthy = '1'; const falsy = 0; assert(truthy

    === falsy); assert(truthy === falsy) | | | | | 0 "1" false
  5. 2#VUXJUIPVU#BCFMQBSTFS *DBOOPUQBSTFDBOPOJDBMJ[FEBTTFSUJPOTDPOUBJOJOH +49FMFNFOUTBUSVOUJNF 2Ͱ΋#BCFMͷQBSTFS͕ͳ͍ͱ+49ཁૉؚ͕·Εͨਖ਼نԽ͞ΕͨΞαʔγϣϯΛ࣮ߦ࣌ʹ QBSTFͰ͖·ͤΜ "*OTUFBEPGQBSTJOHUIFNBUSVOUJNF QBSTFUIFDBOPOJDBMJ[FEBTTFSUJPOTUSJOH JUTFMGBUDPNQJMFUJNF UVSOJUJOUPB+40/TUSJOH FNCFEJUJOZPVSDPEF

    BOEQBTTJU UPUIFSVOUJNFTJEF*GZPVIBWFUIBU+40/ USFBUJUBTBQBSTFE"45 "࣮ߦ࣌ʹQBSTF͢ΔͷͰ͸ͳ͘ɺਖ਼نԽ͞ΕͨΞαʔγϣϯจࣈྻࣗ਎΋ίϯύΠϧ࣌ ʹQBSTFͯ͠ɺͦΕΛ+40/จࣈྻʹͯ͠ίʔυʹຒΊࠐΈɺϥϯλΠϜଆʹ౉͠·͠ΐ ͏ɻͦͷ+40/͕͋Δ৔߹͸ͦΕΛύʔεࡁΈͷ"45ͱͯ͠ѻ͍·͠ΐ͏ɻ
  6. 24PSSZ *XBTBDUVBMMZVTJOHUPLFOTFRVFODFTBTXFMMBT"45TUP fi OEPVU UIFFYBDUMPDBUJPOPGPQFSBUPSTBQQFBSJOHJOBTTFSUJPOFYQSFTTJPOT TJHI  2͝ΊΜͳ͍͞ɺࣜͷதʹొ৔͢Δԋࢉࢠͷਖ਼֬ͳҐஔΛௐ΂ΔͨΊʹɺ࣮͸ "45͚ͩͰͳ͘τʔΫϯྻ΋࢖͍ͬͯ·ͨ͠ʢͨΊଉʣ "5IFO

    UIFUPLFOTFRVFODFQBSTFECZCBCFMQBSTFSTIPVMEBMTPCF DPOWFSUFEUP+40/ FNCFEEFEJOUIFDPEF BOEQBTTFEUPUIFSVOUJNFTJEF "Ͱ͸CBCFMQBSTFS͕QBSTFͨ͠τʔΫϯྻ΋+40/Խͯ͠ίʔυʹຒΊࠐΈɺϥ ϯλΠϜଆʹ౉͠·͠ΐ͏ɻ
  7. \"body\"],\"DeclareFunction\":[\"id\"],\"DeclareInterface\":[\"id\",\"typeParameters\",\"extends\",\"mixins\",\"implements\",\"body\"],\"DeclareModule\":[\"id\",\"body\"],\"DeclareModuleExports [\"typeAnnotation\"],\"DeclareTypeAlias\":[\"id\",\"typeParameters\",\"right\"],\"DeclareOpaqueType\":[\"id\",\"typeParameters\",\"supertype\"],\"DeclareVariable\":[\"id\"],\"DeclareExportDecla [\"declaration\",\"specifiers\",\"source\"],\"DeclareExportAllDeclaration\":[\"source\"],\"DeclaredPredicate\":[\"value\"],\"ExistsTypeAnnotation\":[],\"FunctionTypeAnnotation\":[\"typeParamete \"params\",\"rest\",\"returnType\"],\"FunctionTypeParam\":[\"name\",\"typeAnnotation\"],\"GenericTypeAnnotation\":[\"id\",\"typeParameters\"],\"InferredPredicate\":[],\"InterfaceExtends\":[\"id \"typeParameters\"],\"InterfaceDeclaration\":[\"id\",\"typeParameters\",\"extends\",\"mixins\",\"implements\",\"body\"],\"InterfaceTypeAnnotation\":[\"extends\",\"body\"],\"IntersectionTypeAnno [\"types\"],\"MixedTypeAnnotation\":[],\"EmptyTypeAnnotation\":[],\"NullableTypeAnnotation\":[\"typeAnnotation\"],\"NumberLiteralTypeAnnotation\":[],\"NumberTypeAnnotation\":[],\"ObjectTypeAnno [\"properties\",\"indexers\",\"callProperties\",\"internalSlots\"],\"ObjectTypeInternalSlot\":[\"id\",\"value\",\"optional\",\"static\",\"method\"],\"ObjectTypeCallProperty\":[\"value\"], \"ObjectTypeIndexer\":[\"id\",\"key\",\"value\",\"variance\"],\"ObjectTypeProperty\":[\"key\",\"value\",\"variance\"],\"ObjectTypeSpreadProperty\":[\"argument\"],\"OpaqueType\":[\"id\",\"typePa \"supertype\",\"impltype\"],\"QualifiedTypeIdentifier\":[\"id\",\"qualification\"],\"StringLiteralTypeAnnotation\":[],\"StringTypeAnnotation\":[],\"ThisTypeAnnotation\":[],\"TupleTypeAnnotation [\"types\"],\"TypeofTypeAnnotation\":[\"argument\"],\"TypeAlias\":[\"id\",\"typeParameters\",\"right\"],\"TypeAnnotation\":[\"typeAnnotation\"],\"TypeCastExpression\":[\"expression\",\"typeAnno

    \"TypeParameter\":[\"bound\",\"default\",\"variance\"],\"TypeParameterDeclaration\":[\"params\"],\"TypeParameterInstantiation\":[\"params\"],\"UnionTypeAnnotation\":[\"types\"],\"Variance\":[], \"VoidTypeAnnotation\":[],\"JSXAttribute\":[\"name\",\"value\"],\"JSXClosingElement\":[\"name\"],\"JSXElement\":[\"openingElement\",\"children\",\"closingElement\"],\"JSXEmptyExpression\":[], \"JSXExpressionContainer\":[\"expression\"],\"JSXSpreadChild\":[\"expression\"],\"JSXIdentifier\":[],\"JSXMemberExpression\":[\"object\",\"property\"],\"JSXNamespacedName\":[\"namespace\",\"nam \"JSXOpeningElement\":[\"name\",\"attributes\"],\"JSXSpreadAttribute\":[\"argument\"],\"JSXText\":[],\"JSXFragment\":[\"openingFragment\",\"children\",\"closingFragment\"],\"JSXOpeningFragment\ \"JSXClosingFragment\":[],\"Noop\":[],\"ParenthesizedExpression\":[\"expression\"],\"AwaitExpression\":[\"argument\"],\"BindExpression\":[\"object\",\"callee\"],\"ClassProperty\":[\"key\",\"val \"typeAnnotation\",\"decorators\"],\"OptionalMemberExpression\":[\"object\",\"property\"],\"PipelineTopicExpression\":[\"expression\"],\"PipelineBareFunction\":[\"callee\"], \"PipelinePrimaryTopicReference\":[],\"OptionalCallExpression\":[\"callee\",\"arguments\",\"typeParameters\",\"typeArguments\"],\"ClassPrivateProperty\":[\"key\",\"value\"],\"ClassPrivateMethod [\"key\",\"params\",\"body\",\"decorators\",\"returnType\",\"typeParameters\"],\"Import\":[],\"Decorator\":[\"expression\"],\"DoExpression\":[\"body\"],\"ExportDefaultSpecifier\":[\"exported\"] \"ExportNamespaceSpecifier\":[\"exported\"],\"PrivateName\":[\"id\"],\"BigIntLiteral\":[],\"TSParameterProperty\":[\"parameter\"],\"TSDeclareFunction\":[\"id\",\"typeParameters\",\"params\", \"returnType\"],\"TSDeclareMethod\":[\"decorators\",\"key\",\"typeParameters\",\"params\",\"returnType\"],\"TSQualifiedName\":[\"left\",\"right\"],\"TSCallSignatureDeclaration\":[\"typeParamete \"parameters\",\"typeAnnotation\"],\"TSConstructSignatureDeclaration\":[\"typeParameters\",\"parameters\",\"typeAnnotation\"],\"TSPropertySignature\":[\"key\",\"typeAnnotation\",\"initializer\" \"TSMethodSignature\":[\"key\",\"typeParameters\",\"parameters\",\"typeAnnotation\"],\"TSIndexSignature\":[\"parameters\",\"typeAnnotation\"],\"TSAnyKeyword\":[],\"TSUnknownKeyword\":[], \"TSNumberKeyword\":[],\"TSObjectKeyword\":[],\"TSBooleanKeyword\":[],\"TSStringKeyword\":[],\"TSSymbolKeyword\":[],\"TSVoidKeyword\":[],\"TSUndefinedKeyword\":[],\"TSNullKeyword\":[],\"TSNever [],\"TSThisType\":[],\"TSFunctionType\":[\"typeParameters\",\"typeAnnotation\"],\"TSConstructorType\":[\"typeParameters\",\"typeAnnotation\"],\"TSTypeReference\":[\"typeName\",\"typeParameters\ \"TSTypePredicate\":[\"parameterName\",\"typeAnnotation\"],\"TSTypeQuery\":[\"exprName\"],\"TSTypeLiteral\":[\"members\"],\"TSArrayType\":[\"elementType\"],\"TSTupleType\":[\"elementTypes\"], \"TSOptionalType\":[\"typeAnnotation\"],\"TSRestType\":[\"typeAnnotation\"],\"TSUnionType\":[\"types\"],\"TSIntersectionType\":[\"types\"],\"TSConditionalType\":[\"checkType\",\"extendsType\", \"trueType\",\"falseType\"],\"TSInferType\":[\"typeParameter\"],\"TSParenthesizedType\":[\"typeAnnotation\"],\"TSTypeOperator\":[\"typeAnnotation\"],\"TSIndexedAccessType\":[\"objectType\",\"in \"TSMappedType\":[\"typeParameter\",\"typeAnnotation\"],\"TSLiteralType\":[\"literal\"],\"TSExpressionWithTypeArguments\":[\"expression\",\"typeParameters\"],\"TSInterfaceDeclaration\":[\"id\", \"typeParameters\",\"extends\",\"body\"],\"TSInterfaceBody\":[\"body\"],\"TSTypeAliasDeclaration\":[\"id\",\"typeParameters\",\"typeAnnotation\"],\"TSAsExpression\":[\"expression\",\"typeAnnota \"TSTypeAssertion\":[\"typeAnnotation\",\"expression\"],\"TSEnumDeclaration\":[\"id\",\"members\"],\"TSEnumMember\":[\"id\",\"initializer\"],\"TSModuleDeclaration\":[\"id\",\"body\"],\"TSModule [\"body\"],\"TSImportEqualsDeclaration\":[\"id\",\"moduleReference\"],\"TSExternalModuleReference\":[\"expression\"],\"TSNonNullExpression\":[\"expression\"],\"TSExportAssignment\":[\"expressio \"TSNamespaceExportDeclaration\":[\"id\"],\"TSTypeAnnotation\":[\"typeAnnotation\"],\"TSTypeParameterInstantiation\":[\"params\"],\"TSTypeParameterDeclaration\":[\"params\"],\"TSTypeParameter\" [\"constraint\",\"default\"]}"; 
 
 (0, _powerAssert.default)(_rec8._expr(_rec8._capt(_rec8._capt(_rec8._capt(_rec8._capt((0, _enzyme.mount)(_react.default.createElement(_Foo.default, null)), "arguments/0/left/object/callee object").find('.foo'), "arguments/0/left/object").length, "arguments/0/left") === 1, "arguments/0"), { content: "assert(mount(<Foo />).find('.foo').length === 1)", filepath: "test/fixtures/React/fixture.js", line: 60, ast: "{\"type\":\"CallExpression\",\"callee\":{\"type\":\"Identifier\",\"name\":\"assert\",\"range\":[0,6]},\"arguments\":[{\"type\":\"BinaryExpression\",\"operator\":\"===\",\"left\":{ \"MemberExpression\",\"object\":{\"type\":\"CallExpression\",\"callee\":{\"type\":\"MemberExpression\",\"object\":{\"type\":\"CallExpression\",\"callee\":{\"type\":\"Identifier\",\"name\":\"mou \"range\":[7,12]},\"arguments\":[{\"type\":\"JSXElement\",\"openingElement\":{\"type\":\"JSXOpeningElement\",\"name\":{\"type\":\"JSXIdentifier\",\"name\":\"Foo\",\"range\":[14,17]},\"attribute \"selfClosing\":true,\"range\":[13,20]},\"closingElement\":null,\"children\":[],\"range\":[13,20]}],\"range\":[7,21]},\"property\":{\"type\":\"Identifier\",\"name\":\"find\",\"range\":[22,26]}, \"computed\":false,\"range\":[7,26]},\"arguments\":[{\"type\":\"StringLiteral\",\"value\":\".foo\",\"range\":[27,33]}],\"range\":[7,34]},\"property\":{\"type\":\"Identifier\",\"name\":\"length\ \"range\":[35,41]},\"computed\":false,\"range\":[7,41]},\"right\":{\"type\":\"NumericLiteral\",\"value\":1,\"range\":[46,47]},\"range\":[7,47]}],\"range\":[0,48]}", tokens: "[{\"type\":{\"label\":\"name\"},\"value\":\"assert\",\"range\":[0,6]},{\"type\":{\"label\":\"(\"},\"range\":[6,7]},{\"type\":{\"label\":\"name\"},\"value\":\"mount\",\"range\": {\"type\":{\"label\":\"(\"},\"range\":[12,13]},{\"type\":{\"label\":\"jsxTagStart\"},\"range\":[13,14]},{\"type\":{\"label\":\"jsxName\"},\"value\":\"Foo\",\"range\":[14,17]},{\"type\":{\"label \"value\":\"/\",\"range\":[18,19]},{\"type\":{\"label\":\"jsxTagEnd\"},\"range\":[19,20]},{\"type\":{\"label\":\")\"},\"range\":[20,21]},{\"type\":{\"label\":\".\"},\"range\":[21,22]},{\"type\" {\"label\":\"name\"},\"value\":\"find\",\"range\":[22,26]},{\"type\":{\"label\":\"(\"},\"range\":[26,27]},{\"type\":{\"label\":\"string\"},\"value\":\".foo\",\"range\":[27,33]},{\"type\":{\"lab \"},\"range\":[33,34]},{\"type\":{\"label\":\".\"},\"range\":[34,35]},{\"type\":{\"label\":\"name\"},\"value\":\"length\",\"range\":[35,41]},{\"type\":{\"label\":\"==/!=\"},\"value\":\"===\",\" *UXPSLT CVU
  8. $BTFTUVEZ4USJOHXJEUI const truthy = '真理'; const falsy = 0; assert(truthy

    === falsy); assert(truthy === falsy) | | | | | 0 "真理" false (BQ
  9. 2)PXEPZPVDBMDVMBUFTUSJOHXJEUIXIFOUIFDBQUVSFEWBSJBCMFDPOUBJOTGVMM XJEUITUSJOHT GPSFYBNQMF ,BOKJDIBSBDUFST  2Ωϟϓνϟͨ͠ม਺͕ྫ͑͹׽ࣈͷΑ͏ͳશ֯จࣈྻΛؚΜͰ͍Δ৔߹ͷจࣈ෯ܭࢉΛ Ͳ͏͠·͔͢ʁ "6TF&BTU"TJBO$IBSBDUFS8JEUIGPSDBMDVMBUJPO&BTU"TJBO8JEUIJTPOFPG UIF6OJDPEF4UBOEBSE"OOFYFT XIJDIEF

    fi OFTUIFA&BTU@"TJBO@8JEUIAJOGPSNBUJWF QSPQFSUZUIBUHJWFTIJOUTBCPVUUIFDIBSBDUFSXJEUIPGFBDIDIBSBDUFSJOUIF 6OJDPEF4UBOEBSE "ʮ౦ΞδΞͷจࣈ෯ʯΛܭࢉʹ࢖͍·͢ɻʮ౦ΞδΞͷจࣈ෯ʯ͸ɺ6OJDPEFඪ४ͷෟ ଐॻͷҰͭͰɺ6OJDPEFʹऩ࿥͞Ε͍ͯΔ֤จࣈͷจࣈ෯ʹؔ͢ΔώϯτΛ༩͑Δ A&BTU@"TJBO@8JEUIAࢀߟಛੑΛఆΊ͍ͯ·͢ɻ
  10. -PPLTHPPE const truthy = '真理'; const falsy = 0; assert(truthy

    === falsy); assert(truthy === falsy) | | | | | 0 "真理" false (PPE
  11. -PPLTHPPE const family = '👨'; const falsy = 0; assert(family

    === falsy); assert(family === falsy) | | | | | 0 "👨" false
  12. FYQFDUFE const family = '👨👩'; const falsy = 0; assert(family

    === falsy); assert(family === falsy) | | | | | 0 "👨👩" false
  13. 8SFTUMJOHXJUIFNPKJTBOEBNCJHVPVTDIBSBDUFST export function widthOf (str: string): KnownWidth | UnknownWidth {

    const segmenter = new Intl.Segmenter(); const emojiRe = emojiRegex(); let width = 0; let unknown = false; let emoji = 0; let ambiguous = 0; let neutral = 0; for (const { segment: seg } of segmenter.segment(str)) { const code = easta(seg); switch (code) { case 'F': width += 2; break; case 'H': width += 1; break; case 'A': unknown = true; ambiguous += 1; width += 2; break; case 'W': if (emojiRe.test(seg)) { unknown = true; emoji += 1; } width += 2; break; case 'Na': width += 1; break; case 'N': unknown = true;
  14. 8IFOPOFJTEFTJHOJOHUIFTVDDFTTPSUPBSFMBUJWFMZTNBMM FMFHBOU BOE TVDDFTTGVMTZTUFN UIFSFJTBUFOEFODZUPCFDPNFHSBOEJPTFJOPOFT TVDDFTTBOEEFTJHOBOFMFQIBOUJOFGFBUVSFMBEFONPOTUSPTJUZ 5IFUFSNXBT fi STUVTFECZ'SFE#SPPLTJOIJTDMBTTJD5IF.ZUIJDBM.BO .POUI&TTBZTPO4PGUXBSF&OHJOFFSJOH

    "EEJTPO8FTMFZ   ൺֱతখ͘͞ΤϨΨϯτͰ੒ޭΛऩΊͨγεςϜͷޙܧγεςϜΛઃܭ͢Δ৔߹ ʹɺ΋ͬͱ੒ޭ͠Α͏ͱࢥͬͯɺ৅ฒʢFMFQIBOUJOFʣͰػೳ͕੝Γͩ͘͞Μͷ Խ͚෺Λઃܭͯ͠͠·͏৔߹͕͋Δɻ ͜ͷ༻ޠ͸ɺ'SFE#SPPLTͷ໊ஶʰਓ݄ͷਆ࿩ʱͰॳΊͯ࢖ΘΕͨɻ IUUQDBUCPSHKBSHPOIUNM4TFDPOETZTUFNF ff FDUIUNM TFDPOETZTUFNF ff FDU TZOESPNF O
  15. "OBSDIJUFDUT fi STUXPSLJTBQUUPCFTQBSFBOEDMFBO)FLOPXTIFEPFTOULOPXXIBUIFTEPJOH  TPIFEPFTJUDBSFGVMMZBOEXJUIHSFBUSFTUSBJOU"TIFEFTJHOTUIF fi STUXPSL GSJMMBGUFSGSJMMBOE FNCFMMJTINFOUBGUFSFNCFMMJTINFOUPDDVSUPIJN5IFTFHFUTUPSFEBXBZUPCFVTFEOFYUUJNF ΞʔΩςΫτ͸ɺ࠷ॳͷ࢓ࣄͰ͸ɺ੍ࣗͯ͠ա৒ͳ΋ͷΛ෇͚Ճ͑ͳ͍͜ͱ͕ଟ͍ɻࣗ෼ͰԿΛ͍ͯ͠Δͷ

    ͔͕෼͔Βͳ͍͜ͱΛೝ͍ࣝͯ͠ΔͷͰɺԿࣄ΋৻ॏ͔ͭे෼ͳઅ౓Λ΋ͬͯߦ͏ɻ࠷ॳͷ࢓ࣄΛσβΠϯ ͍ͯ͘͠ͱ͖ɺ͔࣍Β࣍΁ͱϑϦϧ΍Β০Γ΍Β༨ܭͳ΋ͷ͕ࢥ͍ු͔ΜͰ͘Δͷ͕ͩɺͦΕ͸ʮ࣍ճʯ࢖ ͓͏ͱऔ͓ͬͯ͘ɻ 4PPOFSPSMBUFSUIF fi STUTZTUFNJT fi OJTIFE BOEUIFBSDIJUFDU XJUI fi SNDPO fi EFODFBOEB EFNPOTUSBUFENBTUFSZPGUIBUDMBTTPGTZTUFNT JTSFBEZUPCVJMEBTFDPOETZTUFN ͦ͏͜͏͢Δ͏ͪʹ࠷ॳͷγεςϜ͕׬੒ͯ͠ɺΞʔΩςΫτʹ͸֬ݻͨΔࣗ৴ͱͦͷखͷΫϥεͷγες Ϝʹର͢Δܦݧ͕උΘΓɺೋ౓໨ͷγεςϜͷ։ൃͷ४උ͕Ͱ͖Δɻ IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXNZUIJDBMNBONPOUIUIF fi STUXPSLJTBQUUPCFTQBSFBOEDMFBO
  16. 5IJTTFDPOEJTUIFNPTUEBOHFSPVTTZTUFNBNBOFWFSEFTJHOT ͜ͷೋ౓໨ͷγεςϜͦ͜ɺσβΠϯ͢Δ΋ͷͷ͏ͪͰ࠷΋ةݥͳ΋ͷͰ͋Δɻ 5IFHFOFSBMUFOEFODZJTUPPWFSEFTJHOUIFTFDPOETZTUFN VTJOHBMMUIF JEFBTBOEGSJMMTUIBUXFSFDBVUJPVTMZTJEFUSBDLFEPOUIF fi STUPOF5IF SFTVMU BT0WJETBZT JTBCJHQJMF

    Ұൠతʹɺೋ౓໨ͷγεςϜΛσβΠϯ͠ա͗Δ܏޲͕͋Δɻ͜ͷͱ͖ɺ࠷ॳͷ γεςϜσβΠϯͰ͸஫ҙਂ͘֎ͨ͋͠ΒΏΔΞΠσΞͱ૷০Λ࢖͏ɻ݁Ռ͸Φ ϏσΟ΢εͷݴͬͨΑ͏ʹʮࢁʯͱͳΔɻ IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXNZUIJDBMNBONPOUIUIF 5IFHFOFSBMUFOEFODZJTUPPWFSEFTJHOUIFTFDPOETZTUFN
  17. )PXEPFTUIFBSDIJUFDUBWPJEUIFTFDPOETZTUFNF ff FDU 8FMM PCWJPVTMZIFDBOU TLJQIJTTFDPOETZTUFN#VUIFDBOCFDPOTDJPVTPGUIFQFDVMJBSIB[BSETPGUIBU TZTUFN BOEFYFSUFYUSBTFMGEJTDJQMJOFUPBWPJEGVODUJPOBMPSOBNFOUBUJPOBOEUP BWPJEFYUSBQPMBUJPOPGGVODUJPOTUIBUBSFPCWJBUFECZDIBOHFTJOBTTVNQUJPOTBOE QVSQPTFT

    ΞʔΩςΫτ͸ɺͲͷΑ͏ʹͯ͠ηΧϯυγεςϜ঱ީ܈Λճආ͢Ε͹Α͍ͩΖ͏͔ɻ 
 ͱ΋͔͘ɺೋ౓໨ͷγεςϜΛεΩοϓ͢Δ͜ͱ͸Ͱ͖ͳ͍ɻ͕ɺ 
 ηΧϯυγεςϜݻ༗ͷةݥੑʹ஫ҙͯ͠ɺػೳΛ০Γ෇͚ͨΓɺ 
 લఏ΍໨తͷมԽʹΑͬͯෆཁʹͳͬͯ͠·͏ػೳΛิͬͨΓ͠ͳ͍Α͏ɺ 
 े෼੍ࣗ৺Λ஁͑Δ͜ͱ͸ՄೳͰ͋Δɻ IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXNZUIJDBMNBONPOUIUIF $BOUTLJQTFDPOETZTUFN