IndexedDB, Worker, Server-side Rendering そしてフロントエンドの未来
by
OKUNOKENTARO
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
IndexedDB, Worker, Server-side Rendereing そしてフロントエンドの未来 Aug 28, 2016 / GRAND FRONTEND OSAKA 2016 @armorik83
Slide 2
Slide 2 text
奥野 賢太郎 @armorik83 フロントエンドエンジニア ng-kyoto代表
Slide 3
Slide 3 text
• フロントエンド界隈で最近聞くワード • 今後学びやすくするために広く浅く紹介 • フロントエンドの本質とは • 未来はどうなるのか? • 未来を受け入れるためには? 今日する話
Slide 4
Slide 4 text
最近気になるワード
Slide 5
Slide 5 text
最近気になるワード • PWA • GraphQL • Server-side Rendering
Slide 6
Slide 6 text
• Progressive Web Apps・ • ウェブとアプリの両方の利点を兼ね備える • Google I/O 2016でも多くの時間を割かれた PWA
Slide 7
Slide 7 text
• ネットワーク接続に依存しない • オフラインでも動作 • 常に最新の状態に保たれる • Progressive Enhancement・ • 機能は性能ごとに段階的に強化される • 低性能の端末でも最新端末でも利用できる PWAの特徴
Slide 8
Slide 8 text
• Web Components • Service Worker • IndexedDB PWA界隈でよく聞く用語
Slide 9
Slide 9 text
• UIの部品化 • jQuery, Bootstrapなどがあった • Web標準のUI部品化に関する規格 • 現在はまだWorking Draft • 現時点で実装しているのはChromeのみ • PolyfillとしてライブラリPolymerが利用可能 • https://shop.polymer-project.org/ Web Components
Slide 10
Slide 10 text
• Custom Elements・ • 既存にはない新しいHTML要素を定義できる • Templates・ • タグ • Custom Elementsの雛形となるHTMLを定義 • Shadow DOM・ • DOMをカプセル化・ • CSSのスコープをShadow DOM内に限定 • 外部の干渉を防ぐ 主な仕様
Slide 11
Slide 11 text
• Web Workerの一種・ • 他には • Shared Worker・ • Audio Worker・ など Service Worker
Slide 12
Slide 12 text
• 処理をメインとは別のスレッドに移す • バックグラウンドでの実行を可能に • UIを担当するメインスレッドの処理を 中断・遅延させずに実行できるという利点 • Web WorkerからDOMにはアクセスできない そもそもWeb Workerとは
Slide 13
Slide 13 text
• Network Proxy・ • HTTPレスポンスを横取りできる • オフライン時の挙動を制御 • サーバ側の更新有無による適切なアクション • Cache API・ • キャッシュされたリソースを用いて オフラインでも動作する • Push API・ • Push通知の表示、制御が行える Service Workerの特徴
Slide 14
Slide 14 text
• ブラウザ内で扱える永続化用のインタフェースAPI • インデックスやトランザクションを扱える • スキーマに関してversionという概念がある • APIは低級 • Dexie.jsなどのライブラリを介したほうが扱いやすい IndexedDB
Slide 15
Slide 15 text
• Googleが運営するBaaS • 基本機能 • リアルタイムに更新されるNoSQLデータベース • OAuthなどの扱いやすい認証機構 • JSやAndroid, iOSに向けられたSDK • 豊富なドキュメント • PWA開発でFirebaseを組み合わせる例も見かける Firebase
Slide 16
Slide 16 text
✔ PWA • GraphQL • Server-side Rendering 最近気になるワード
Slide 17
Slide 17 text
• クエリ言語 • Facebookによって開発 • 仕様書を公開 • RFCドラフト • W3Cによるものではないが注目の仕様 GraphQL
Slide 18
Slide 18 text
• REST API・ • 複数のエンドポイント • /user, /photo, /comment...・ • HTTPリクエスト頻発 • 結果の表示順が不明 • オールインワンのエンドポイントでは? • リクエストは1回 • 重いのでユーザ体験が低下 現代のエンドポイント
Slide 19
Slide 19 text
• JSONに似た形式でクエリを記述 • クエリ構造と同形式のデータ構造で返ってくる • 描画に必要な情報を無駄なく取得 • Relay・ • ReactやGraphQLを横断的に扱えるフレームワーク • Facebook社のInstagramはRelayで開発 GraphQLの特徴
Slide 20
Slide 20 text
• SPAの欠点 • 空のHTML内にJSフレームワークがDOMを生成 • 生成には時間がかかる • 初期ビューは可能な限り高速に表示すべき • SEOの観点での懸念 • フロントエンドが生成するDOMはクロールできない なぜServer-side Rendering
Slide 21
Slide 21 text
• バックエンドでHTMLを生成してから返す • DOM生成コストの短縮 • 生成内容がバックエンドの時点で確定している • クローリング対象となる • 現代の需要に対して答えるための側面が強い • 未来感は無いがトレンド Server-side Rendering
Slide 22
Slide 22 text
フロントエンドの本質
Slide 23
Slide 23 text
• 出力 • バックエンドからのデータをユーザに提供したい • 入力 • バックエンドに送り永続化したい フロントエンドの本質
Slide 24
Slide 24 text
• バックエンドからのデータをユーザに提供 • 大量のデータ • 適切な粒度で画面に描画 • マークアップによる整合性 • デザインによる視認性 • コンポーネント指向という考え方 出力の本質
Slide 25
Slide 25 text
• クライアントでの入力 • フィールドへの入力 • クリックでの保存 などなど… • バックエンドに送り永続化 • エンドポイントに適した形式へのデータ変換処理 • 前時代では考えられない厚さの JavaScript中間レイヤー 入力の本質
Slide 26
Slide 26 text
JavaScriptが書けるかどうか
Slide 27
Slide 27 text
ではない
Slide 28
Slide 28 text
• Observerパターン • Flux・ • CQRS/ES・ • リアクティブプログラミング • 与えられるまで何もするな • 与えられたら常に正しい反応をしろ • 他が何をしているか知る必要はない データフローの適切な扱い
Slide 29
Slide 29 text
• ブラウザのDOM描画からの解放 • Server-side Rendering・ • 仮想DOM • React Native, NativeScript・ • DOMを作りたいわけじゃない • 送られてきたデータをユーザに表示したいだけ • DOMの生成手段がなんなのか • その表示先がPCブラウザか、モバイル上か • もはや問題ではない 描画の抽象化
Slide 30
Slide 30 text
• 最新のWeb標準の仕様をどこまで追えるかのスキル • 自分が全部の仕様を追えなくてもいい • 追えてる人を見つけられるかのスキル • 変化を恐れないスキル Web標準への学習意欲
Slide 31
Slide 31 text
未来もJavaScriptなのだろうか
Slide 32
Slide 32 text
• フクシア • Googleが開発中のオープンソースOS • Linuxカーネルを使っていない • 2016年8月15日にひっそりと公開 • Flutter・ • インタフェース用フレームワーク • Dart・ • ポストJavaScriptを目的に設計された言語 Fuchsia
Slide 33
Slide 33 text
Dart?
Slide 34
Slide 34 text
No content
Slide 35
Slide 35 text
Thank you! Aug 28, 2016 / GRAND FRONTEND OSAKA 2016 @armorik83