Slide 1

Slide 1 text

4FDPOE4ZTUFN4ZOESPNF "UBMFPGQPXFSBTTFSU 📷🙆 🙆 5BLVUP8"%"ʢ!U@XBEBʣ #jsconfjp rev.1 /PW !+4$POG+1

Slide 2

Slide 2 text

*TV ff FSFEGSPNUIFUZQJDBMTFDPOETZTUFNTZOESPNFJOUIF EFWFMPQNFOUPGNZPXO044QSPEVDUT FTQFDJBMMZQPXFSBTTFSU *XJMMFYQMBJOXIBUTFDPOETZTUFNTZOESPNFJTBOEIPXUPSFDPWFS GSPNJU CBTFEPONZPXOFYQFSJFODF ࣗ࡞044ϓϩμΫτɺಛʹQPXFSBTTFSUͷ։ൃʹ͓͍ͯయܕతͳʮηΧ ϯυγεςϜγϯυϩʔϜʯʹጶױ͠·ͨ͠ɻʮηΧϯυγεςϜγϯυ ϩʔϜʯͱ͸Կ͔ɺͲ͏΍͔ͬͯͦ͜ΒϦΧόϦʔ͢Δ͔ɺࣗ෼ͷମݧΛ ϕʔεʹઆ໌͠·͢ɻ BCTUSBDU

Slide 3

Slide 3 text

QPXFSBTTFSU import assert from 'node:assert'; const truthy = '1'; const falsy = 0; assert(truthy === falsy);

Slide 4

Slide 4 text

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*

Slide 5

Slide 5 text

5IBOLZPVGPSVTJOHQPXFSBTTFSU IUUQTOQNTUBUDPNDIBSUTIUNM QBDLBHFQPXFSBTTFSUGSPNUP

Slide 6

Slide 6 text

#VUIPXBCPVUUIJT assert(truthy === falsy);

Slide 7

Slide 7 text

0SUIJT assert(truthy === falsy);

Slide 8

Slide 8 text

$BTF4UVEZBTTFSUJPODBOPOJDBMJ[BUJPOBOE+49

Slide 9

Slide 9 text

2)PXEP*IBOEMFBOBTTFSUJPOFYQSFTTJPOUIBUTQBOTNVMUJQMFMJOFT 2ෳ਺ߦʹ·͕ͨΔද໌ࣜΛͲ͏͠·͠ΐ͏ "6TFDPEFHFOFSBUPSXIJMFUSBWFSTJOHXJUIZPVSUSBOTQJMFSTPUIBUZPVDBO HFUBTIPSUDBOPOJDBMJ[FETUSJOHPGUIFBTTFSUJPOFYQSFTTJPOPOBTJOHMF DPODJTFMJOF/BNFJUDBOPOJDBMJ[FEBTTFSUJPO5IFOFNCFEUIF DBOPOJDBMJ[FEBTTFSUJPOJOUIFHFOFSBUFEDPEFBOEQBTTJUUPUIFSVOUJNFTJEF "USBOTQJMFSͰUSBWFSTF͢ΔࡍʹίʔυɾδΣωϨʔλʔΛ࢖༻͠ɺද໌ͷࣜΛҰߦ ʹ୹͘ਖ਼نԽͨ͠จࣈྻΛऔಘͰ͖ΔΑ͏ʹ͠·͠ΐ͏ɻ໊෇͚ΔͳΒʮਖ਼نԽ͞Ε ͨΞαʔγϣϯʯͰ͢ɻͦͷਖ਼نԽ͞ΕͨΞαʔγϣϯΛੜ੒ͨ͠ίʔυͷதʹຒΊ ࠐΈɺ࣮ߦଆʹ౉͠·͢ɻ

Slide 10

Slide 10 text

25IFQPTJUJPOJOUIFDBOPOJDBMJ[FEBTTFSUJPONBZCFEJ ff FSFOUGSPNUIF PSJHJOBMQPTJUJPO8IBUTIPVME*EP 2ਖ਼نԽ͞ΕͨΞαʔγϣϯͷதͷҐஔ͸ΦϦδφϧͷҐஔͱ͸ҟͳΔ͸ͣͰ͢ɻ Ͳ͏͠·͔͢ʁ "%F fi OFBMPHJDBMQBUIUPQPJOUUPBTQFDJ fi DMPDBUJPOJOUIFBTTFSUJPO FYQSFTTJPO/BNFJUFTQBUI&BDIMPDBUJPOJOUIFBTTFSUJPOJTQPJOUFEUPCZ FTQBUI OPUQPTJUJPO "ΞαʔγϣϯͷதͷಛఆͷҐஔΛࢦࣔͨ͢͠Ίͷ࿦ཧతͳύεΛఆٛ͠·͢ɻͦ ΕΛʮFTQBUIʯͱ໊෇͚·͠ΐ͏ɻΞαʔγϣϯͷதͷ֤෦Ґ͸ҐஔͰ͸ͳ͘ FTQBUIͰࢦࣔ͠͠·͢ɻ

Slide 11

Slide 11 text

2)PXEP*HFUUIFBDUVBMMPDBUJPOGSPNUIFMPHJDBMFTQBUIBUSVOUJNF 2࣮ߦ࣌ʹ࿦ཧతͳFTQBUI͔Β࣮ࡍͷҐஔΛऔಘ͢Δʹ͸Ͳ͏͠·͔͢ʁ "#VOEMFBQBSTFSBOEBWJTJUPSPOUIFSVOUJNFTJEF'JSTU QBSTFUIF DBOPOJDBMJ[FEBTTFSUJPOUP"45XJUIMPDBUJPOJOGPSNBUJPO BOEXIFOUSBWFSTJOH "45XJUIUIFWJTJUPS DPNQBSFFTQBUIXJUIUIFDVSSFOUUSBWFSTBMQBUIBUFBDI OPEFBOESFUVSOUIFMPDBUJPOJGNBUDIFE5IJTXJMMDSFBUFBNBQQJOHCFUXFFO MPHJDBMFTQBUITBOEQIZTJDBMMPDBUJPOT "ϥϯλΠϜଆʹQBSTFSͱWJTJUPSΛόϯυϧ͠·͢ɻ·ͣ͸ਖ਼نԽ͞ΕͨΞαʔ γϣϯΛMPDBUJPO৘ใ෇͖ͰQBSTF͠ɺWJTJUPSͰτϥόʔε͢Δࡍʹ֤ϊʔυͰ FTQBUIͱͷൺֱΛߦ͍ɺϚονͨ͠ΒͦͷҐஔΛฦ͢Α͏ʹ͠·͢ɻ͜ΕͰ࿦ཧύε ͱ෺ཧҐஔͷϚοϐϯά͕Ͱ͖·͢ɻ

Slide 12

Slide 12 text

8IBUBDMFWFSTPMVUJPO const truthy = '1'; const falsy = 0; assert(truthy === falsy); assert(truthy === falsy) | | | | | 0 "1" false

Slide 13

Slide 13 text

)FSFDPNFTUIF+49

Slide 14

Slide 14 text

28IBUJGUIFSFJTB+49FMFNFOUJOUIFBTTFSUJPOFYQSFTTJPO 2ද໌ࣜͷதʹ+49ཁૉ͕͋ͬͨΒͲ͏͠·͔͢ "6TF#BCFMBTZPVSUSBOTQJMFSBOEXSJUFB#BCFMWFSTJPOPGQPXFS BTTFSUWJTJUPS "τϥϯεύΠϥʹ#BCFMΛ࢖͍ɺ#BCFM൛ͷQPXFSBTTFSUWJTJUPSΛॻ͖· ͠ΐ͏ɻ

Slide 15

Slide 15 text

2#VUCBCFMQBSTFSBOECBCFMUSBWFSTFEPOPUXPSLPO PME CSPXTFST TP*DBOUCVOEMFUIFNPOUIFSVOUJNFTJEF 2Ͱ΋CBCFMQBSTFS΍CBCFMUSBWFSTF͸ʢݹ͍ʣϒϥ΢β্Ͱಈ͔ͳ͍ͷͰϥ ϯλΠϜଆʹόϯυϧͰ͖·ͤΜɻ "(JWFVQCVOEMJOHCBCFMQBSTFSBOECBCFMUSBWFSTF LFFQCVOEMJOH BDPSOBOEFTUSBWFSTFXIJDIXPSLTPOPMEFSCSPXTFST "Ͱ͸CBCFMQBSTFSͱCBCFMUSBWFSTFΛόϯυϧ͢Δͷ͸ఘΊͯɺݹ͍ϒϥ΢ βͰ΋ಈ͘BDPSOͱFTUSBWFSTFͷΈΛόϯυϧ͠ଓ͚Δ͢Δ͜ͱʹ͠·͠ΐ͏ɻ

Slide 16

Slide 16 text

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ͱͯ͠ѻ͍·͠ΐ͏ɻ

Slide 17

Slide 17 text

2#VUFTUSBWFSTFEPFTOULOPXUIFLFZPGUIF+49FMFNFOUT TPUIF USBWFSTFGBJMT 2Ͱ΋FTUSBWFSTF͸+49ཁૉͷLFZΛ஌Βͳ͍ͷͰτϥόʔεʹࣦഊ͠·͢ "5IFWJTJUPS,FZTVTFECZUIFCBCFMUSBWFSTFTIPVMEBMTPCFDPOWFSUFE UP+40/ FNCFEEFEJOUIFDPEF BOEQBTTFEUPUIFSVOUJNFTJEF "Ͱ͸#BCFMUSBWFSTF͕࢖͍ͬͯΔWJTJUPS,FZT΋+40/Խͯ͠ίʔυʹຒΊࠐ ΈɺϥϯλΠϜଆʹ౉͠·͠ΐ͏ɻ

Slide 18

Slide 18 text

24PSSZ *XBTBDUVBMMZVTJOHUPLFOTFRVFODFTBTXFMMBT"45TUP fi OEPVU UIFFYBDUMPDBUJPOPGPQFSBUPSTBQQFBSJOHJOBTTFSUJPOFYQSFTTJPOT TJHI 2͝ΊΜͳ͍͞ɺࣜͷதʹొ৔͢Δԋࢉࢠͷਖ਼֬ͳҐஔΛௐ΂ΔͨΊʹɺ࣮͸ "45͚ͩͰͳ͘τʔΫϯྻ΋࢖͍ͬͯ·ͨ͠ʢͨΊଉʣ "5IFO UIFUPLFOTFRVFODFQBSTFECZCBCFMQBSTFSTIPVMEBMTPCF DPOWFSUFEUP+40/ FNCFEEFEJOUIFDPEF BOEQBTTFEUPUIFSVOUJNFTJEF "Ͱ͸CBCFMQBSTFS͕QBSTFͨ͠τʔΫϯྻ΋+40/Խͯ͠ίʔυʹຒΊࠐΈɺϥ ϯλΠϜଆʹ౉͠·͠ΐ͏ɻ

Slide 19

Slide 19 text

\"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().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

Slide 20

Slide 20 text

$BTF4UVEZTUSJOHXJEUI

Slide 21

Slide 21 text

$BTFTUVEZ4USJOHXJEUI const truthy = '真理'; const falsy = 0; assert(truthy === falsy);

Slide 22

Slide 22 text

$BTFTUVEZ4USJOHXJEUI const truthy = '真理'; const falsy = 0; assert(truthy === falsy); assert(truthy === falsy) | | | | | 0 "真理" false (BQ

Slide 23

Slide 23 text

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ࢀߟಛੑΛఆΊ͍ͯ·͢ɻ

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

😺)FSFDPNFTUIF&NPKJT👻

Slide 26

Slide 26 text

&NPKJT const family = '👨'; const falsy = 0; assert(family === falsy);

Slide 27

Slide 27 text

2)PXEPZPVDBMDVMBUFTUSJOHXJEUIXIFOUIFDBQUVSFEWBSJBCMF DPOUBJOTFNPKJT 2Ωϟϓνϟͨ͠ม਺͕ֆจࣈΛؚΜͰ͍Δ৔߹ͷจࣈྻ෯ܭࢉΛͲ͏͠ ·͔͢ʁ "6TFFNPKJSFHFYQBDLBHFUPJEFOUJGZFNPKJTBOEUSFBUUIFNBT GVMMXJEUITUSJOHT "ʮFNPKJSFHFYʯύοέʔδΛ࢖ͬͯֆจࣈΛࣝผ͠ɺશ֯จࣈྻͱ͠ ͯѻ͍·͠ΐ͏ɻ

Slide 28

Slide 28 text

-PPLTHPPE const family = '👨'; const falsy = 0; assert(family === falsy); assert(family === falsy) | | | | | 0 "👨" false

Slide 29

Slide 29 text

)FSFDPNFTUIF&NPKJ;8+ ;FSP8JEUI+PJOFS 👁🗨 = 👁+🗨 👨 👨 = 👱+❤+💋+👱 👪 = 👱+👩+👧+👦

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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;

Slide 32

Slide 32 text

4UJMMCSPLFO const family = '👨👩'; const falsy = 0; assert(family === falsy);

Slide 33

Slide 33 text

)FSFDPNFTUIF5ZQF4DSJQU )FSFDPNFTUIF#BCFMPS )PXBCPVUTVQQPSUJOH999

Slide 34

Slide 34 text

IUUQDBUCPSHKBSHPOIUNMJOEFYIUNM

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXNZUIJDBMNBONPOUIUIF

Slide 37

Slide 37 text

"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

Slide 38

Slide 38 text

5IJTTFDPOEJTUIFNPTUEBOHFSPVTTZTUFNBNBOFWFSEFTJHOT ͜ͷೋ౓໨ͷγεςϜͦ͜ɺσβΠϯ͢Δ΋ͷͷ͏ͪͰ࠷΋ةݥͳ΋ͷͰ͋Δɻ 5IFHFOFSBMUFOEFODZJTUPPWFSEFTJHOUIFTFDPOETZTUFN VTJOHBMMUIF JEFBTBOEGSJMMTUIBUXFSFDBVUJPVTMZTJEFUSBDLFEPOUIF fi STUPOF5IF SFTVMU BT0WJETBZT JTBCJHQJMF Ұൠతʹɺೋ౓໨ͷγεςϜΛσβΠϯ͠ա͗Δ܏޲͕͋Δɻ͜ͷͱ͖ɺ࠷ॳͷ γεςϜσβΠϯͰ͸஫ҙਂ͘֎ͨ͋͠ΒΏΔΞΠσΞͱ૷০Λ࢖͏ɻ݁Ռ͸Φ ϏσΟ΢εͷݴͬͨΑ͏ʹʮࢁʯͱͳΔɻ IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXNZUIJDBMNBONPOUIUIF 5IFHFOFSBMUFOEFODZJTUPPWFSEFTJHOUIFTFDPOETZTUFN

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

*GUIFSFJTO`UBTJNQMFTPMVUJPOUPBQSPCMFN JOUFSSPHBUFUIFQSPCMFN CFGPSFZPVBDDFQUBDPNQMJDBUFETPMVUJPO*TUIFQSPCMFNZPV`SFUSZJOH UPTPMWFBDUVBMMZUIFQSPCMFNUIBUOFFETTPMWJOH 0SBSFZPVNBLJOH VOOFDFTTBSZBTTVNQUJPOTBCPVUUIFQSPCMFNUIBUBSFDPNQMJDBUJOH ZPVSTPMVUJPO ໰୊ʹ୯७ͳղ๏͕ଘࡏ͠ͳ͍ΜͩͬͨΒɺෳࡶͳղ๏Λड͚ೖΕΔલʹɺ ໰୊ʹର͠ɺ໰͍Λ౤͔͚͛ͯݕ౼ͯ͠ΈΔ΂͖ͩɻղ͜͏ͱ͍ͯ͠Δͦͷ໰ ୊͸ɺຊ౰ʹղ͘΂͖໰୊ͳΜͩΖ͏͔ɻ͋Δ͍͸ɺղ๏Λෳࡶʹ͢ΔΑ͏ ͳɺ໰୊ʹؔ͢ΔෆཁͳԾఆΛઃ͚ͯ͠·͍ͬͯͳ͍ͩΖ͏͔ɻ IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXUIFSVMFTPG 4PNFUJNFT*U`T#FUUFSUP4JNQMJGZUIF1SPCMFN3BUIFSUIBOUIF4PMVUJPO

Slide 41

Slide 41 text

-FUTSFEFTJHOUIFUIJSETZTUFN

Slide 42

Slide 42 text

#MBOLTJOUIFBTTFSUJPOFYQSFTTJPO assert(truthy === falsy);

Slide 43

Slide 43 text

.BLFUIFGPMMPXJOHTJNQMFBTTVNQUJPOT Լهͷ؆୯ͳલఏΛ͓͘ w5SBOTQJMFSTIBWFBDDFTTUPUIFDPEFJUTFMG w.PTUBTTFSUJPOTBSFXSJUUFOPOBTJOHMFMJOF wτϥϯεύΠϥ͸ίʔυͦͷ΋ͷʹΞΫηεͰ͖Δ w΄ͱΜͲͷBTTFSUJPO͸ҰߦͰॻ͔Ε͍ͯΔ #MBOLTJOUIFBTTFSUJPOFYQSFTTJPO"5IJSE4ZTUFN4PMVUJPO

Slide 44

Slide 44 text

5IFBTTFSUJPOMJOFDBOCFDVUPVUPGUIFDPEF 5IFQPTJUJPODBOCFEFUFSNJOFEBUUSBOTQJMFUJNF 5IFDBQUVSFEQPTJUJPOJTUIFQPTJUJPOJOUIFBTTFSUJPOTUSJOH TPOPOFFEUP QBSTFPSUSBWFSTFBUSVOUJNF BTTFSUJPOߦ͸ίʔυ͔Β੾Γग़ͤ͹ྑ͍ Ґஔ͸τϥϯεύΠϧ࣌ʹ֬ఆͰ͖Δ Ωϟϓνϟ͞ΕͨҐஔ͸͢ͳΘͪද໌ࣜจࣈྻͷதͷҐஔʹͳΔͷͰɺ࣮ߦ࣌ʹ QBSTF΍USBWFSTF͸ෆཁʹͳΔ #MBOLTJOUIFBTTFSUJPOFYQSFTTJPO"5IJSE4ZTUFN4PMVUJPO

Slide 45

Slide 45 text

.VMUJMJOFBTTFSUJPOFYQSFTTJPOT assert(truthy === falsy);

Slide 46

Slide 46 text

4UPQDBOPOJDBMJ[JOHBTTFSUJPOFYQSFTTJPOTUIBUTQBOTNVMUJQMFMJOFT *OTUFBE QBTTDBQUVSFEWBMVFTUPUIFUFTUSVOOFSBTBDUVBMFYQFDUFE ෳ਺ߦʹ·͕ͨΔද໌ࣜͷਖ਼نԽΛ΍ΊΔ ͦͷ͔ΘΓʹɺΩϟϓνϟͨ͠஋ΛBDUVBMFYQFDUFEͱͯ͠ςετϥϯ φʔʹ౉͢ .VMUJMJOFBTTFSUJPOFYQSFTTJPOT"5IJSE4ZTUFN4PMVUJPO

Slide 47

Slide 47 text

4USJOHXJEUIPG&NPKJT const family = '👨👩'; const falsy = 0; assert(family === falsy);

Slide 48

Slide 48 text

*UJTEJ ff i DVMUUPBDDVSBUFMZDBMDVMBUFUIFXJEUIPGBTUSJOH +VTUVTFPOFMJOFGPSFBDITUSJOH จࣈྻͷ෯Λਖ਼֬ʹܭࢉ͢Δͷ͸೉͍͠ จࣈྻͻͱͭຖʹҰߦ࢖͑͹ྑ͍ 4USJOHXJEUIPG&NPKJT"5IJSE4ZTUFN4PMVUJPO

Slide 49

Slide 49 text

8IZOPUKVTUVTFUIJTEFTJHOGSPNUIFCFHJOOJOH ࠷ॳ͔Β͜ͷઃܭʹ͢Ε͹ྑ͔ͬͨͷͰ͸ʁ

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

)PXEPZPVCVJMEUIF5IJSE4ZTUFN ͲͷΑ͏ʹ͢Ε͹ɺୈࡾͷγεςϜΛ࡞ΕΔͷͩΖ͏͔ʁ :PVCVJMEUIFPUIFSUXPTZTUFNT fi STU5IFSFJTOPPUIFSXBZ ࠷ॳʹଞͷೋͭͷγεςϜΛ࡞ΔͷͩɻͦΕҎ֎ͷํ๏͸ͳ͍ɻ IUUQTXXXBNB[PODPKQ6/*91IJMPTPQIZ.JLF(BODBS[EQ )PXEPZPVCVJMEUIF5IJSE4ZTUFN

Slide 52

Slide 52 text

5IFNPTUJNQPSUBOUBOEFMVTJWFTLJMMJTEFWFMPQJOHKVEHFNFOUBCPVU TZTUFNEFTJHOTPZPVDBODIPPTFTPMVUJPOTUIBUBSFBTTJNQMFBT QPTTJCMF CVUOPTJNQMFS5IJTJTWFSZIBSEUPUFBDIBOEMFBSOFE NPTUMZUISPVHIFYQFSJFODF Ұ൪ॏཁͰҰ൪΍͔͍ͬͳεΩϧ͸γεςϜΛઃܭ͢ΔͨΊͷ൑அྗͩɻ ݶΓͳ͘γϯϓϧ͕ͩγϯϓϧ͗͢ͳ͍σβΠϯ BTTJNQMFBTQPTTJCMF CVUOPTJNQMFS ͱ͍͏ͷ͸ͳ͔ͳ͔ڭ͑ΒΕΔ΋ͷͰ͸ͳ͘ɺ 
 େํܦݧΛॏͶ֮ͯ͑Δ΋ͷͩɻ BTTJNQMFBTQPTTJCMF CVUOPTJNQMFS IUUQTXXXRVPSBDPN)PXEJE&WBO1SJFTUMFZMFBSOUPQSPHSBN

Slide 53

Slide 53 text

0OFNPSFUIJOH

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

ᦲ஍*OUFSTFDUJOH)JHIXBZ (SPVOEXIJDIGPSNTUIFLFZUPUISFFDPOUJHVPVTTUBUFT TPUIBUIF XIPPDDVQJFTJU fi STUIBTNPTUPGUIF&NQJSFBUIJTDPNNBOE JTB HSPVOEPGJOUFSTFDUJOHIJHIXBZT ॾިͷྖ஍ʹࡾํͰ௨͍ͯͯ͡ɺͦ͜ʹઌʹԡ͑͞Ε͹ॾࠃͱ௨ͯ͡ࢧ࣋ ࢧԉΛಘΒΕΔ৔ॴ͕ʮᦲ஍ʢͪ͘ʣʯͰ͋Δɻ

Slide 56

Slide 56 text

IUUQT[FOOEFWOBLBBLJTUBSUJDMFTCG 8IFSFJTUIFJOUFSTFDUJOHIJHIXBZ

Slide 57

Slide 57 text

IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXQSPHSBNNJOHSVTUOE &OUFSUIF3VTUXPSME

Slide 58

Slide 58 text

IUUQTMFBSOJOHPSFJMMZDPNMJCSBSZWJFXQSPHSBNNJOHSVTUOE 1SPHSBNNJOH3VTU OE&EJUJPO 0VSHPBMXBTUPUBDLMFUIFCJH OFXDPODFQUTJO3VTUVQGSPOUBOE IFBEPO QSFTFOUJOHUIFNDMFBSMZBOEJOEFQUITPBTUPNJOJNJ[F MFBSOJOHCZUSJBMBOEFSSPS ΘΕΘΕͷ໨త͸ɺ3VTUͷେ͖ͯ͘৽͍͠ίϯηϓτʹ 
 ਖ਼໘͔ΒऔΓ૊Έɺ໌շʹɺͦͯ͠ৄࡉʹઆ໌͢Δ͜ͱͰɺ 
 ࢼߦࡨޡͰͷֶशΛ࠷খݶʹ͢Δ͜ͱͩɻ

Slide 59

Slide 59 text

0OFNPSFUIJOH

Slide 60

Slide 60 text

*TV ff FSFEGSPNUIFUZQJDBMTFDPOETZTUFNTZOESPNFJOUIFEFWFMPQNFOUPGNZPXO 044QSPEVDUT FTQFDJBMMZQPXFSBTTFSU *XJMMFYQMBJOXIBUTFDPOETZTUFNTZOESPNFJTBOEIPXUPSFDPWFSGSPNJU CBTFEPONZ PXOFYQFSJFODF ࣗ࡞044ϓϩμΫτɺಛʹQPXFSBTTFSUͷ։ൃʹ͓͍ͯయܕతͳʮηΧϯυγεςϜγϯυ ϩʔϜʯʹጶױ͠·ͨ͠ɻʮηΧϯυγεςϜγϯυϩʔϜʯͱ͸Կ͔ɺͲ͏΍͔ͬͯͦ͜ΒϦΧ όϦʔ͢Δ͔ɺࣗ෼ͷମݧΛϕʔεʹઆ໌͠·͢ɻ *OBEEJUJPO BOFXWFSTJPOXJMMCFSFMFBTFEPOUIFTBNFEBZ ͋Θͤͯɺ౰೔৽͍͠όʔδϣϯΛϦϦʔε͢Δ༧ఆͰ͢ BCTUSBDU

Slide 61

Slide 61 text

*TV ff FSFEGSPNUIFUZQJDBMTFDPOETZTUFNTZOESPNFJOUIFEFWFMPQNFOUPGNZPXO 044QSPEVDUT FTQFDJBMMZQPXFSBTTFSU *XJMMFYQMBJOXIBUTFDPOETZTUFNTZOESPNFJTBOEIPXUPSFDPWFSGSPNJU CBTFEPONZ PXOFYQFSJFODF ࣗ࡞044ϓϩμΫτɺಛʹQPXFSBTTFSUͷ։ൃʹ͓͍ͯయܕతͳʮηΧϯυγεςϜγϯυ ϩʔϜʯʹጶױ͠·ͨ͠ɻʮηΧϯυγεςϜγϯυϩʔϜʯͱ͸Կ͔ɺͲ͏΍͔ͬͯͦ͜ΒϦΧ όϦʔ͢Δ͔ɺࣗ෼ͷମݧΛϕʔεʹઆ໌͠·͢ɻ *OBEEJUJPO BOFXWFSTJPOXJMMCFSFMFBTFEPOUIFTBNFEBZ ͋Θͤͯɺ౰೔৽͍͠όʔδϣϯΛϦϦʔε͢Δ༧ఆͰ͢ BCTUSBDU

Slide 62

Slide 62 text

Available Today

Slide 63

Slide 63 text

OQNJOTUBMM%!QPXFSBTTFSUFTN PS OQNJOTUBMM%TXDQMVHJOQPXFSBTTFSU 5IBOLZPV

Slide 64

Slide 64 text

5IBOLZPV