どのレイヤーに分ける??AtomicDesignでコンポーネントを分ける方法
2023-12-12
AtomicDesignで「コンポーネントはどこまでわけるべきなの?」
ということについて解説させていただきます!
ざっくり概要
AtomicDesignは、5階層のレイヤーにパーツを分けて開発するUI設計手法です。
コンポーネントってどの粒度でわけるんや!ってなったときの指標のようなものです。
再利用性や保守性を担保しながら、一貫性のあるデザインを構築できます。
コンポーネントを以下の5階層のレイヤーに分けます。
Atoms
- それ以上分割できない最小のパーツ
- ビジネスロジックやデータの処理を含まない
Molecules
- Atomsや他のMoleculesを組み合わせたパーツ
- 単一で機能を果たす
Organisms
- AtomsとMoleculesを組み合わせた、さらに多くの機能をもったパーツ
Templates
- パーツを組み合わせた全体のレイアウト
Pages
- Templatesにデータを流し込んだ完成形
どこまでわけるべきなの?
どこまでレイヤー分けるべきかという本題です。
コンポーネントの分け方に正解はなく、開発によってその粒度はよく考える必要があります。
再利用性で考える
Atomsか、Moleculesか、
AtomはUIデザインの再利用がメインのレイヤーとなります。
以下のようなパーツで考えます。
インプット部分をボタン部分それぞれAtomsで用意してもよい気がします。
このような場合だとどうでしょう。
ボタン部分は同じUIデザインでSubmitボタンとして再利用されているので、Atomsでもよいかもしれません。
しかし、インプット部分は他のどこでも再利用されていません。そのため、インプット部分はMoleculesの
部分で直接定義してしまうのがよいといえます。
Moleculesか、Organismsか、
MoleculesとOrganismsは区別が曖昧です。
特に中程度のサイズや複雑さのコンポーネントはどちらに置くべきか悩みます。
例えば、以下のようなヘッダーのナビゲーション部分です。
この部分はAtomsをまとめたMoleculesだと説明されることが多いです。
しかし、Moleculesは単一の機能を再利用することがメインのレイヤーです。
実際ナビゲーション部分は、使いまわされるような機能を持つことは少ないと思います。
なので、Organismsであるヘッダーの中で直接定義してしまってもよいかもしれません。
自己完結できるか
自己完結しているかを意識して、コンポーネントをわけることは重要です。
サービス全体の一部としてコンポーネント作るのではなく、そのコンポーネントがどんな役割をもつかだけで考えるべきです。
もしこれができていないと、再利用性が低くなるだけでなく、今後ほかのコンポーネントを意識して開発や修正する必要が出てきてしまいます。
最後に
AtomicDesignに則ったコンポーネントの分け方には、いろいろな考え方があります。
開発に合わせて柔軟に取り入れていきたいですね~