「Inside Frontend #2」に参加してきました

freeeのアクセシビリティ、いまとこれから

アクセシビリティ

freeeのサービス

  • Webサイト
  • アプリ

Webサイト

アプリ

  • 読み上げない場合あり
    • アイコンにラベルがない
  • 関連づかない場合あり
    • フォーム(for属性)

Webサイトのこれから

AMA

  • A11yから遠いと感じる業種
    • エンターテイメント系
    • ゲーム、映画
  • タッチスクリーンによって指が目の代わりになってきている
  • 新規の時にコストをかけずに入れられるとよい
    • CIでlint入れるとか

参考

現場の ES201x とアーキテクチャの変遷と未来

フレームワークの振り返り

過去

変遷
  • 2003: jQuery
  • 2010: Backbone
    • Flashがなくなり始めて
  • Angular,React
太古
テンプレーティングの時代
  • コンポーネント的のな概念がでてきた
  • htmlの生成がクライアント側へ
    • underscore.template, handlebars
データバインディングの時代
  • 木構造を出力するものへ
  • データを更新すると描画も変わる
    • backbone.stickit,knockout, Angular.js
  • MVVMの導入

現在

  • ClientSideMVCの終焉
    • =Backbone
  • Rails由来のBackboneのMVCモデルは破綻
    • クラサバで必要な抽象は別物だった
  • 単方向データフロー

Flux,Obvervableの時代

  • EventとStateとViewを分離
  • Ex, Elm, Redux
  • FunctionalReactiveProgramming
  • Componentの内側にあるstateは悪
  • ReduxはRxのサブセット

トレンド

  • データをメモリに置くようになる
    • 仮想DOMによるバッファリング
  • ブラウザの機能をより賢く実装する
  • JS
    • 毎年更新
  • 多言語由来系
    • ScalaJSとか
  • WebAssemply系
    • Rust系があつい
  • AltJS
    • ES201xに吸い込まれて消滅
    • 生きてるのは型系
  • なぜ型?
    • テストが書きづらい
    • 静的チェックで済ませたい
    • observableがimmutable前提だと静的チェックないと作れない

未来

WebComponents
何が出来る
  • 泥臭いことしかない
  • 良いコード
    • 静的チェックできる
    • コードを捨てられること
      • QiitaのReact -> hyperappとか
  • lint
    • prettier
    • eslint: prefer-XXX
    • eslint: no-unused-vars
ゴール設定
  • スピードを突き詰めるのか
  • 継続して価値を届けるのか

まとめ

AMA

コンポーネントTDDの実践から見えたもの

コンポーネント単体テスト

リリース前

  • コンポーネント単体テストは書かない
  • ケースが複雑でコストが高い
  • リリース後にE2E/スナップショット入れればいい
    • 入れる時間ない
    • 今の開発フローのどこに入れる?
  • レビューに時間がかかるよういなる
    • 動作確認が..

コンポーネント単体テスト何使うか

  • Reactはenzyme
  • Vueは@vue/test-utils
  • Shadow関数mount関数

何を確認

  • porpの確認
  • DOMが意図したものか確認
  • イベント処理の確認

テストどうやって書くようにするか

  • 新規は必ず作る
  • 不安感
    • すぐ壊れる
    • 実装に対するテストケース
  • TDDやってみよう
    • 仕様に対するテストが書けるはず
    • 実装が変わっても壊れないはず

TDDの進め方

  1. テストを書く
  2. 動かして失敗する
  3. 実装する
  4. リファクタする

TDDのコツ

  • 仕様について考えて仕様に対してテストを書く
  • テストも小さくステップを踏んで書く
  • それでとりあえず通す
  • view的なロジックをテストする
  • react自体のテストにならないように注意する
  • 要素にはカスタムデータ属性をつけること
    • data-testid

TDDやってみて

  • 手が止まる時間が多い
    • 仕様を考える
  • 実装ははやい
    • ゴールが明確なので
  • トータルは変わらない
    • テスト書く前提なら?

テストコードの質

  • テストコードもソースコード
  • テストもちゃんとレビューする文化
  • テストコードもリファクタするべき

動的デザインガイドのつくり方

DesignSystemについて

  • SGDD
    • style guide driven development
  • Living Design Guideline

DesignSystemとは何か

  • 定義したデザインを迅速にプロダクトに反映させるシステム
  • デザイン系
    • 統一されたUX
    • 再利用性
  • 開発
    • 低コスト
    • 再利用性
  • 仕様

動的デザインガイドラインの作成ポイント

  • コードを参照してデザインガイドラインを作ること
    • ReactでいうとStoryBook
  • 他レイヤーの情報を含める
    • デザインの意図
    • 使いかた
    • ビジネス仕様
      • 技術情報しかないUIの羅列だと技術者しか役に立たない
  • UIコンポーネント間のデータ型を明確に定義する
    • UIが受け取る型を定義しておく
    • 同じデータを渡せばいつでも同じものができる状態

DesignSystemの事例

GYAOでの事例

古い構成から移行させる

  • ReactのようなモダンなFW必要?
    • なくてもできる

どうやって既存システムに適用したか

  • コードをロジックとテンプレートにわけること
  • コンポーネント化する
  • 通化出来るものは更に細分化
  • ViewとServer間のデータ定義をJSON-schemaにした

分類

  • Script
    • 動作
  • Style
    • スタイル
  • Template
    • テンプレート
  • README.md
    • 業務仕様も
  • package.json
    • モノレポにする

micro-benchmarking is hard

ベンチマークを作る

Webkit

  • 実行エンジンによっていろいろ最適化している
  • とりあえず10万回回してパフォーマンスとるとかは正確じゃない
  • 有名所のベンチマークでもやらかしてる
  • 検証対象の使われ方によって何をどう測るかも変わってくる
    • たくさん回せばいいなんてことじゃない
  • ポイント
    • returnしたものを使う
    • そうしないと不要だと判断されて消される

日経電子版を速くするためにやっていること

「規約に同意」のUX -ストレスフリーな同意UIとその実現方法-

攻めつづける FRESH! の Web ver.新春

Varyヘッダとキャッシュバリエーションの将来