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
98
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
270
名称未設定.pdf
carotene4035
0
200
migrationツールについて
carotene4035
0
77
AWSネットワーク入門
carotene4035
2
300
adtech history
carotene4035
0
63
ファイルアクセスに関する脆弱性
carotene4035
0
100
僕らだけのアニメを放映する
carotene4035
3
1.3k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
It's Worth the Effort
3n
183
27k
Documentation Writing (for coders)
carmenintech
65
4.4k
RailsConf 2023
tenderlove
29
900
Become a Pro
speakerdeck
PRO
25
5k
How STYLIGHT went responsive
nonsquared
95
5.2k
Typedesign – Prime Four
hannesfritz
40
2.4k
Bash Introduction
62gerente
608
210k
Writing Fast Ruby
sferik
627
61k
Teambox: Starting and Learning
jrom
133
8.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
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を使う
画面に共通処理を入れたい
戒め • フレームワーク自体は新しくても、 概念自体は使い古されているものが多い (使い古されているからこそ安定している) • そこに気づきたい(願望)
今後も開発がんばります