Glycyrrhy Designのロゴ. 5つのレイヤーからなるクラス図をGとLの形に見えるように図案化している.

Glycyrrhy Design

個人開発者のためのフロントエンド設計パターン

5つのレイヤーの関係を表したクラス図. GroupはCellとArithに依存し, LayoutはCellとGroupとArithに依存し, WorldはLayoutとArithに依存する.
概要

Atomic Designを,ユーティリティーファーストクラスやコンポーネントライブラリを用いたプロジェクトにおいて厳密に適用することは難しい.

実情に即したコンポーネント分類・分割を考案し,開発・保守体験の向上を図る必要がある.

Glycyrrhyは,コンポーネントをArithCellGroupLayoutWorld5つのレイヤーに分けるデザインパターンである.

Arith

Arithは,フロントエンド側で行う演算処理を分離するレイヤー.

Arithmetics(算術)に由来する.

DOM要素などの具体物を直接持たない,純粋な関数の集合であることが望ましい.

このレイヤーを設けることで,他のレイヤーに記述するロジックが単純なイテレーション分岐関数呼び出しに限定される.

クラス図を模したロゴのArithレイヤーを表す黒丸が白丸に変更された図形.
クラス図を模したロゴのCellレイヤーを表す黒丸が白丸に変更された図形.
Cell

Cellは,具体要素の基本単位となるコンポーネントをまとめるレイヤー.

原則,他のコンポーネントとの位置関係の情報など(レイアウト)持たない.

基本単位にレイアウトが既に含まれているフレームワークやライブラリを用いる場合,その基本単位のラッパーとして用いる.

HTMLタグ1~2つ相当を分割の目安とする.

唯一このレイヤーがドメイン知識を持たないため,他のプロジェクトで再利用できるような汎用的な設計・命名をする.

レイアウトをあとから注入できるように作られる.

Group

Groupは,DRY原則のためのレイヤー.

繰り返し用いられるいくつかのCellおよびGroupの一連の組み合わせを記述する.

Cell同様,レイアウトをあとから注入できるように作られる.

クラス図を模したロゴのGroupレイヤーを表す黒丸が白丸に変更された図形.
クラス図を模したロゴのLayoutレイヤーを表す黒丸が白丸に変更された図形.
Layout

Layoutは,レイアウト付けのためのレイヤー.

CellやGroupについて間隔などの配置をここに分離しておくことで,個々の見た目に依存しない表示調節が可能になる.

基本単位にレイアウトが既に含まれているフレームワークやライブラリを用いる場合,ユーティリティークラスによる調節を担う.

依存関係を明白にするためにWorldからは直接CellやGroupを参照せず,修正が必要ない場合でもLayoutにラップしておく.

汎用的な命名のCellにセマンティックな別名をつける役割も果たす.

World

Worldは,ページとして機能する組み立てられたコンポーネントのレイヤー.

他の役割として,外部との情報のやり取りや,頻繁に変更される定数など,"世界"に関わる記述を行ってよいが,具体的な処理はArithから呼び出すのが望ましい.

開発中は,CellやGroupをやむなく参照していいが,最終的にはLayoutとArithにのみ依存したい.

クラス図を模したロゴのWorldレイヤーを表す黒丸が白丸に変更された図形.