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
99
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
77
AWSネットワーク入門
carotene4035
2
300
adtech history
carotene4035
0
66
ファイルアクセスに関する脆弱性
carotene4035
0
100
僕らだけのアニメを放映する
carotene4035
3
1.3k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Optimizing for Happiness
mojombo
376
70k
For a Future-Friendly Web
brad_frost
175
9.4k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Writing Fast Ruby
sferik
628
61k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
How STYLIGHT went responsive
nonsquared
95
5.2k
Side Projects
sachag
452
42k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
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を使う
画面に共通処理を入れたい
戒め • フレームワーク自体は新しくても、 概念自体は使い古されているものが多い (使い古されているからこそ安定している) • そこに気づきたい(願望)
今後も開発がんばります