- DevFest 2018 Tokyoに参加してきました。
- 昨年に続き参加しました。Firebaseは変わらず、加えてFlutterも流行ってるなという印象でした。いろいろな分野の話を聞けてとても勉強になりました。
- タイムテーブルと公開されてる資料一覧です。
- 以下聴講したセッションのメモ書きです。
実践!!Web パフォーマンス改善!
- 宇都宮 佑亮さん(Google)
- 資料非公開(要点をツイートして頂いていたのでそれを載せておきます)
ご参加頂いた皆様、ありがとうございました。最後駆け足でしたが、Webのパフォーマンスに興味をもっていただけたでしょうか?何点がパフォーマンス改善のポイントをお伝えしましたが、こちらで振り返りたいと思います。#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
まずはLighthouseです。v3.0からAuditの項目が増えて非常に使いやすくなったので、是非ともお試しください。https://t.co/y3fsqScf1Y#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
「なるべく軽く、そして同じものは送らいない」コードのminifyや圧縮は必須で行ってください。MinifyはUglifyJSなどのモジュールを使ってみてもいいですし、CDNの機能をレバレッジするのもいいと思います。https://t.co/raArDZm7ne#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
JavaScriptは最もコストがかかるリソースです。ダウンロードだけでなく実行までにParse/Compileも必要。大きなバンドルはCode Splitしましょう。本日はDynamic importを使ったcodesplitをお見せしましたが、詳しい話はこちらをご確認ください。https://t.co/WSFmx1aKz0#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
画像は圧縮 & LazyLoadしてください。圧縮はCDNをレバレッジしてもimageminなどのモジュールを使うのもありです。@addyosmani のEssential Image Optimizationは非常に勉強になります。https://t.co/Awf3HvKq3w#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
スクロールに応じたLazyLoadは本日はIntersection Observerを利用しましたが、lazysizesなどのライブラリを利用するのもよしです。カルーセルは意外と盲点です。First Viewに必要な分だけに絞るとこれまたよしです。https://t.co/DuVx53o2PYhttps://t.co/edSXGqrIbD#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
link rel=preload, preconnect, prefetchなどを使ってブラウザに何を早めに届けてほしいかをお伝え下さい。こちら非常に強力なWeb APIなので以下をご参照のこと。https://t.co/xyW7RnZ3SS#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
Web Fontのコントロールもfont-displayを使うと簡単にできます!パフォーマンスを考慮してfont-display:optionalで100ms以内にWeb Fontが落とせなければ(=Service Worker等キャッシュしてない限りは)システムフォントを使うという戦略もありです。https://t.co/gsRRgUmSSe#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
Render Blocking Scriptsはasyncかdeferしましょう。AsyncとDeferの違い含めローディングまわりのTipsはこちらの動画で非常に楽しく勉強できます!https://t.co/SDsHhIdejG#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
また、DevtoolsのCode CoverageやCritialを使うと、表示エリアでに使用されているCSSのみを確認・抜き出すことができます。「最低限」をインライン化してFirst contentful/meaningful paintを最適化しましょう!https://t.co/mHQU6hEdf5#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
本日のフォローアップとして是非ともこちらの動画を参照いただけますともろもろ理解が深まるかと思います。是非ともみんなでパフォーマンス改善に燃えましょう!本日はありがとうございました!!https://t.co/iyw4g7OVXT#DevFest18 #PerfMatters
— Yusuke Utsunomiya (@uskay) 2018年9月1日
パフォーマンスを計測する
- パフォーマンスの計測はLighthouseを使うと良い
- Chrome68からv3になった
- 処理速度上がった
- 解析結果の内容も変わった
サンプルサイトを最適化
- なるべく軽く同じものは送らない
- text compress
- css minify
- css/jsのカバレッジ
- devtoolで確認できる
- 読み込んでるのに使われてないコードは意外と多い
- bundleしたファイルの内容をorganizationで確認
- code splitting
- dynamic import
- 画像の扱い
- いろいろツールはある
- lazy loadする
- カルーセルはlazy loadしないと重くなるので注意
- 初期表示に不要な画像は送らない
- Webフォント
- 後から読み込まれると適用前のフォントで最初出てしまう
<link rel="preload">
を使うと良い
- スクリプトのブロッキング
- defer
- 非同期にダウンロードして読み込んだ順に実行
- async
- 非同期にダウンロードしてダウンロードした順に実行
- defer
参考
Flutter Overview
- Rui Kowaseさん(メルカリ)
Flutterとは
特徴
- MaterialDesignに沿ったコンポーネント
- FlutterGalleryというアプリでどんなものが作れるか確認できる
- ドキュメント充実
- Web開発者向けとかReactNative開発者向け等々充実してる
- FlutterSyatemArchitecture
開発フロー
setup
- flutter doctorコマンドで環境が整ってるか確認できる
dev
- AndroidStudio or VSCode
- Widget = コンポーネント
- StatelessWidget -> 状態を持たないWidget
- https://flutter.io/widgets/
build/release
CD
- fastlaneをサポート
Google I/O 2018のセッション
- Flutter × MaterialDesign
- Flutter × Firebase
- Reactive Framework
Flutterの今
- githubのスター数
- beta1(2018/3)発表で増えた
- Google I/O後もまた増えた
Firebase Overview for native application
- Daiki Matsudateさん(FOLIO)
Firebaseのサービス
- 20くらいある
- 3つに分類される
- build your app
- improve app quality
- grow your business
とりあえず入れたいFirebase
Firebase Crashlytics
- クラッシュ解析ツール
- クラッシュログ収集解析する
Firebase Paformance
- パフォーマンスを計測してくれる
- 滞在時間
- 描画時間
Google Analytics for Firebase
- モバイル向けにはFirebase使う
App Index
- Googleの検索結果にアプリを表示する
- ダウンロードボタンも出せる
Firebase Prediction
- GA入れてること前提
- 7日間のデータから次の行動を予測
- デフォルトは4つの属性が取れる
- 離脱しそう
- 離脱しなさそう
- 課金しそう
- 課金しなさそう
- デフォルトは4つの属性が取れる
- 離脱しそうなユーザにだけ特定のキャンペーンとか
- A/B Testingでの対象を離脱しそうな人だけにするとか
- プッシュ通知を送る対象に指定とか
- In-App messaging
Firestore
Firebase Realtime Database
- NoSQL cloud db
- リレーションは持たせず階層は浅くする
- クライアント側でjoinしないといけない
- json
- offline
Firebase Firestore
- リレーションがある
- 参照をセットできる
- クエリが使える
Firebase Cloud Function
- Firebaseの更新ややhttpリクエストをトリガーに処理を実行する
Angularの最新情報
- lacoさん
フロントエンド周り
- 選定しないと行けないものが多い
- フレームワーク
- ツール
- 等々
- Angularはこれを解決する
Angularで開発
雛形生成/起動
- AngularCLIで簡単に雛形作成
ng serve
で起動- ホットリロードも
コンポーネント
テストファイルも作られる
ng test
で実行できる- セットアップ不要
MaterialDesign
ng add @angukar/material
- ライブラリがインストールされる
- MaterialDesignのコンポーネント用意されてるから使うの簡単
build
ng build
でバンドルされる- サーバに配置したらデプロイ完了
- Webpackの設定なんかは不要!
周辺ライブラリ
- Stackblitz
- Web上でAngularのコードを実行できる
- https://stackblitz.com/
- AngularPWA
- 簡単にPWA対応
- Ionic
- WebViewベース
- NativeScript
- ネイティブを叩く
- Angular Universal
- node上でAngularが動く
今後
Introduction of Polymer 3.0
- kazuyoshi kawakamiさん
Polymer Project
WebComponents
- Google I/O 2012で初めて取り上げられた
- CustomElements
- ShadowDOM
- HTML Imports
現在のWebComponents
- polyfill入れればすべてのブラウザで使える
- エコシステム
- WebComponents版のnpm
webcomponents.org - Discuss & share web components
- 共存できるFW
custom-elements-everywhere.com
Polymerってきもい
- Polyfillでしょ?
- 当初はWebComponentsのPolyfill
- 2.0からはPolyfillを切り離してWebComponentsを作るためのFW
- bower
- 今はnpmでも使える
- HTML Imports
- HTML Improtsは中止に
Polymer3.0
- Google I/O 2018で発表
- Bower -> npm
- HTML Imports -> ES Modules
- 3.0できもかった部分が解決された
- WebComponentsのメインストリームとしてのPolymerが完成
事例紹介
- 聴き鳥テスト
kikitoritest.jpn.panasonic.com
- JSFW使ってない
- Polymer2.0
- WebComponents
- Redux
- WebComponentsでRedux使えるライブラリがある?
- Web Audio
- PWA
- オフライン対応
作ってみて
- WebComponentsだけでもアプリ作成可能
- ルーティング周りで苦労
- JSFW + WebComponentsはあり
TypeScript導入で得られる「変えていく勇気」
- okunokentaroさん(クレスウェア)
TS採用する理由
昔のTS知ってる人の誤解
- 型定義ファイルの管理が面倒
- 今は違う
- npmで管理できる
npm i -D @types/react
- 途中から導入できない
- 混ぜて運用できる
- ただしjs部分は一番ゆるいany型になる
- .jsならスルー/.tsなら型チェック
- unknown型
- 3.0からの機能
- anyではなくunknown型で
「変えていく勇気」
- コードは腐る
- 仕様変更
- 技術の進化
- 自分たちのスキルアップ
- リファクタリング
- 常にリファクタリングし続ける
- 型検査による安心感
- 仕様変更の対応
- 新しい仕様でコンパイルエラー発生させる
- それを順に潰していけばOK
- 不安を取り除く
- テスト
- 型
- ドキュメント
- 型は良質なドキュメント
機械学習、どこから手をつける?
- 上総 虎智さん(BrainPad)
機械学習で今何できる
- 自動運転での活用
- 目をスキャンして心疾患を予測
- GoogleGlassでスマートファクトリー
- 手が空かない作業で役立つ
どこから手をつける
- 動くものをまず作ること
- やってみないとわからないがつきまとう
- プロトタイプの難易度は下がってる
- 機械学習の学習実装
- 学習済みモデルのデプロイ先
- TensorFlow Lite
- ML Kit for Firebase
- AIY
- TensorFlow.js
- なんでブラウザ上で?
- No device/ No install
- Interactive
- Sensors
- Data stays on the client
- なんでブラウザ上で?
プロダクトに仕上げるために
まとめ
- 機械学習モデルを開発して動かすまでのハードルが下がった
- 必ずしも難しい手法を使う必要はない
- シンプルな方法が継続活用しやすい