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
260
UIコンポーネント指向と「協働」
axross
6
2.8k
Introduction to Redux
axross
34
22k
作るのにデザイナーもエンジニアもない
axross
15
7.2k
なぜprottか
axross
4
2.7k
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
axross
0
400
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
axross
2
1.4k
gulpを使うと彼女ができるよ - かんたんな紹介とハンズオン
axross
2
1k
Other Decks in Programming
See All in Programming
QA x AIエコシステム段階構築作戦
osu
0
130
slogパッケージの深掘り
integral0515
0
120
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
260
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1.3k
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
150
可変変数との向き合い方 $$変数名が踊り出す$$ / php conference Variable variables
gunji
0
220
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
4
670
リッチエディターを安全に開発・運用するために
unachang113
1
230
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
2
440
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
2
1.2k
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
2
690
フロントエンドのパフォーマンスチューニング
koukimiura
6
2.3k
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
530
YesSQL, Process and Tooling at Scale
rocio
173
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
BBQ
matthewcrist
89
9.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Documentation Writing (for coders)
carmenintech
72
4.9k
Making Projects Easy
brettharned
116
6.3k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Why Our Code Smells
bkeepers
PRO
337
57k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
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!