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.8k
TypeScriptを振り回せ!
2021-12-17 Harajuku.ts Meetup #1
uhyo
December 17, 2021
Tweet
Share
More Decks by uhyo
See All by uhyo
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
2
930
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
3
760
TypeScript 6.0で非推奨化されるオプションたち
uhyo
17
6.9k
Claude Code 10連ガチャ
uhyo
5
1k
AI時代、“平均値”ではいられない
uhyo
8
3.8k
意外と難しいGraphQLのスカラー型
uhyo
5
1k
RSCの時代にReactとフレームワークの境界を探る
uhyo
13
4.8k
知られざるprops命名の慣習 アクション編
uhyo
12
3.4k
libsyncrpcってなに?
uhyo
0
790
Other Decks in Programming
See All in Programming
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
Oxlint JS plugins
kazupon
1
1k
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
210
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
300
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.5k
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
750
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
50
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
Embracing the Ebb and Flow
colly
88
5k
Faster Mobile Websites
deanohume
310
31k
Context Engineering - Making Every Token Count
addyosmani
9
670
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
310
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
260
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͍͠ܕΛॻ͘ͷ։ൃޮ͕མͪΔ "ؾͷ͍ͤͰ͢ɻ ΦϓγϣϯܕΛ؇ͨ͘͜͠ͱͷπέɺʮෆ۩߹ͷ૿Ճʯ͔ ʮػցͷΘΓʹਓ͕ؒߟ͑Δ͜ͱͷ૿Ճʯͱݴ͏ܗͰݱΕ·͢ɻ લऀຊసͩ͠ɺޙऀͬͱ։ൃޮ͕མ͍ͪͯ·͢ɻ