整理整頓

思考を整理するためにアウトプットするブログ。

読書 Atomic Design ~堅牢で使いやすいUIを効率良く設計する 後半まとめ

作業概要と実施理由

ATOMIC DESIGNの実践部分をひとまずやってみよう!と思ったけど、まずは作れるようになってから読むテストについてが大半だったのでサンプルプロジェクトを動かしながら概要を抑えるだけにした。テストの自動化は興味があったのでちょうど良かった。

作業時間/見積:5.5h / 4h

学び

  • Pages層とTemplates層の違いは動的データを扱うか次第
  • どのテスト手法取り込むのかという問題がありそう
    • テストの種類は後述しているが、こんなに種類があると思っていなかった
    • プロダクトやメンバー構成で、どのテストを自動化するのかを検討する必要がありそう
      • 世のWeb制作をしている人たちは、どうやってテストを選定しているのか気になる

メモ

  • Atomsは抜き出した後に抽象化する
    • 番組のサムネイル → 画像を表示するデザイン要素 → Img
    • 番組タイトル → 見出し情報を表示するデザイン要素 → Heading
    • チーム内で共通認識取れていればOK
  • これがコンポーネント・リストか…すごい
  • properties.cssにデザインのパターンとなる具体の数値を集める
  • Fluxアーキテクチャとは?
  • テスト手法一覧
    • 単体テスト
      • 1つのUIに対してどんな情報を渡しても崩れないか目視で確認するために行う
        • それを確認するツールがStorybook
        • 1つのUIに対する情報のセットをStoryと呼ぶ
    • リグレッションテスト
      • 意図しない変更を防ぐために行う
      • 構造でテストするときはjestのスナップテストを使う
        • 開発前のスナップショットと差分が出ていないか確認する
        • 意図通りであればスナップショットを撮り直して上書きする
      • ビジュアルでテストするときはBackstopJSを使う
        • 画像でスナップショットを保存しておき、テスト時に差分を検知する
    • ロジックテスト
      • UIの見た目と構造を決定するロジックが正しく動作することを確認するために行う
      • jestを使う
        • BDD(Behavior Deiven Development)という記述スタイル
        • 会社でたま〜に触るrspecもBDD
    • インタラクションテスト
      • ユーザーのアクションを適切にUIが処理しているか確認するために行う
      • Enzymeを使う
        • 子の階層をモックに差し替えて単体のUIをテストすることができる
        • レンダーツリーから取得するAPIが用意されている
    • コード・カバレッジ
      • テストがどの程度網羅されているのかを確認するために行う
      • istanbulを使う
    • レイアウトテスト
      • さまざまな画面サイズで表示が崩れないか確認するために行う
      • ビジュアルテストで使ったBackstopJSを使う
      • レスポンシブデザインのテスト
        • レスポンシブなレイアウトを実装しているTemplates層でテストを行う
        • viewportsを設定することで指定したwidthやheightでビジュアルテストを実行できる
      • リキッドレイアウトのテスト
        • Templates層より子の階層でテストを行う
        • それぞれのコンポーネントがどんな画面幅でも崩れなければOK
    • パフォーマンステスト
      • 動作が重くなっていないかを確認するために行う
      • ネットワーク・アクセス
        • 通信の回数が適正か
          • 画像のSprite化
        • データサイズが適正か
          • 画像のレスポンシブ化(RIaS: Responsive Image as Service)
          • 画像のフォーマットの最適化
      • JavaScript実行時間
        • 子の不要な再描画を減らす
          • React ver15.3で登場したPureComponentを使うと更新処理が必要かどうかを自動で判断してくれる
          • 細かく制御した方が、パフォーマンスが出ることもあるので計測しながら使い分ける
      • レイアウト・ペイント処理
        • 不要なレイアウト・ペイント処理を減らす
        • ReactのAPIを正常に使っていれば更新範囲が最小になる
        • どうしてもカスタマイズしたいときはthis.refsを使ってDOM操作をする
  • デザイナーはトップダウン、エンジニアはボトムアップのアプローチで設計する
  • 未調査
    • GraphQL
    • プロトタイプベース言語
    • create-react-appがやってること

学習計画

  • 基本を学ぶ

    • [x] エディターの準備
    • [x] チュートリアルやる
    • [x] デバッグ、デプロイ環境を整える
    • [x] Atomic designを読む
    • 手を動かす系は業務でできそうなので、予定変更
  • サーバーを絡める

    • 業務ではフロントエンド完結で実装することになりそうなので、予定変更