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
93
spa開発時にぶち当たった壁 3選
carotene4035
July 18, 2018
Tweet
Share
More Decks by carotene4035
See All by carotene4035
GraphQLのN+1問題を解決したい
carotene4035
1
180
読者を置き去りにする技術
carotene4035
13
8.1k
Aws is emotional.
carotene4035
2
260
名称未設定.pdf
carotene4035
0
200
migrationツールについて
carotene4035
0
75
AWSネットワーク入門
carotene4035
2
290
adtech history
carotene4035
0
62
ファイルアクセスに関する脆弱性
carotene4035
0
100
僕らだけのアニメを放映する
carotene4035
3
1.2k
Featured
See All Featured
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
109
6.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Why Our Code Smells
bkeepers
PRO
334
56k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.8k
Documentation Writing (for coders)
carmenintech
65
4.3k
Side Projects
sachag
451
42k
Music & Morning Musume
bryan
46
6k
The Power of CSS Pseudo Elements
geoffreycrofte
71
5.3k
Visualization
eitanlees
142
15k
A Modern Web Designer's Workflow
chriscoyier
692
190k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
0
130
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
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を使う
画面に共通処理を入れたい
戒め • フレームワーク自体は新しくても、 概念自体は使い古されているものが多い (使い古されているからこそ安定している) • そこに気づきたい(願望)
今後も開発がんばります