Slide 1

Slide 1 text

,B[VTIJ,POPTV !LB[VTIJLPOPTV -:$PSQPSBUJPO ࣾ಺πʔϧ͔Βੜ·Εͨ044 lUTSFNPWFVOVTFEz ʹΑΔϑϩϯτΤϯυ։ൃͷޮ཰Խͱ඼࣭ͷ޲্ 6*5ʷ#PO fi SF'SPOUFOE.FFUVQ

Slide 2

Slide 2 text

HJUIVCDPNMJOFUTSFNPWFVOVTFE

Slide 3

Slide 3 text

. ├── node_modules/ ├── src/ │ ├── App.tsx │ ├── Button.tsx │ └── Heading.tsx └── package.json ػೳͷ঺հ

Slide 4

Slide 4 text

// src/App.tsx import { ReactNode } from 'react'; import { render } from 'react-dom'; import { Button } from './Button'; const App = () => (
click me
); render(, document.querySelector('#app')); // src/Heading.tsx export const Heading = () =>

My Sample App

; // src/Button.tsx export const Button = ({ children }: { children?: ReactNode }) => ( {children} ); export const label = 'button label'; #FGPSF

Slide 5

Slide 5 text

// src/App.tsx import { ReactNode } from 'react'; import { render } from 'react-dom'; const App = () => (
click me
); render(, document.querySelector('#app')); // src/Button.tsx export const Button = ({ children }: { children?: ReactNode }) => ( {children} ); "GUFS

Slide 6

Slide 6 text

@@ -11,12 +11,7 @@ const App = () => ( render(, document.querySelector('#app')); -// src/Heading.tsx -export const Heading = () =>

My Sample App

; - // src/Button.tsx export const Button = ({ children }: { children?: ReactNode }) => ( {children} ); - -export const label = 'button label'; %JGG

Slide 7

Slide 7 text

UTSFNPWFVOVTFEͱ͸ FYQPSU͞Ε͍ͯΔ͜ͱͰؾ͖ͮʹ͍͘σουίʔυΛࣗಈͰ࡟আ͢Δπʔϧ w ;FSPDPO fi H w UTDPO fi HKTPOΛ΋ͱʹʮ࢖ΘΕ͍ͯΔʯ͜ͱΛ൑அ w ඞཁͳϑΝΠϧ͸PQUJPOͰແࢹͰ͖Δ

Slide 8

Slide 8 text

τϐοΫ w Ϟνϕʔγϣϯ w 5ZQF4DSJQUίʔυΛม׵͢Δͱ͸Ͳ͏͍͏͜ͱ͔ w ม׵͢Δํ๏ w πʔϧ͕΋ͨΒͨ͠ޮՌ w 044Խ

Slide 9

Slide 9 text

Ϟνϕʔγϣϯ 5ZQF4DSJQUίʔυΛม׵͢Δͱ͸Ͳ͏͍͏͜ͱ͔ ม׵͢Δํ๏ πʔϧ͕΋ͨΒͨ͠ޮՌ 044Խ

Slide 10

Slide 10 text

Ϟνϕʔγϣϯ w ίϯϙʔωϯτϥΠϒϥϦͷஔ͖׵͑Λ͖͔͚ͬʹσουίʔυ໰୊͕ݦࡏԽ w Ϟδϡʔϧͷґଘؔ܎Λ୧Δඞཁ͕͋Γ؆୯ʹ࡟আͰ͖ͳ͍ w ࣗಈԽͰ͖Ε͹ຬ଍

Slide 11

Slide 11 text

Ϟνϕʔγϣϯ 5ZQF4DSJQUίʔυΛม׵͢Δͱ͸Ͳ͏͍͏͜ͱ͔ ม׵͢Δํ๏ πʔϧ͕΋ͨΒͨ͠ޮՌ 044Խ

Slide 12

Slide 12 text

ߏจ໦ ίʔυ͸ߏจ໦ʹม׵͞ΕΔ export const message: string = 'hello world';

Slide 13

Slide 13 text

5ZQF4DSJQUίϯύΠϥ͕΍͍ͬͯΔ͜ͱ ߏจ໦ͷঢ়ଶͰܕνΣοΫ΍+BWB4DSJQU΁ͷม׵ॲཧ͕ߦΘΕΔ export const message = 'hello world'; export const message: string = 'hello world'; ίʔυ ߏจ໦ ߏจ໦ ίʔυ QBSTF DPOWFSU QSJOU

Slide 14

Slide 14 text

5ZQF4DSJQUίʔυΛม׵͢Δͱ͸Ͳ͏͍͏͜ͱ͔ ߏจ໦ͷϊʔυΛ௥Ճɾ࡟আɾฤू͢Δૢ࡞Λॻ͘͜ͱ ߏจ໦ ߏจ໦ ૢ࡞

Slide 15

Slide 15 text

5ZQF4DSJQU"457JFXFS

Slide 16

Slide 16 text

Ϟνϕʔγϣϯ 5ZQF4DSJQUίʔυΛม׵͢Δͱ͸Ͳ͏͍͏͜ͱ͔ ม׵͢Δํ๏ πʔϧ͕΋ͨΒͨ͠ޮՌ 044Խ

Slide 17

Slide 17 text

5ZQF4DSJQU$PNQJMFS"1* ͕΍Δ͜ͱ ࣗ෼Ͱ΍Δ͜ͱ ύʔε ϓϦϯτ τϥόʔε τϥόʔε֤ͨ͠ϊʔυͷૢ࡞

Slide 18

Slide 18 text

5ZQF4DSJQU$PNQJMFS"1*Λ࣮ࡍʹ࢖ͬͯΈΔ export const message: string = 'hello world';

Slide 19

Slide 19 text

import ts, { Node, ScriptTarget } from "typescript"; const code = ` export const message: string = 'hello world'; `; const sourceFile = ts.createSourceFile( "src/index.ts", code, ScriptTarget.ES2022 ); const visitor = (depth: number) => (node: Node) => { console.log( `${Array(depth).fill("-").join("")}> [${ ts.SyntaxKind[node.kind] }] ${node.getText(sourceFile)}` ); ts.forEachChild(node, visitor(depth + 1)); }; ts.forEachChild(sourceFile, visitor(1));

Slide 20

Slide 20 text

-> [FirstStatement] export const message: string = 'hello world'; --> [ExportKeyword] export --> [VariableDeclarationList] const message: string = 'hello world' ---> [VariableDeclaration] message: string = 'hello world' ----> [Identifier] message ----> [StringKeyword] string ----> [StringLiteral] 'hello world' -> [EndOfFileToken]

Slide 21

Slide 21 text

UTNPSQIͰૢ࡞͕ΑΓ؆୯ʹ w 5ZQF4DSJQU$PNQJMFS"1*͸গ͠ϋʔυϧ͕ߴ͍ w $PNQJMFS"1*ͷϘΠϥʔϓϨʔτίʔυΛ࡟ݮͰ͖Δ w Α͘࢖͏ૢ࡞Λؔ਺ͱͯ͠ఏڙ w ϩʔϨϕϧͳ"1*ʹ΋ΞΫηεͰ͖Δ UTNPSQIΛ׆༻͢Δ͜ͱͰΑΓεϐʔσΟʹ࣮ݱͰ͖ͨ

Slide 22

Slide 22 text

Ϟνϕʔγϣϯ 5ZQF4DSJQUίʔυΛม׵͢Δͱ͸Ͳ͏͍͏͜ͱ͔ ม׵͢Δํ๏ πʔϧ͕΋ͨΒͨ͠ޮՌ 044Խ

Slide 23

Slide 23 text

։ൃΛৼΓฦͬͯ w ࣾ಺πʔϧ͸͢΂ͯͷέʔεΛΧόʔ͢Δඞཁ͸ͳ͍ w ίʔυϨϏϡʔͰ඼࣭Λ୲อ w ϥΠϒϥϦͷҠߦ࡞ۀΛߴ଎Խ

Slide 24

Slide 24 text

೾ٴͨ͠ޮՌ w ϩδοΫʹઐ೦Ͱ͖ΔͨΊϦϑΝΫλϦϯάͷϋʔυϧ͕Լ͕Δ w ؾ͔ͮͳ͔ͬͨσουίʔυͷଘࡏ͕໌Β͔ʹͳΔ

Slide 25

Slide 25 text

Ϟνϕʔγϣϯ 5ZQF4DSJQUίʔυΛม׵͢Δͱ͸Ͳ͏͍͏͜ͱ͔ ม׵͢Δํ๏ πʔϧ͕΋ͨΒͨ͠ޮՌ 044Խ

Slide 26

Slide 26 text

044ԽͷܦҢ ϓϩμΫτͷϦϙδτϦ಺ʹ࣮૷ ݕূͰ͖ͨλΠϛϯάͰผϦϙδτϦʹ੾Γग़͠ ࣾ಺/1.Ͱެ։ (JUIVCͰ044Խ

Slide 27

Slide 27 text

044ԽͷϝϦοτ w ࣾ֎Ͱࣗ෼͕࡞ͬͨίʔυΛ࢖͑Δ w ࣾ಺ͷೝ஌౓ΛߴΊΔ͜ͱ͕Ͱ͖Δ w ۀ຿࣌ؒΛ࢖ͬͯπʔϧΛվળͰ͖Δ w ࣾ಺ͷผϦϙδτϦʹల։͠΍͘͢ͳͬͨ

Slide 28

Slide 28 text

·ͱΊ w ϥΠϒϥϦͷҠߦͰൃੜ͢Δσουίʔυͷ࡟আΛࣗಈԽ w ίʔυͷม׵͸͖ͭͭΊΔͱߏจ໦ͷม׵ॲཧΛॻ͘͜ͱ w 5ZQF4DSJQU$PNQJMFS"1*͸ͦΜͳʹ೉͘͠ͳ͍ w πʔϧ࡞Γ͸ϓϩμΫτ։ൃͷݱ৔Ͱ΋໾ʹͨͭ w 044ԽͰࣾ֎ʹؐݩɾࣾ಺ʹల։

Slide 29

Slide 29 text

HJUIVCDPNMJOFUTSFNPWFVOVTFE