コンポーネントライブラリを構築するためのStorybookフレームワーク

![スクリーンショット 2022-04-12 13.51.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037046/7a46972e-170f-8cf5-8ca8-35704834518c.png)
[コンポーネントライブラリを作る](https://zenn.dev/uxpin_official/articles/ec927c9c84b95c)ことで、UI開発を効率化し、失敗しないようにすることができます。コンポーネントライブラリを作るメリットには以下のようなものがあります：

- 現在のガイドラインに沿った信頼できる唯一の情報源を作ることができる。
- 重要なマイルストーンやリリース日に間に合わせる必要がある場合、迅速にスケールアップすることができる。
- 製品チームのコラボレーションとコミュニケーションを向上させる。
- コードの重複を減らす。
- 複数のデバイスで動作するデジタル製品の構築
![スクリーンショット 2022-04-12 13.56.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037046/8aa85da2-b6a8-fa71-54d7-7cb08f1c108a.png)
UXPinが[Storybookの統合](https://www.uxpin.com/jp/merge/storybook-integration)を提供している今、アクセスできるStorybookのフレームワークについて学んでみましょう。Storybookが普及しているということは、あなたの開発チームのメンバーは、すでにこれらの一般的なフレームワークを使った経験があるということです。もしそうでなければ、Storybookのフレームワークの長所と短所を知る機会を与えてあげましょう。

Reactは、たくさんの利点を持つJavaScriptライブラリです。私たちは、これまでの記事で、以下のようなReactの機能に対する評価を投稿してきました：

- コンポーネントの再利用性
- 不具合を修正するための簡単なオプションを備えた安定したコード
- 特にJavaScriptに慣れている人にとっては、学習曲線がなだらか
- ライブラリを動かし続ける信頼できるエンジニアリングチーム
- JSX拡張での条件文

Reactは、UIライブラリの他のコンポーネントに影響を与えずに個々のコンポーネントを変更する方法をすでに提供しているため、Storybookに自然にフィットします。Storybookでは、コンポーネントを分離することで、この機能をさらに効果的にしています。サンドボックスでは、技術的な詳細に立ち入ることなく、UI全体を構築することができます。

また、React Storybookフレームワークは、コンポーネントを文書化することで再利用をこれまで以上に容易にし、コンポーネントを視覚的にテストすることでバグのあるコードを避けることができます。

StorybookでのReactの使用についてもっと知りたい方は、StorybookのReactの紹介を読み、ウェブサイト[「Component Driven User Interfaces」](https://www.componentdriven.org/)をご覧ください。

# Vue
![スクリーンショット 2022-04-12 14.10.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037046/ea16d50d-9c39-0381-fad7-befb8b494a4e.png)
[Vue Storybookフレームワーク](https://storybook.js.org/docs/vue/get-started/introduction)では、Storybook for Reactで得られるエッセンスをすべて提供しています。Vueフレームワーク用のStorybookとReactフレームワーク用のStorybookの最大の違いは、[GraphQL](https://graphql.org/)アドオンを取得できないことで、これにより他のツールとの統合が若干難しくなります。

多くの開発者がVueを気に入っているのは、サイズが小さくてもパフォーマンスに妥協がないからです。Vueは、強固なツールエコシステム、リアクティブな双方向データバインディング、仮想DOMレンダリングを提供します。

# Angular
![スクリーンショット 2022-04-12 14.15.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037046/18ef00fa-870a-c41a-2b05-d6b7a9c9bca2.png)
[Storybook Angularフレームワーク](https://storybook.js.org/docs/angular/get-started/introduction)は、Reactで得られるエッセンスやアドオンをすべて提供しています。

少人数の開発チームで、シンプルなJavaScriptでHTMLの機能を拡張することに集中したい場合、Angularを選択するのは理にかなっています。基本的なJavaScriptのコーディングスキルがあれば誰でもこのフレームワークを使うことができ、コスト削減、開発時間の短縮、ミスの回避に役立ちます。

Angularがシンプルだからといって、弱いわけではありません。ディレクティブ、再利用可能なコンポーネント、データバインディング、ローカリゼーションなど、優れた機能を備えています。

# コミュニティStorybookフレームワーク
![スクリーンショット 2022-04-12 14.19.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037046/330eb543-3400-58cd-3a0e-402ca2fbb943.png)
コミュニティフレームワークは、大規模なコミュニティが存在しないため、ReactやVueなどの主要なStorybookフレームワークのように頻繁に更新されない傾向があります。

これらはStorybookの最良の選択肢ではありませんが、オープンソースのツールはまだ動作します：
- Ember
- HTML
- Mithril
- Marko
- Svelte
- Riot
- Preact
- Rax

これらのStorybookのフレームワークを使うと、いくつかの機能が失われることを覚えておいてください。Ember on Storybookだけが、必要なもの(Actions, Backgrounds, Docs, Viewport, Controls)をすべて備えています。コミュニティフレームワークの中には、GraphQLをサポートしているものはありません。また、他にも数多くのアドオンがないため、プロジェクトを迅速に終わらせるのが難しくなるかもしれません。

しかし、[Storybookの柔軟性](https://storybook.js.org/docs/ember/api/frameworks-feature-support)はこれらのフレームワークにも及びます。完璧ではありませんが、きっとうまくいくでしょう。

# StorybookとUXPinを統合して、製品をより効率的に作りましょう!
Storybookでコンポーネントライブラリを作成したら、それを[UXPin](https://www.uxpin.com/merge/developers)に簡単にインポートすることができます。文字通り1分程度で完了するほど簡単です。
![スクリーンショット 2022-04-12 14.26.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037046/0162974f-30f0-cb51-52a7-43b89da45361.png)
UXPinとStorybookを統合すると、Storybookの中でUIコンポーネントライブラリを管理できるようになります。変更を加えると、UXPinのライブラリにも自動的に反映されます。このようにして、Storybookで信頼できる唯一の情報源を維持し、[Mergeテクノロジー](https://www.uxpin.com/jp/merge/storybook-integration)を使用してUXPinで完全に機能するプロトタイプを作成することができます。
StorybookとMergeは、コードベースのデザインの力を誰もが使えるようにすることで、開発プロセスをより効率的かつ効果的にします。
__さあ、今すぐ[無料トライアル](https://www.uxpin.com/jp/sign-up)を！__
![スクリーンショット 2022-04-12 11.30.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1037046/1d0d129d-4194-7dae-5c5d-966870c4441f.png)