やったこと
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を切る!
コンポーネント設計手法について
単一責任の原則
原則としてコンポーネントは一つのことに責任を持つべき
理由は再利用性が低くなるから
Organisms以上の単位のコンポーネントは「機能としての役割」は持たず「レイアウトとしての役割」を持つ
「これらのMolecule or Atomたちをどうレイアウトするか」にだけ責任を持つ
スタイルクローズドの原則
スタイルには2種類ある
- 見た目のスタイル
- レイアウトのスタイル
そこで、
子コンポーネントは親コンポーネントの”レイアウトのスタイル”を知ってはならない
親コンポーネントは子コンポーネントの”見た目のスタイル”を知ってはならない