Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
spa開発時にぶち当たった壁 3選
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
carotene4035
July 18, 2018
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
spa開発時にぶち当たった壁 3選
carotene4035
July 18, 2018
More Decks by carotene4035
See All by carotene4035
GraphQLのN+1問題を解決したい
carotene4035
1
250
読者を置き去りにする技術
carotene4035
13
8.2k
Aws is emotional.
carotene4035
2
300
名称未設定.pdf
carotene4035
0
230
migrationツールについて
carotene4035
0
110
AWSネットワーク入門
carotene4035
3
350
adtech history
carotene4035
0
110
ファイルアクセスに関する脆弱性
carotene4035
0
130
僕らだけのアニメを放映する
carotene4035
3
1.5k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
360
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
Agile that works and the tools we love
rasmusluckow
331
22k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
A designer walks into a library…
pauljervisheath
211
25k
How STYLIGHT went responsive
nonsquared
100
6.3k
How GitHub (no longer) Works
holman
316
150k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
700
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Transcript
SPA開発時にぶちあたった壁 3選
3選 1. 状態が管理しきれない(flux) 2. ローカルサーバとAPIサーバで通信できない 問題(セキュリティ)
3. 画面で共通の処理を入れたい問題(mixin)
1. 状態が管理しきれない
よくある画面
よくある画面
よくある画面 ① ② ③
よくある画面 • 同じデータを数カ所で参照している • 1箇所変更すると数箇所に変更が跳ねる
まだいい
もう死ぬ
よくある画面 • データを参照するコンポーネントが増えた時、 依存関係の管理で死ぬ (一度死んだ事がある) • 双方向依存になったりして
管理しづらい
そこでstoreパターン • 参照するデータを1箇所にまとめる • データが変更された時、 各コンポーネントに通知する
データは ここにあつめる
None
None
各コンポーネントに 値が通知される
特徴 • データが一つにまとまっているので わかりやすい • 処理の方向が1方通行でわかりやすい (依存方向も1方通行)
これをもっと推し進めたのがflux 今回はvuexというライブラリを使っています
考えてみると • このパターンは目新しくはない
考えてみると ・通信は一方通行 ・データは一箇所に まとまっている
戒め • 新しい技術がでてきたときに、 背景を考え、 汎用性の高い知識を抽出していきたい
ローカルサーバと開発サーバが 通信できない
こんなエラーをよく見る
原因 • 「Same-‐Origin Policy」に違反しているため
Same-‐Origin Policyとは • あるオリジンから取得したリソースからは、 同じオリジンのリソースだけアクセスできる という制限
None
Originとは • リソースの配信元 • 出身地的なもの
None
OK OK OK
実は • Same-‐Origin Policyに制限される場合と、 されない場合がある
None
OK NG
Same-‐Origin Policyに制限されない • script • img, video, audio
• object, embed, applet • frame, iframe • link, CSS
Same-‐Origin Policyに制限される • XMLHOpRequest(Ajax) • Canvas • Web
Strage • X-‐Frame-‐OpTons
どうして制限される必要があるのか • ユーザの機密データが超ぬすまれやすくなる • もしxhrが制限されなかったら…
機密情報GET
例えばこんなことが • ログイン中サービスの個人情報を転送 • ユーザが入力したデータをdomから取得して 自分のサーバに転送 • わりとやりたい放題
つまり、Same-‐Origin Policyは • 攻撃手法を減らすためにブラウザが標準で 設けている制限
ただし、 • xhrでCross-‐Originのリソースを取得したい時 はよくある • 例 APIサーバとのオリジンをまたいだ通信
対応方法 • その1 – CORSを使う • その2
– プロキシを使う
その1 • CORSを使う – Cross-‐Origin Resource Sharing(そのまんま) – レスポンスにヘッダを追加して送り返す
– そのヘッダに指定してあるoriginとは リソース共有を許可する
None
その1 • ヘッダ追加方法
その2 • プロキシを使う – 間にSame-‐Originのサーバを1つ挟む – サーバにはSame-‐Origin Policyが適用されないこ とを利用する
None
今回の対策 • プロキシサーバを使用することにしました – APIサーバの設定を書き換えるのはセキュリティ に的に怖い – Webpack-‐dev-‐serverにproxy機能があったため 実現できそう
今回の対策 • config/index.jsの設定
まとめ • ブラウザにはセキュリティ上、Same-‐Origin Policyという制約がかかっている • それを回避する方法がいくつかある
• 今回はプロキシを使用した
画面で共通の処理を入れたい問題
画面に共通処理を入れたい • その画面で必ず呼び出さなければ ならない処理がある • アカウント取得/メニュー取得 – 常に最新の情報を取得するため
画面に共通処理を入れたい • ただし、すべての画面で必要なわけではない – 例えばログイン画面や、 ログイン必要ない画面では必要のない処理
画面に共通処理を入れたい • よく使われる処理で、でもすべての画面で使う必 要のない処理 • 一般的なmoduleに似ている – 継承の場合、
継承しているクラス全てで処理を呼び出せてしまうが、 moduleならincludeしているクラスだけ処理を使える
画面に共通処理を入れたい • Vueではmixinを使う
画面に共通処理を入れたい
戒め • フレームワーク自体は新しくても、 概念自体は使い古されているものが多い (使い古されているからこそ安定している) • そこに気づきたい(願望)
今後も開発がんばります