-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #426 from openameba/docs/improve-spindle-hooks-docs
docs(spindle-hooks): add some docs
- Loading branch information
Showing
3 changed files
with
142 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# Contributing to Spindle UI | ||
|
||
Spindle は、Ameba で利用するデザインシステムです。このリポジトリは、デザインシステムで定義された内容を実際に利用しやすいように実装に落とし込んだものです。 | ||
|
||
Ameba として提供される成果物は、それらに則って開発されることを推奨しています。そのため、機能の要望や修正の Pull Request は Ameba に在籍するメンバーからのみとしています(ごめんなさい 🙇)。 | ||
|
||
ただし、リンク先のミス、誤字・脱字などの Pull Request、Issue 提起は大歓迎です。わかりづらい点や疑問に思う箇所がありましたら、お気軽にお知らせください! | ||
|
||
## 新規 Hooks の作り方 | ||
|
||
新規 Hooks を作る際には大まかに以下のフローを辿ります。 | ||
|
||
1. Hooks の命名・利用方法などのドキュメント化。通常これは Slack や GitHub Discussions などをきっかけに作業が開始され、まず Figma にルールがまとまります。 | ||
2. Design Doc の作成。Spindle では Hooks ごとに Design Doc を作成し、該当 Hooks に関わる事柄を整理します。Hooks 名・概要・使用するデザイントークン・アクセシビリティ対応項目などを記載します。Design Doc の雛形は Notion にありますので確認してみてください。 | ||
3. Design Doc のレビュー。ある程度 Design Doc ができあがったら Spindle チームや Web チームでレビューをします。この段階での Design Doc はレビュー用途で使用するので完璧に仕上げる必要はありません! | ||
4. Hooks 作成。実際に Hooks を実装します。Storybook やテストの作成も忘れずお願いします!また、コンポーネント設計に困った場合には、すでに作成されているコンポーネントを見たり、[Spindle Hooks の Design Doc](/packages/spindle-hooks/docs/design-doc.md)を見てみてください。 | ||
5. コンポーネント Stability の決定。Spindle Hooks ではコンポーネントごとに Stability を決め、どうゆう利用が想定されているか明記しています。[定められた Stability](/packages/spindle-hooks#Hooks%20%E4%B8%80%E8%A6%A7)の中から選択肢、Storybook の冒頭に記載します。 | ||
6. Pull Request の作成。ここまでできたら後は GitHub 上でやりとりし、リリースまで進めます。Pull Request やリリースに関しては[Contributing to Spindle](/CONTRIBUTING.md)を参照してください。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,91 @@ | ||
追記します。 | ||
## 前提 / Context | ||
|
||
Spindle UI では UI コンポーネントのみを公開していますが、実際の機能は同じで見た目を変えたいというユースケースもあります。 | ||
|
||
例えばカルーセルは spindle-ui で[HeroCarousel](https://ameba-spindle.web.app/?path=/story/herocarousel--normal)として提供されていますが、UI が固定されており要件によって自由に UI を変更することは難しいです。 | ||
|
||
そのため、カルーセルであればスライドのアニメーションや再生・停止といった機能のみを提供し UI については使用側で自由に決められるようにしたいです。 | ||
|
||
## 目指すこと / Goals | ||
|
||
汎用的で必要最低限の機能を実装し、サービス間で共通のロジックを使いまわせるようにします。 | ||
|
||
## 目指さないこと / Non-goals | ||
|
||
一部のケースでしか使用できないような機能を追加すること。 | ||
|
||
## 概要 / Overview | ||
|
||
Ameba の開発での利用実績を踏まえ、以下の点を考慮してライブラリを提供します。 | ||
|
||
- **React Hooks の提供**: Ameba で最も利用されている UI ライブラリの React で作られたミニマムな Hooks を提供します | ||
- **UI コンポーネントカタログ中心の開発**: 作られたコンポーネントはすぐにテストされ、表示を確認します | ||
- **管理されたファイルサイズ**: 共通処理が集まるため、大きくなりがちなライブラリのファイルサイズが規定を超さないようにします | ||
|
||
## どのようにやっていくか / Approach, Detailed design | ||
|
||
### React Hooks の提供 | ||
|
||
各アプリケーション間で共通で利用したいロジックを React Hooks として提供します。ただし、UI に依存したり命令的に DOM を処理することで副作用を含んだりしないように注意します。 | ||
|
||
React Hooks は以下のように利用します。 | ||
|
||
```js | ||
import { useTimeDistance } from '@openameba/spindle-hooks'; | ||
|
||
function WakuWakuTime() { | ||
const publishedAt = '2022-02-22T22:22:22.222Z'; | ||
const [dateString] = useTimeDistance(publishedAt); | ||
return <time datetime={publishedAt}>{dateString}</time>; | ||
} | ||
``` | ||
|
||
#### 他の手段 | ||
|
||
より多くのプロジェクトで利用するために、Vue.js や Web Components で作成する必要があるかもしれませんが、2022 年 6 月現在では最も利用されている React で作成しています。 | ||
|
||
React を使用せずに命令的に JavaScript で DOM を操作する方法もあります。この方法であればライブラリに依存せずにロジックを共通化できる一方、メンテナンスコストがかかったり、使いやすいインターフェイスを実現するのが難しかったりします。 | ||
|
||
## UI コンポーネントカタログ中心の開発 | ||
|
||
Spindle Hooks は、様々なプロジェクトで利用される可能性があるため、多くの人にとって簡単に確認できるドキュメントが必要です。また、Spindle が目指している「Ameba らしさ」が満たされているかチェックできる仕組みも求められます。 | ||
|
||
Spindle Hooks は開発中、公開後どちらも Storybook で作られたカタログを中心に確認されます。そこでは、見た目、ソースコードの確認やアクセシビリティ、パフォーマンス、などがテストされます。 | ||
|
||
また Spindle Hooks は多くのロジックを含むため React Testing Library を用いたユニットテストを書き、誰もがメンテナンスしやすく、使いやすい状態を目指します。 | ||
|
||
## 管理されたファイルサイズ | ||
|
||
ライブラリは、共通処理が集約されたり、様々なバリエーションの実装が求められたりするため、ファイルサイズが増えがちです。それらを検知するために、ファイルサイズを機械的にチェックしています。 | ||
|
||
各 Hooks が指定されたサイズ以上にならないように管理されています。 | ||
|
||
```JSON | ||
// bundlesize.config.json | ||
{ | ||
"files": [ | ||
{ | ||
"path": "./dist/**/*.mjs", | ||
"maxSize": "1.5 kB" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
## 想定される問題 / Drawback, Risk | ||
|
||
UI ライブラリを運営していくうえで、以下の問題が想定されます。これらを回避するために、できるだけ短期間に小さく運営を始めるとよいでしょう。 | ||
|
||
- 運用が大変で適切に更新されない | ||
- 要望が増えすぎて対応しきれない | ||
- 技術要素の利用条件が変化し、作り直さなければならない | ||
|
||
## 関連リンク / Related link | ||
|
||
- [React](https://reactjs.org/) | ||
- [Vue.js](https://vuejs.org/) | ||
- [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components) | ||
- [postcss/postcss-import](https://github.com/postcss/postcss-import) | ||
- [Storybook](https://storybook.js.org/) | ||
- [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) | ||
- [siddharthkp/bundlesize](https://github.com/siddharthkp/bundlesize) |