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
安全なJavaScriptを書く
Search
Kohei Asai
December 15, 2015
Programming
22
8.5k
安全なJavaScriptを書く
SCRIPTY #4 on 2015-12-15
Kohei Asai
December 15, 2015
Tweet
Share
More Decks by Kohei Asai
See All by Kohei Asai
The State Transparented Web Application
axross
1
270
UIコンポーネント指向と「協働」
axross
6
2.8k
Introduction to Redux
axross
34
22k
作るのにデザイナーもエンジニアもない
axross
14
7.2k
なぜprottか
axross
4
2.7k
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
axross
0
410
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
axross
2
1.4k
gulpを使うと彼女ができるよ - かんたんな紹介とハンズオン
axross
2
1k
Other Decks in Programming
See All in Programming
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
950
Foundation Modelsを実装日本語学習アプリを作ってみた!
hypebeans
0
130
Google Opalで使える37のライブラリ
mickey_kubo
3
150
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
240
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
540
CSC305 Lecture 10
javiergs
PRO
0
300
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
290
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
100
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
440
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2.6k
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
340
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
3
800
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.9k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Visualization
eitanlees
150
16k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
For a Future-Friendly Web
brad_frost
180
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Designing for humans not robots
tammielis
254
26k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Faster Mobile Websites
deanohume
310
31k
Transcript
҆શͳJavaScriptΛॻ͘ @axross SCRIPTY #4 on 2015-12-15
whoami » @axross / Kohei Asai » Gunosy Inc. »
ωτήഇਓ -> հޢۀք -> Webۀք » SPAॻ͍͓ͯۚΒͬͯ·͢
ͨΓલͳ͜ͱΛ͠· ͢
ʮྫ֎ʯ
ྫ֎ʹର͢Δೝࣝ » Errorͷ͜ͱ » ྫ֎͕εϩʔ͞Εɺcatch͞Εͯͳ͍߹ɺ࣮ߦ͕ࢭ·Δ » ϓϩμΫγϣϯͰ࣮ߦ͕ࢭ·Δͱக໋త » ʮۃྗΤϥʔϋϯυϦϯά͠Α͏ʂʯͬͯؾ࣋ͪʹͳΔ͕...ʁ
None
27. ʮࢮ͵ͣͷϓϩάϥϜΛແཧʹ ੜ͔͓͍͍͚ͯͯ͠ͳ͍ʯ try-catch ϒϩοΫΛίʔυϕʔεʹେྔʹೖΕΕɺʮྫ֎͕ൃੜͯ͠ ઈରʹࢭ·Βͳ͍ʯͱ͍͏ΞϓϦέʔγϣϯΛ࡞Δ͜ͱ͕Մೳͳͣ Ͱ͢ɻ ͨͩɺ͜Εɺ͏ࢮΜͰ͍ΔਓͷମΛఝ͔Կ͔Ͱݻఆ͠ɺແཧཧ ཱͬͨঢ়ଶʹ͍ͯ͠ΔΑ͏ͳͷͰ͕͢......ɻ --
ΦϥΠϦʔɾδϟύϯʮϓϩάϥϚ͕Δ͖97ͷ͜ͱʯ
ແཧΓੜ͔͞ΕͨϓϩάϥϜ » ϓϩμΫγϣϯͰྫ֎͕throw͞ΕͯͳΒͳ͍ » ͳͥͳΒɺϓϩάϥϜͷ࣮ߦ͕ࢭ·ͬͯ͠·͏͔Β » Ͱɺͦͷྫ֎ԿʹΑΔͷͳͷ͔ʁ » ڥɾঢ়گʹΑͬͯൃੜͨ͠ͷʁ(HTTPݻ༗όάͳͲ) »
୯७ͳ։ൃऀͷϛεʹΑΔͷʁ » ͜ͷྫ֎ΛcatchͰ௵͢ͷϚζ͍Μ͡Όͳ͍ͩΖ͏͔ʁ
ߟ͑Δ͖͜ͱ » ਖ਼ৗͳಈ࡞Ͳ͏͍͏ܗͳͷ͔ʁ » ͕ؔҙਤ͠ͳ͍ҾΛͬͯݺΕͨΒʁ » ͜͜Λ༨ܭͳ͓ੈͰʹʮແࢹ͢Δʯͱ͔ͯ͠͠·͏ͱɺ։ൃ ऀͷਓతͳϛεڐ͢Մೳੑ͕͋Δ » ʮ͜͏͍͏έʔε͋Δ͔͠Εͳ͍ʯͱ͍͏ରԠΑ͘ͳ͍
» ʮ͍͚͋ͬͯͳ͍ɺ͔ͩΒྫ֎ͩʯ » ͜Ε͕ྫ֎ͷਖ਼͍͠ΘΕํͩͱࢥ͏
ʮؾ͔ͳ͍ʯํ͕ා͍ » ༏͗͢͠ΔAPI࡞Βͳ͍ » ʮArray͡Όͳͯ͘ड͚͚Δ෮ॲཧͷؔʯΛͲ͏ࢥ͏͔ʁ » νʔϜͰೝ͕ࣝ߹ͬͯΕ͍͍ » ͔͠͠ɺόάʹʮؾ͚ͳ͘ͳΔʯͷશʹବ »
σόοάςετόάΛݕग़͢ΔͨΊʹ͋Δ » ݕग़Ͱ͖ͳ͘ͳͬͯ͠·ͬͨΒɺͦΕʮ༏͍͠ʯͩΖ͏͔ʁ
Ͳ͏ͨ͠Β͍͍͔
throwΛා͕Γ͗͢ͳ͍ » throw͖͢ͷͪΌΜͱ͠Α͏ » ։ൃதʹྫ֎Λ౿ΊΕɺݕग़ͮ͠Β͍όάΛ༧ͨ͜͠ͱʹͳ Δ » ʮਖ਼ৗಈ࡞ͳΒى͜Δͣͷͳ͍throwʯා͕Γա͗ͳ͍͍ͯ͘ Α͏ͳʁ »
ແɺͪΌΜͱσόοάஈ֊Ͱݕग़͓ͯ͘͠ » Ϗδωεతͳສ͕Ұʹඋ͑ͯɺϦΧόϦʔͰ͖ΔΑ͏ʹ࡞Δ
assert / unassert » twada/unassert » ίʔυதͷassert()console.assert()Λআ͢Δͷ » throwͷΘΓʹassert()ΛͬͯɺAssertionErrorΛ͛Δ »
assert()ͳͲͷ෦͚͕ͩunassertʹΑͬͯআ͞ΕɺϓϩμΫ γϣϯ࣌ʹAssertionError͕ൃੜ͠ͳ͘ͳΔ » http://www.slideshare.net/t_wada/unassert
ΤϥʔΛऩू͢Δ » window.onerrorͰ΄΅શͯͷྫ֎ΛcatchͰ͖Δ » catchͨ͠ͷΛΤϥʔऩूαʔϏεʹ͛Δ » Sentry » Airbrake »
sourcemaps͕͋ΕಡԽޙͷίʔυղऍͯ͘͠ΕΔ » ͋Δ͍ɺGoogle AnalyticsʹஷΊΔ » ྫ֎Λऩूͯ͠ɺঢ়گݻ༗ݻ༗ͷόάΛݕग़͠Α͏
Lint͢Δ » eslintɺjshintɺjslint » ίʔυͷόουϓϥΫςΟεγϯλοΫεΤϥʔΛݕͯ͠ڭ͑ ͯ͘ΕΔ » ελϯεΛܾΊͯɺݫ͠Ίʹઃఆ͢Δɺ͖ͦͯͪ͠ΜͱकΔ » ਓతͳϛεΛ͍͘Β͔ݮͰ͖Δ
» ؇ΊΔͷةݥɺ؇ΊΔ߹͖ͪΜͱ͠߹͏ » ઃఆϑΝΠϧΛॻ͘͜ͱͰɺֶͼ͋Δ͔ʁ
ςετΛॻ͘ » ྫ֎ɺςετΛॻ͍ͯ։ൃதʹ͖ͪΜͱग़ձ͓ͬͯ͘ » ςετ͕େมͩͱײͨ͡ΒɺͦΕਓతϛε͕ى͖͍͢ͱ͍͏αΠ ϯ » ޙʑʹόάͷݪҼΛḷΔ͍͍ಓඪʹͳΔ » αϘͬͪΌବ!
ίʔυϨϏϡʔ͢Δ » Lintͯ͠ɺςετΛॻ͍ͯɺϛεΛ͢Δ͜ͱ͋Δ » ਓతͳϛεΛݟ͚ͭΒΕΔۀϑϩʔΛ͖ͪΜͱ࡞Ζ͏ » ϛεΛؾܰʹࢦఠͰ͖Δۭؾ࡞ΓΛ͠Α͏ » ϨϏϡʔͯ͠ίʔυΛڞ༗͓͚ͯ͠ɺଞͷਓ͕༨ܭͳϛεΛ͠ͳ͘ ͯࡁΉ
·ͱΊ » ʮͦͷྫ֎ຊʹѲΓ௵͍͍ͯ͠ͷͩΖ͏͔ʁʯ » ͦΕ͕ʮͲ͏͍͏ྫ֎ͳͷ͔ʯΛ͖ͪΜͱߟ͑Α͏ » JavaScriptΛॻ͘ྔ͕૿͖͑ͯͨ » ੲʮແཧΓੜ͖ͯΔJavaScriptʯ͕·Εͨ »
ࠓͦ͏Ͱͳ͍ɺJSͰΞϓϦέʔγϣϯΛߏங͢Δ » ৭ʑͳࡦΛଧͪɺ҆શͳJavaScriptΛॻ͜͏ʂ
Thank you for listening!