矢倉さんのセッションの、「Webは小さな仕様をつくる流れで、ライブラリを作りやすくする低レイヤーを整備(レゴブロックのように)」というのが印象的だった。基調講演のえーじさんの説明と合わせて、Extensible Web Manifestoが今回ようやく腹落ちした。
後は、最後のWebXRの未来感がすごくて刺激になった。
私が参加したのは次のセッション。
基調講演
吉川徹、えーじ、岩井将行
- 1ヶ月にWebにアクセスするデバイスの数: 50億以上
 - Webの進化
 - 動画、Picture in Picture
 - WebRTC: ビデオ会議など
 - WebXR: WebでAR/VR
 - Web Authentication: 指紋や顔でログイン
 - WebAssembly + Web Audio: EUROPAのデモ参照
 - 仕組みを作る仕組みを、作る仕組みを作る
 - 「仕組みを作る仕組み」= web を作る仕組みを作る
 - オープン性
 - GitHubで議論
 - Browser Feature Status Dashboard
 - 相互運用性
 - 2つ以上のブラウザが実装しないと標準として認めない
 - Origin Trial
 - オリジンを限定(申請)して、新しいAPIを一定期間実験的に試す
 - ベンダープレフィックスによる混乱から生まれた
 - Extensible Web Manifesto
 - 低レイヤーのAPIをまず作る
 - 例)Web Components, CSS Houdini, Service Worker
 - Layered API
 - virtual-scroller: 画面全部のレンダリングをスクロールに応じて動的にして、パフォーマンスを改善(ネイティブやReactでは普通に使われている)
 - async local storage
 - AMP (Accelerated Mobile Pages)
 - ページの高速化
 - 多くの制約(により高速に)
 - Web Componentesベース
 - 課題: URLが変わってしまう(Googleのキャッシュから配信するため)
 - Web Packaging => URLが変わらないようにできる
 - Signed Exchange, Bundled Exchange
 - Feature Policy
 - 利用できる機能を制限、もしくはレポートを受け取る
 - "Web is the only platform no one owns." Dave Winer
 - Webをよりよくするために
 - 勉強会への参加・登壇
 - ブログを書く
 - ドキュメントの翻訳(MDNの翻訳会もある)
 - 仕様やブラウザベンダーへのフィードバック
 
ZOZOのグローバルECのフロントエンドアーキテクチャ設計
権守健嗣
設計を見直す上で考慮した技術とアーキテクチャー
- アプリ全体のアーキテクチャーを意識しておらず、フロントがアプリ層、データ層にも、バックエンドがプレゼン層にも介入
 - アプローチ1: フロントエンドがビジネスロジック(アプリ層)を持つ
 - クロスプラットフォーム実装: React Native, Weex, Flutter, Xamarin, NativeScript, Cordova, Titanium Mobileなど
 - Webも使えるもの
 - Cordova: 遅い
 - Titanium Mobile: 情報がない
 - Kotlin/Native, Kotlin/JS: セキュリティを考えると難しそう
 - アプローチ2:それぞれでアーキテクチャーを持つ
 - クリーンアーキテクチャーの思想を導入
 - Vue.jsのコンポーネントがUse Cases(ビジネスロジック)を包含
 - domainディレクトリ配下にRepository, Entityを配置
 - applicationディレクトリ配下にサービスやモデルを配置
 - フロントとバックエンドでAPIに求めることが違う(フロントは一括でほしい、バックエンドはシンプルにしたい)
 - BFF (Backends For Frontend): 実装大変、パフォーマンスに影響
 - GraphQL: フロントはクエリでデータを一括でとれる、バックエンドはシンプルにできる
 - 状態管理: VuexのSingle source of truthを実現できていないため、状態変更が正しく検知できない
 - 状態変更の検知
 - レスポンスで変更したリソースを返す: API内部の非同期変更に対応できない
 - ポーリング: リアルタイム性が増すと、サーバーの負荷が大きい
 - サーバープッシュ: コストに懸念
 - WebSocket, Server-Sent Events, gRPCの双方向ストリーミング
 - 現在は、フロントで適切に情報を取りに行くことに
 - Vuexの使い方: StateをやめてPage単位で管理
 - 共通はcommonを用意
 - ディレクトリ構成を整理
 
2018年のHTMLやCSSやAPIとか
矢倉眞隆
- Webは30間近(1989年3月誕生)
 - Webページからはじまり、Web 2.0でJSが再発見、HTML5で勢いづく、最近は落ち着いた?
 - 大きな仕様はつらいので、小さな仕様をつくる流れに
 - ライブラリにやさしく、ライブラリもプラットフォーム、ライブラリを作りやすくする低レイヤーを整備(レゴブロックのように)
 - HTML
 - 画像関連
 - lazyload: 遅延読み込み
 - importance: 読み込みの重要度
 - decoding: 遅延デコード
 - 使い方
 - カルーセルの最後の方の画像のimportanceをlowにする
 - 真ん中くらいの画像はlazyloadをonにして、フッターの画像はimportanceをlowにする
 - フォーム
 - (inputmode)
 - enterkeyhint: Enterキーの見た目を変える
 - passwordrules(提案中)
 - スタイルの共通化
 - <fieldset>と<legend>
 - <button>
 - スタイルのリセットをしやすいように
 - CSS
 - レイアウト
 - Gridが使える
 - Subgrid提案中
 - Flexboxにgapプロパティ(Firefoxのみ)
 - フォント
 - Fonts Module Level 3
 - Level 4のVariable Fontsも対応(MS Edgeのデモサイト参照)
 - ダイナミックサブセッティング(必要なものだけとってくる)の標準化が検討中
 - Scroll Snap
 - スクロールをピタッとさせる(スライドみたいに)
 - Scrollbar styling
 - スクロールバーの色と幅をカスタマイズ(scrollbar-width/color)
 - Houdini
 - WebKitで実装開始
 - Custom PropertiesをCSSだけで書けるように
 - WebComponents
 - WC元年(FF実装、Edgeが実装開始)
 - 検討中の機能もたくさん
 - Form participation
 - Template Instantiation
 - Lightweight default styling
 - WCは「HTML要素をつくる」もの、フレームワークとは補完関係
 - 新しいものを探せそうなところ
 - Google Developers
 - Mozilla Hacks / MDN
 
Web Components のリアル
aggre
資料:https://speakerdeck.com/aggre/realistic-web-components- Web Componentsの近況
 - Chrome, Safari, Firefoxはpolyfills不要、EdgeはDevelopingに
 - polyfills: webcomponents.js
 - Web Componentsの基本
 - Custom Elements
 - Shadow DOM
 - ES Modules
 - HTML Templatesは開発者は直接使わない
 - HTML Importsは非推奨
 - Custom Elements
 - 標準のコールバック機構を持ったクラス
 - constructor()
 - connectedCallback(): 小要素として接続されたとき
 - disconnectedCallback()
 - observedAttributes(): 属性が変更されたとき
 - adoptedCallback(): あまり使わない
 - Shadow DOM
 - DOMをカプセル化
 - CSSが外に影響しない
 - <slot>: Shadow DOMをつけると、元々の中身が消える。消えた中身はslotに入る
 - プロジェクトを超える
 - 例えば、ブランドアセット(<brand-mark>を定義)
 - ライブラリ
 - 例えば、次のようなものは、VueでもAngularでも何でも使える
 - <iron-autogrow-textarea>
 - <pinch-zoom>
 - ライブラリを探す場所
 - Webcomponents.org
 - GoogleChromeLabs
 - マイクロフロントエンド
 - Web Componentsの中にReactを隠蔽することもできる
 - ページの関心事と技術的関心事を分離する
 - SSR
 - SSR用のDOMを用意しておいて、アプリで書き換える。さらに、slotを使うと、Shadow DOMから自由にいじれる。
 - 現実的な手法
 - lit-html: 属性値が文字列になる制約がある、Functional Programingにはおすすめ
 - lit-element
 - Angular/Vue
 
Web プラットフォーム再考 ~PWA のもたらす未来の光と影 ~
ものえおさむ、eegozilla、chikoski
- PWAの基本
 - PWA: ネイティブアプリのようなUXを提供するWebアプリの概念
 - オフラインサポート
 - プッシュ通知
 - バックグラウンド処理
 - アイコンの追加(インストール)
 - PWAの価値を高めるAPI: CSS3, WebAssembly, WebVR, Web Payment
 - PWA採用例: Twitter Lite, Instagram, Googleマップ
 - PWA vs モバイルWeb vs モバイルApp
 - 機能: Web = PWA < Native
 - 開発
 - Web/PWA: JS / 任意エディター / Webブラウザ配布
 - Native: PFごとの言語 / PFごとのIDE / PFごとのアプリストア
 - ユーザー体験
 - アプリの審査、購入と課金: アプリストアがやってくれていることも多い
 - PWAはユーザーにメリットがあるのか?
 - Packt(電子書籍)
 - プッシュ通知でのセールおしらせは便利
 - タブと検索窓がないのがつらい
 - Qiita
 - ググった後、強制的にPWAに飛ばされる
 - 記事をタブで残しておけない
 - Yahoo! JAPAN
 - ホームアイコンのオファーがうざい
 - ながら見なので、ホーム画面においてもメリットない
 - ABC 2018 Spring(発表者自作のイベントサイト)
 - キャッシュのせいで思ったように更新されない
 - 端末ごとの挙動の差
 - ユーザーにとってのメリットをよく考えないとかえってUXが悪くなる
 - パフォーマンスがPWAがネイティブに勝ることはない
 - ユーザーのパラダイム(マジョリティのマインド)を理解して、PWAの機能を使うべき(自分のプレゼンスのためではない)
 
WebXR: Beyond WebGL
小山田晃浩
- WebXR Device API
 - ARとVRの両方のAPI
 - KhronosのOpenXRとも連携している?
 - Chrome Canaryでhttps/localhostで動く
 - ARのレイヤー
 - XR imaginary
 - WebGL scene
 - デモ
 - ARで床にキューブをおく
 - ARで床にきのこをはやす
 - ARで床にりんごをおく
 - glTF
 - 3Dモデルのフォーマット
 - Facebook、MS Officeなどが対応
 - Facebookに投稿
 - パワポにはりつけてアニメーション
 - CodeGridのglTF入門の記事参照
 - セキュリティ
 - 視線トラッキング
 - バーチャルキーボードの入力をチート
 - 視線から状況をチート
 - etc
 - まとめ
 - WebXR Device APIでブラウザさえあれば、WebでVR/ARが可能になる
 - iOSでは、制限はあるがすでに実現されている
 - glTFが重要な標準になる
 







