Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TypeScriptを振り回せ!
Search
uhyo
December 17, 2021
Programming
28
9.2k
TypeScriptを振り回せ!
2021-12-17 Harajuku.ts Meetup #1
uhyo
December 17, 2021
Tweet
Share
More Decks by uhyo
See All by uhyo
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
7
2k
非同期処理を活用しながらRust製wasmとJSを連携する方法(wasm-bindgenを使いたくない人向け)
uhyo
4
3.5k
tsconfig.jsonの設定を見直そう!フロントエンド向け 2024夏
uhyo
25
8.5k
React 19を概念から理解する
uhyo
21
9.5k
require(ESM)とECMAScript仕様
uhyo
6
1.8k
TypeScript Quiz (Encraft #12 Frontend Quiz Night)
uhyo
8
1.7k
Shadow DOMとCSSの現状
uhyo
11
7.2k
TypeScriptってどんな言語? 言語そのものを知る面白さ
uhyo
16
8.9k
App Router時代のデータ取得アーキテクチャ
uhyo
49
16k
Other Decks in Programming
See All in Programming
CSC509 Lecture 08
javiergs
PRO
0
110
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
230
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
550
Server Driven Compose With Firebase
skydoves
0
400
Vue3の一歩踏み込んだパフォーマンスチューニング2024
hal_spidernight
3
3.1k
macOS でできる リアルタイム動画像処理
biacco42
7
1.9k
Kubernetes for Data Engineers: Building Scalable, Reliable Data Pipelines
sucitw
1
200
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.1k
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
350
僕がつくった48個のWebサービス達
yusukebe
18
17k
Nuxtベースの「WXT」でChrome拡張を作成する | Vue Fes 2024 ランチセッション
moshi1121
1
530
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
11
2.3k
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
The Cult of Friendly URLs
andyhume
78
6k
Scaling GitHub
holman
458
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
Statistics for Hackers
jakevdp
796
220k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Typedesign – Prime Four
hannesfritz
39
2.4k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Adopting Sorbet at Scale
ufuk
73
9k
Facilitating Awesome Meetings
lara
49
6k
Transcript
5ZQF4DSJQUΛৼΓճͤʂ VIZP )BSBKVLVUT
֓ཁ 5ZQF4DSJQUʹৼΓճ͞Ε͍ͯ·ͤΜ͔ʁ ʮܕΑ͔͘Βͳ͍͚ͲͱΓ͋͑ͣίϯύΠϧ௨͔ͬͨΒ0,ʯ ʮ5ZQF4DSJQU͕͋ΔԸܙΛ͋·Γײ͡ͳ͍ʯ ʮϩδοΫతʹOVMM͕དྷͳ͍ॴͳͷʹܕʹOVMM͕͍ͬͯΔʯ ʮؔͷฦΓ͕BOZͰίϯύΠϧΤϥʔʹ ͳΒͳ͍ͷͰؾʹ͠ͳ͍ʯ
֓ཁ 5ZQF4DSJQUΛ͍͜ͳ͢ஈ֊εςοϓΞοϓ͠Α͏ 5ZQF4DSJQUॳֶऀɾॳΊͯϓϩμΫγϣϯ͚5ZQF4DSJQU Λॻ͘ਓͳͲʹଃΔτʔΫ
ܕγεςϜͷׂͱత
ܕγεςϜͷׂʢҰൠʣ ܕݕࠪ ೖྗࢧԉ ίʔυੜ ਖ਼͕͠͞ূ໌Ͱ͖ͳ͍ϓϩάϥϜʹରͯ͠ ίϯύΠϧΤϥʔΛग़ͯ͘͠ΕΔ ܕใΛͱʹೖྗิͳͲΛఏڙͯ͘͠ΕΔ ܕใΛͱʹίϯύΠϧޙͷϝϞϦϨΠΞτ ͳͲ͕ܾ·Δ ʢi64ϏοτΈ͍ͨͳʣ
ܕγεςϜͷతʢҰൠʣ ܕݕࠪ ೖྗࢧԉ ίʔυੜ ਖ਼͕͠͞ূ໌Ͱ͖ͳ͍ϓϩάϥϜʹରͯ͠ ίϯύΠϧΤϥʔΛग़ͯ͘͠ΕΔ ϓϩάϥϜͷʢ͋Δछͷʣਖ਼͠͞Λอূ͢ΔͨΊʹར༻ ܕใΛͱʹೖྗิͳͲΛఏڙͯ͘͠ΕΔ ։ൃޮͷ্ͷͨΊʹར༻ ܕใΛͱʹίϯύΠϧޙͷϝϞϦϨΠΞτͳͲ
͕ܾ·Δ ͦͦίʔυΛίϯύΠϧͯ͠ಈ͔ͨ͢Ίʹඞཁ ʢ࣮ࡍʹEZOBNJDUZQFʹର͢ΔCPYJOHͱ͔͋Δ͕ʜʜʣ
ܕγεςϜͷతʢҰൠʣ ίʔυੜ ܕใΛͱʹίϯύΠϧޙͷϝϞϦϨΠΞτͳͲ ͕ܾ·Δ ͦͦίʔυΛίϯύΠϧͯ͠ಈ͔ͨ͢Ίʹඞཁ ʢ࣮ࡍʹEZOBNJDUZQFʹର͢ΔCPYJOHͱ͔͋Δ͕ʜʜʣ ίʔυੜʹܕ͕ඞཁͳݴޠͰͪΌΜͱܕΛ͚ͳ͍ͱ ϓϩάϥϜ͕ಈ͔ͳ͍ ίϯύΠϧΛ௨͢͜ͱ͕ͻͱͭͷΰʔϧʹͳΔ
Ұํɺ5ZQF4DSJQUͰ ܕݕࠪ ೖྗࢧԉ ίʔυੜ ਖ਼͕͠͞ূ໌Ͱ͖ͳ͍ϓϩάϥϜʹରͯ͠ ίϯύΠϧΤϥʔΛग़ͯ͘͠ΕΔ ϓϩάϥϜͷʢ͋Δछͷʣਖ਼͠͞Λอূ͢ΔͨΊʹར༻ ܕใΛͱʹೖྗิͳͲΛఏڙͯ͘͠ΕΔ ։ൃޮͷ্ͷͨΊʹར༻ 5ZQF4DSJQUͰ+BWB4DSJQUͷมʢτϥϯεύΠϧʣ
ʹܕใΛ༻͍ͳ͍ ʢ͔ͩΒ#BCFMͰมͰ͖Δʣ
Ұํɺ5ZQF4DSJQUͰ ίʔυੜ 5ZQF4DSJQUͰ+BWB4DSJQUͷมʢτϥϯεύΠϧʣ ʹܕใΛ༻͍ͳ͍ ʢ͔ͩΒ#BCFMͰมͰ͖Δʣ ʮಈ͚͍͍ʯͱ͍͏ߟ͑ํͩͱͲ͜·ͰམͪΔ͜ͱ͕Ͱ͖Δ ʢ࠷ѱશ෦BOZͰಈ͘ʣ
Ұํɺ5ZQF4DSJQUͰ ܕݕࠪ ೖྗࢧԉ ਖ਼͕͠͞ূ໌Ͱ͖ͳ͍ϓϩάϥϜʹରͯ͠ ίϯύΠϧΤϥʔΛग़ͯ͘͠ΕΔ ϓϩάϥϜͷʢ͋Δछͷʣਖ਼͠͞Λอূ͢ΔͨΊʹར༻ ܕใΛͱʹೖྗิͳͲΛఏڙͯ͘͠ΕΔ ։ൃޮͷ্ͷͨΊʹར༻ ϓϩάϥϜͷਖ਼͠͞Λ্͢Δͱ͍͏తҙ͕ࣝ 5ZQF4DSJQUΛ͏্Ͱॏཁ
5ZQF4DSJQUͰܕγεςϜΛ׆༻͢Δ ϓϩάϥϜͷਖ਼͠͞Λ্͢Δͱ͍͏తҙ͕ࣝ 5ZQF4DSJQUΛ͏্Ͱॏཁ ඞཁ࠷ݶͷܕ͚ͩॻ͘ͷͰͳ͘ɺೳಈతʹܕΛ׆༻͢Δ ͜ͱͰ5ZQF4DSJQUͷྗΛҾ͖ग़͢͜ͱ͕Ͱ͖Δ
5ZQF4DSJQUͰܕγεςϜΛ׆༻͢Δ 2ೳಈతʹܕΛ׆༻͢ΔͨΊʹඞཁͳͷʁ
5ZQF4DSJQUͰܕγεςϜΛ׆༻͢Δ 2ೳಈతʹܕΛ׆༻͢ΔͨΊʹඞཁͳͷʁ "Δؾͱ୳ڀ৺ͱࣝ
ܕΛ׆༻͢ΔͨΊʹඞཁͳ Δؾͱ୳ڀ৺ͱࣝ
ྫTUSJDU/VMM$IFDLTΛΕ͍ͯͨʂ // TypeScript + React ͷྫ // string ܕͷεςʔτͳͷʹॳظΛnullʹ͍ͯ͠Δʂ const
[name, setName] = useState<string>(null);
ྫTUSJDU/VMM$IFDLTΛΕ͍ͯͨʂ // TypeScript + React ͷྫ // string ܕͷεςʔτͳͷʹॳظΛnullʹ͍ͯ͠Δʂ const
[name, setName] = useState<string>(null); TUSJDUUSVFʹ͠ͳ͍ͱίϯύΠϧ͕௨ͬͯ͠·͏ มOBNFTUSJOHܕͳͷʹOVMM͕ೖ͍ͬͯΔঢ়ଶʹͳΔ ίʔυͷ҆શੑ͕͍ঢ়ଶ ˒ ίϯύΠϥΦϓγϣϯͳΔ͘ݫͯ͘͠͠5ZQF4DSJQUͷԸܙΛΑΓଟ͘ड͚Α͏ʂ
ࣝͰΛղܾ͢ΔγφϦΦ // TypeScript + React ͷྫ // string ܕͷεςʔτͳͷʹॳظΛnullʹ͍ͯ͠Δʂ const
[name, setName] = useState<string>(null); 5ZQF4DSJQUOVMM҆શੑΛඋ͑ͨݴޠͰ͋Δͱ͍͏ࣝΛ͍࣋ͬͯΔ ࠓճOVMM҆શੑ͕ಇ͍͍ͯͳ͍͜ͱʹٙΛ๊͘ TUSJDU/VMM$IFDLT͕ແޮʹͳ͍ͬͯΔ͜ͱʹؾͮ͘
Δؾͱ୳ڀ৺ͰΛղܾ͢ΔγφϦΦ // TypeScript + React ͷྫ // string ܕͷεςʔτͳͷʹॳظΛnullʹ͍ͯ͠Δʂ const
[name, setName] = useState<string>(null); TUSJOHܕͳͷʹOVMMͷՄೳੑ͕͋Δͱ͔͓͔͍͠ʂ ͬͱ҆શੑΛߴΊΔΓํ͕͋ΔͷͰʁʢΔؾʣ άάΔʢ୳ڀ৺ʣ TUSJDU/VMM$IFDLT͕ແޮʹͳ͍ͬͯΔ͜ͱʹؾͮ͘
5ZQF4DSJQUΛ͍͜ͳͨ͢Ίͷͭͷಓے ᶃ ͱʹ͔ࣝ͘Λ͚ͭͯϕετϓϥΫςΟεΛ࣮ફ͢Δ ᶄ ৗʹݱঢ়ʹٙΛ࣋ͪ͞Βʹ༏ΕͨΓํΛ୳ٻ͢Δ
5ZQF4DSJQUΛ͍͜ͳͨ͢Ίͷͭͷಓے ᶃ ͱʹ͔ࣝ͘Λ͚ͭͯϕετϓϥΫςΟεΛ࣮ફ͢Δ ᶄ ৗʹݱঢ়ʹٙΛ࣋ͪ͞Βʹ༏ΕͨΓํΛ୳ٻ͢Δ ͓͢͢Ί Δؾ͕͋Ε͕ࣝͳͯ͘Ͱ͖Δ lಈ͘z͜ͱ͕ελʔτͳ5ZQF4DSJQUͱ૬ੑ͕ྑ͍Γํ ݶք·Ͱ౸ୡ͢ΕᶃʹҠߦͰ͖Δ
ྫλϒΛΓସ͑Δͭ // TypeScript + React ͷྫ const [tab, setTab] =
useState<string>(“home”);
ྫλϒΛΓସ͑Δͭ // TypeScript + React ͷྫ const [tab, setTab] =
useState<string>(“home”); // λϒΓସ͑ setTab(“home”); setTab(“search”); // ίϯςϯπΛදࣔ switch (tab) { case “home”: return <HomeTab />; case “search”: return <SearchTab />; default: // ൃੜ͠ͳ͍ return null; }
ྫλϒΛΓସ͑Δͭ // TypeScript + React ͷྫ const [tab, setTab] =
useState<string>(“home”); // λϒΓସ͑ setTab(“home”); setTab(“search”); ϛε͍͢͠ setTab(“serach”); ൃੜ͠ͳ͍ذΛॻ͍͍ͯΔ // ίϯςϯπΛදࣔ switch (tab) { case “home”: return <HomeTab />; case “search”: return <SearchTab />; default: // ൃੜ͠ͳ͍ return null; }
5ZQF4DSJQU༻࣌ʹ͓͢͢Ίͷߟ͑ํ ʮਓ͕ؒؾΛ͚ͭͳ͚ΕͳΒͳ͍ʯ ͱ͍͏໘ʹग़ձͬͨΒٙʹࢥ͏ 5ZQF4DSJQUʹνΣοΫͯ͠Β͑ͳ͍͔ߟ͑Δ ͪΖΜ5ZQF4DSJQUʹݶք͋ΔͷͰແཧͳ͜ͱ͋Δ͕ɺ ͦΕͰߟ͑Δ͜ͱͰ5ZQF4DSJQUͷྗ͕͖·͢ Ϣχοτςετͷํ͕ద͍ͯ͠Δ߹͋Δ͕ɺͦΕΛݟ͚Δ ͷ5ZQF4DSJQUྗͷ͏ͪͰ͢
ྫλϒΛΓସ͑Δͭʢղܾฤʣ type Tab = “home” | “search”; const [tab, setTab]
= useState<Tab>(“home”); // λϒΓସ͑ setTab(“home”); setTab(“search”); // ίϯςϯπΛදࣔ switch (tab) { case “home”: return <HomeTab />; case “search”: return <SearchTab />; // default: // // ൃੜ͠ͳ͍ // return null; }
ྫλϒΛΓସ͑Δͭʢղܾฤʣ type Tab = “home” | “search”; const [tab, setTab]
= useState<Tab>(“home”); // λϒΓସ͑ setTab(“home”); setTab(“search”); UZQPίϯύΠϧΤϥʔʹʂ setTab(“serach”); ൃੜ͠ͳ͍ذॻ͘ඞཁ͕ͳ͍ // ίϯςϯπΛදࣔ switch (tab) { case “home”: return <HomeTab />; case “search”: return <SearchTab />; // default: // // ൃੜ͠ͳ͍ // return null; }
ίʔυʹҙਤΛࠐΊΑ͏
ྑ͍ίʔυҙਤ͕Θ͔Δ Ұൠ ྑ͍ίʔυಡΊҙਤ͕Θ͔Δ ίϝϯτίʔυຊମ͔ΒಡΈऔΕͳ͍ҙਤΛ ิ͏ͷͰ͋Δ ͨͩಈ͚ͩ͘ͷίʔυΑΓɺଞͷਓ͕ಡΜͰ ҙਤΛཧղ͍͢͠ίʔυΛॻ͖͘
ίʔυ͔ΒಡΈऔΒΕΔҙਤͷྫ const [tab, setTab] = useState<string>(“home”); // ίϯςϯπΛදࣔ switch (tab)
{ case “home”: return <HomeTab />; case “search”: return <SearchTab />; default: return null; } TUSJOHͳͷͰ͋ΒΏΔจࣈྻ Λड͚ೖΕΔTUBUFͰ͋Δ IPNF TFBSDIҎ֎Կදࣔ ͠ͳ͍ͱ͍͏༷Ͱ͋Δ
࣮ࡍͷҙਤ const [tab, setTab] = useState<string>(“home”); // ίϯςϯπΛදࣔ switch (tab)
{ case “home”: return <HomeTab />; case “search”: return <SearchTab />; default: return null; } TUSJOHͳͷͰ͋ΒΏΔจࣈྻ Λड͚ೖΕΔTUBUFͰ͋Δ IPNF TFBSDIҎ֎Կදࣔ ͠ͳ͍ͱ͍͏༷Ͱ͋Δ ಛఆͷจࣈྻ͔͠ೖΒͳ͍ ͚ͲTUSJOHͱॻ͍͍ͯΔ ࣮ࡍʹൃੜ͠ͳ͍έʔε͚ͩͲԿ͔ฦ͞ͳ ͍ͱίϯύΠϧΤϥʔʹͳΔͷͰॻ͍͍ͯΔ
࣮ࡍͷҙਤ const [tab, setTab] = useState<string>(“home”); // ίϯςϯπΛදࣔ switch (tab)
{ case “home”: return <HomeTab />; case “search”: return <SearchTab />; default: // ൃੜ͠ͳ͍ return null; } ίʔυ͔ΒಡΈऔΕͳ͍ҙਤΛ ิ͏ίϝϯτ
վྑ͞Εͨίʔυ͔ΒΘΔҙਤ type Tab = “home” | “search”; const [tab, setTab]
= useState<Tab>(“home”); // ίϯςϯπΛදࣔ switch (tab) { case “home”: return <HomeTab />; case “search”: return <SearchTab />; } ಛఆͷจࣈྻ͔͠ड͚͚ ͳ͍͜ͱ͕໌ࣔ͞Ε͍ͯΔ EFGBVMU͕ແ͍͜ͱͰ ཏੑΛΞϐʔϧ ʢEFGBVMU͕ແ͍ͷʹίϯύΠϧΤϥʔ͕ग़ͳ͍͜ͱ͔ΒܕͰཏੑ͕อূ͞Ε͍ͯΔͱཧղͰ͖Δʣ
ྑ͍5ZQF4DSJQUίʔυͱ ࣮ࡍͷҙਤͱίʔυ͔ΒಡΈऔΒΕΔҙਤ͕ Ұக͍ͯ͠Δίʔυ औΓಘΔΛਖ਼֬ʹهड़ͨ͠ܕΛ͏ ʢstringͰͳ͘TabͳͲʣ ࠷େݶMFUͰͳ͘DPOTUΛ͏ SFBEPOMZΛͳΔ͚͘Δ
ؔͷฦΓͷܕΛ໌ه͖͢໘Ͱ໌ه͢Δ ͳͲͳͲʜ
ྫແ͍͔͠Εͳ͍σʔλ type Session = { userId: string | null; userName:
string | null; userRole: “ADMIN” | “MEMBER” | null; // … }; ͋Γ͕ͪͳσʔλߏɿ ϩάΠϯ͍ͯͨ͠ΒVTFS*E VTFS/BNF VTFS3PMF͕શ෦ଘࡏ͢Δ
ྫແ͍͔͠Εͳ͍σʔλ // ϩάΠϯલ { userId: null, userName: null, userRole: null,
} ͋Γ͕ͪͳσʔλߏɿ ϩάΠϯ͍ͯͨ͠ΒVTFS*E VTFS/BNF VTFS3PMF͕શ෦ଘࡏ͢Δ // ϩάΠϯޙ { userId: “xxxxxxxx”, userName: “uhyo”, userRole: “MEMBER”, }
ྫແ͍͔͠Εͳ͍σʔλ // ϩάΠϯલ { userId: null, userName: null, userRole: null,
} ͋Γ͕ͪͳσʔλߏɿ ϩάΠϯ͍ͯͨ͠ΒVTFS*E VTFS/BNF VTFS3PMF͕શ෦ଘࡏ͢Δ // ϩάΠϯޙ { userId: “xxxxxxxx”, userName: “uhyo”, userRole: “MEMBER”, } " / 5 *1" 5 5 &3 /
ྫແ͍͔͠Εͳ͍σʔλ // ͜ΕԿʁ { userId: null, userName: “uhyo”, userRole: null,
} ɿ ͜ͷΑ͏ͳσʔλͷଘࡏΛڐͯ͠͠·͏ ʢຊདྷͷҙਤͱίʔυ͔ΒΘΔҙਤͷဃʣ
ྫແ͍͔͠Εͳ͍σʔλʢղܾฤʣ type Session = { user: { id: string; name:
string; role: “ADMIN” | “MEMBER”; } | null; }; ਖ਼͍͠σʔλߏɿ JE OBNF SPMFશ෦ଘࡏ͢Δ͔શ෦ଘࡏ͠ͳ͍͔ͷ
ྫͷϙΠϯτ ϙΠϯτɿ ϢχΦϯܕϦςϥϧܕΛ͏͜ͱͰຊདྷͷҙਤʹ͔ͳΓ͍ۙܕΛ දݱՄೳ ˒ ʮ%JTDSJNJOBUFE6OJPOʯΛ·ͩΒͳ͍ਓཁνΣοΫʂ ݕࡧͯ͠ΈΑ͏
ͳΔ͘5ZQF4DSJQUΛ׆༻͢Δ ί ồ υ ͷ ਖ਼ ͠ ͞ ܕͷਖ਼͠͞ ʢ5ZQF4DSJQU͕ܕνΣοΫ
ͯ͘͠ΕΔʣ ϩδοΫͷਖ਼͠͞ ʢਓ͕ؒؤுͬͯอূɾ ςετΛॻ͘ʣ ܕ͕Χόʔ͢ΔྖҬΛ ૿ͦ͏
ͳΔ͘5ZQF4DSJQUΛ׆༻͢Δ ί ồ υ ͷ ਖ਼ ͠ ͞ ܕͷਖ਼͠͞ ʢ5ZQF4DSJQU͕ܕνΣοΫ
ͯ͘͠ΕΔʣ ϩδοΫͷਖ਼͠͞ ʢਓ͕ؒؤுͬͯอূɾ ςετΛॻ͘ʣ ͳΔ͘ݫ͍͠ίϯύΠϥΦϓγϣϯʹ͢Δ ҙਤΛਖ਼֬ʹදͨ͠ܕΛॻ͘ͳͲ
ͳΔ͘5ZQF4DSJQUΛ׆༻͢Δ ί ồ υ ͷ ਖ਼ ͠ ͞ ܕͷਖ਼͠͞ ʢ5ZQF4DSJQU͕ܕνΣοΫ
ͯ͘͠ΕΔʣ ϩδοΫͷਖ਼͠͞ ʢਓ͕ؒؤுͬͯอূɾ ςετΛॻ͘ʣ ܕͷ΄͏͕ྑ͍ཧ༝ɿ • ܕγεςϜͷ΄͏͕ཧతഎܠʹ༏Εͯ ͓ΓɺཏతʹνΣοΫͰ͖Δ • ϢχοτςετΑΓܕऍͷ΄͏͕ υΩϡϝϯςʔγϣϯͱͯ͠༏Ε͍ͯΔ ʢҙਤ͕ΘΓ͍͢ʣ • ܕγεςϜͷ΄͏͕։ൃମݧ͕ྑ͍͜ͱ ͕ଟ͍
·ͱΊ
·ͱΊ5ZQF4DSJQUΛৼΓճͨ͢Ίʹ ϓϩάϥϜͷਖ਼͠͞ͷͨΊʹ5ZQF4DSJQUΛ׆༻͢Δ ͱ͍͏తҙࣝΛ࣋ͱ͏ ਓؒͰͳ͘5ZQF4DSJQU͕ؤுΔྖҬΛ૿ͦ͏ ͞Βʹ5ZQF4DSJQUΛ׆༻Ͱ͖ͳ͍͔ৗʹࡧ͠Α͏ 5ZQF4DSJQUॊೈͳݴޠͰ͋ΔͨΊɺΓํʹΑͬͯ҆શੑϨϕϧʹ͕ࠩग़Δ ݴޠͰ͢ɻΑΓߴ͍҆શੑϨϕϧΛࢦͯ͠ྗ͠·͠ΐ͏
͓·͚εϥΠυ'"2 2ݫ͍͠ίϯύΠϥΦϓγϣϯʹ͢Δͱ։ൃޮ͕མͪΔ 2͍͠ܕΛॻ͘ͷ։ൃޮ͕མͪΔ "ؾͷ͍ͤͰ͢ɻ ΦϓγϣϯܕΛ؇ͨ͘͜͠ͱͷπέɺʮෆ۩߹ͷ૿Ճʯ͔ ʮػցͷΘΓʹਓ͕ؒߟ͑Δ͜ͱͷ૿Ճʯͱݴ͏ܗͰݱΕ·͢ɻ લऀຊసͩ͠ɺޙऀͬͱ։ൃޮ͕མ͍ͪͯ·͢ɻ