No.
2022-02-22
  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

やったこと

Atomic Designについて

styled-componentsをまとめる方法

Multiple Inheritance (Styled Components)

import styled, { css } from styled-components;

const baseStyles = css`
  background: #ddd
`;

const HeaderItem = styled(HorizontalListItem)`
  ${baseStyles}
`;

const HeaderDropDownLi = styled(DropDownLi)`   
  ${baseStyles}
`;

このようにすれば複数のcssを共通化することができる

Atomic Design

Atomic Design における Atom, Molecule, Organism の見極め方

Atoms

Atoms are the basic building blocks of matter. Applied to web interfaces, atoms are our HTML tags, such as a form label, an input or a button.

基本的にはHTMLタグ要素になるレベルで分ける

Molecules

Molecules are groups of atoms bonded together and are the smallest fundamental units of a compound. These molecules take on their own properties and serve as the backbone of our design systems.

それ自体が独立して存在はできないが、Atom ほど無機質でなく、最低限の意味をそれ自体が帯びる要素

たとえば「削除ボタン」は「ボタン」ほど汎用的ではないが、それが何かを削除するものであることをユーザに伝えることしかできず、それ単体では存在できない。つまり、最低限の意味を持った上での汎用化と言える。

Organisms

Organisms are groups of molecules joined together to form a relatively complex, distinct section of an interface.

UI設計、ビジュアルデザイン、HTMLコーディングを実際に行う場合に「〇〇エリア」「〇〇ボックス」「〇〇領域」と呼ばれるもので、それ自体が独立して意味を持ち、ユーザとのインタラクションを定義可能なものという位置付けになる。

Organism は groups of molecules と定義されているが、実際には直下に Atom を直接持ってもいいし、Organism の中に Organism を持つ、つまり Organism がネストされることもある。

食べログにおけるAtomic Design

食べログでのAtomic Design 〜どう分類しているか編〜

Organisms

一般的な責務:

  • サービスとして意味のある単位の塊。
  • 他のAtoms/Molecules/Organismsや純粋なHTMLで構成される。
  • 独立して成立するコンテンツを提供する。

食べログでのOrganisms:

  • ドメインが入ったらOrganisms。
  • 他に依存するコンポーネントがなかったとしても、ドメインが入った時点でOrganismsにする。
  • useContextによるContext接続可。
  • その機能のためのAPIを叩くのはここ。

ドメインが入るとは?
-> 特定のコンテンツ・コンテキストじゃないと使えない状態。

「他のコンポーネントに依存」とは?
-> 別のコンポーネントをimportしている状態。

Molecules

一般的な責務:

  • 一つ以上のAtomsに依存したcomponent。
  • ユーティリティ的な塊

食べログでのMolecules:

  • 抽象的な機能を提供する。
  • ドメインが入ってはいけない。
  • 他のAtomsやMoleculesのコンポーネントに依存している。
  • Contextへのアクセスはしない。
  • 自分自身で状態はなるべく持たない。

Atomsとの違いは「他のコンポーネント」に依存しているかどうか

Atoms

一般的な責務:

  • これ以上分けられない塊。
  • 汎用的に使えるcomponent。

食べログでのAtoms:

  • 抽象的な機能を提供する。
  • ドメインが入ってはいけない。
  • Contextへのアクセスはしない。
  • 自分自身で状態はなるべく持たない。
  • 他のコンポーネントに依存していなければAtoms。

ユーザ行動のプロセスに合わせてAtomic Designを切る!

スクリーンショット 2022-02-22 14 02 49
スクリーンショット 2022-02-22 14 03 11

Atomic Design という名のデザイン整理術

コンポーネント設計手法について

単一責任の原則

原則としてコンポーネントは一つのことに責任を持つべき

理由は再利用性が低くなるから  

Organisms以上の単位のコンポーネントは「機能としての役割」は持たず「レイアウトとしての役割」を持つ

「これらのMolecule or Atomたちをどうレイアウトするか」にだけ責任を持つ

スタイルクローズドの原則

スタイルには2種類ある

  • 見た目のスタイル
  • レイアウトのスタイル

そこで、
子コンポーネントは親コンポーネントの”レイアウトのスタイル”を知ってはならない
親コンポーネントは子コンポーネントの”見た目のスタイル”を知ってはならない