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
spa開発時にぶち当たった壁 3選
Search
carotene4035
July 18, 2018
0
100
spa開発時にぶち当たった壁 3選
carotene4035
July 18, 2018
Tweet
Share
More Decks by carotene4035
See All by carotene4035
GraphQLのN+1問題を解決したい
carotene4035
1
190
読者を置き去りにする技術
carotene4035
13
8.1k
Aws is emotional.
carotene4035
2
270
名称未設定.pdf
carotene4035
0
200
migrationツールについて
carotene4035
0
78
AWSネットワーク入門
carotene4035
2
300
adtech history
carotene4035
0
67
ファイルアクセスに関する脆弱性
carotene4035
0
100
僕らだけのアニメを放映する
carotene4035
3
1.3k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
550
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
A Philosophy of Restraint
colly
203
16k
Visualization
eitanlees
146
15k
KATA
mclloyd
29
14k
Docker and Python
trallard
44
3.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
240
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
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を使う
画面に共通処理を入れたい
戒め • フレームワーク自体は新しくても、 概念自体は使い古されているものが多い (使い古されているからこそ安定している) • そこに気づきたい(願望)
今後も開発がんばります