Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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