Slide 1

Slide 1 text

© 2022 Ateam Inc. Histoireを使ってSvelteコンポーネントを管理 しよう 2022/12/15 株式会社エイチームライフデザイン 大江 和摩

Slide 2

Slide 2 text

© 2022 Ateam Inc. 株式会社エイチームライフデザイン Webエンジニア 大江 和摩(おおえ かずま) 2 自己紹介 @oekazuma

Slide 3

Slide 3 text

© 2022 Ateam Inc. 3 企業紹介

Slide 4

Slide 4 text

© 2022 Ateam Inc. 4 企業紹介

Slide 5

Slide 5 text

© 2022 Ateam Inc. 5 企業紹介_サービス内容

Slide 6

Slide 6 text

© 2022 Ateam Inc. 6

Slide 7

Slide 7 text

© 2022 Ateam Inc. 7 ● Histoire(イストワール)はフランス語で「物語」を意味する言葉で、StoryBookのようにUIコンポーネントのカタログを 作成するためのツールです。 ● 特徴 ○ Viteにネイティブ対応 ○ .svelteや.vueでStoryが書ける ○ Tailwind CSSのデザイントークンを自動生成 ○ ビジュアルリグレッションテスト ○ テーマをカスタマイズ可能 etc… Histoireとは

Slide 8

Slide 8 text

© 2022 Ateam Inc. 8 ● vite.config.jsにhistoireプロパティとして記述できます。 ● histoire.config.jsという名前で別のファイルに切り出すこともできます。 Viteにネイティブ対応 import { defineConfig } from 'histoire'; import { HstSvelte } from '@histoire/plugin-svelte'; export default defineConfig({ plugins: [HstSvelte()] }); histoire.config.js

Slide 9

Slide 9 text

© 2022 Ateam Inc. 9 ● .story.tsではなく、.story.svelteでStoryが書けます。 .svelteや.vueでstoryが書ける import Button from './Button.svelte'; export let Hst; Button.story.svelte

Slide 10

Slide 10 text

© 2022 Ateam Inc. 10 ● .story.tsではなく、.story.svelteでStoryが書けます。 .svelteや.vueでstoryが書ける

Slide 11

Slide 11 text

© 2022 Ateam Inc. 11 ● Variantを使うことで1つのコンポーネントに対して複数の表示を作成できます。 Storyを複数表示する Click me! Click me! …省略 Button.story.svelte

Slide 12

Slide 12 text

© 2022 Ateam Inc. 12 ● Variantを使うことで1つのコンポーネントに対して複数の表示を作成できます。 Storyを複数表示する

Slide 13

Slide 13 text

© 2022 Ateam Inc. 13 ● Variantはデフォルトではそれぞれのページに分けて表示されますが、 1ページにグリッドレイアウトで表示することもできます。 レイアウトを変更する Click me! …省略 Button.story.svelte

Slide 14

Slide 14 text

© 2022 Ateam Inc. 14 ● Variantはデフォルトではそれぞれのページに分けて表示されますが、 1ページにグリッドレイアウトで表示することもできます。 レイアウトを変更する

Slide 15

Slide 15 text

© 2022 Ateam Inc. 15 ● で囲み、 などを使って状態をコ ントロールするUIを用意することができます。 状態をコントロールする …省略 let disabled = false; let content = 'Click me!'; let size = 'medium'; {content} Button.story.svelte

Slide 16

Slide 16 text

© 2022 Ateam Inc. 16 ● で囲み、 などを使って状態をコ ントロールするUIを用意することができます。 状態をコントロールする

Slide 17

Slide 17 text

© 2022 Ateam Inc. 17 ● logEvent関数を使用することでコンポーネントから発火するイベントを取得することができます。 ● 第 1 引数はイベント名、第 2 引数はイベントにより発生したデータを指定します。 イベント import { logEvent } from 'histoire/client' import Button from './Button.svelte'; export let Hst; logEvent('click', event)}> Click me! Button.story.svelte

Slide 18

Slide 18 text

© 2022 Ateam Inc. 18 ● logEvent関数を使用することでコンポーネントから発火するイベントを取得することができます。 ● 第 1 引数はイベント名、第 2 引数はイベントにより発生したデータを指定します。 イベント

Slide 19

Slide 19 text

© 2022 Ateam Inc. 19 ● ドキュメントをStoryに追加するには.story.mdファイルを作成します。 ドキュメント # Button ## Example ```svelte Click me! ``` ## Props | Name | Type | Default | Description | | -------- | ---------------------------- | --------- | ------------------------------ | | size | 'small' 'medium' 'large' | 'medium' | The size of the button | | disabled | boolean | false | Whether the button is disabled | Button.story.md

Slide 20

Slide 20 text

© 2022 Ateam Inc. 20 ● ドキュメントをStoryに追加するには.story.mdファイルを作成します。 ドキュメント

Slide 21

Slide 21 text

© 2022 Ateam Inc. 21 ● Tailwind CSSを使う場合はデザイントークンを自動生成してくれる機能があります。 ● tailwind.config.jsから設定を読み取って生成してくれるのでHistoireの設定は不要です。 Tailwind CSSのデザイントークンを自動生成

Slide 22

Slide 22 text

© 2022 Ateam Inc. 22 ● PNPMを使う場合のTIPS ● .npmrcにshamefully-hoist=trueを設定しないとうまく動作しません。 Tailwind CSSのデザイントークンを自動生成 shamefully-hoist=true .npmrc

Slide 23

Slide 23 text

© 2022 Ateam Inc. 23 ● Tailwind CSSをStory上で使えるようにするには少し設定が必要です。 Tailwind CSSをStoryに適用させる @tailwind base; @tailwind components; @tailwind utilities; tailwind.css import './tailwind.css' /src/histoire.setup.ts import { defineConfig } from 'histoire'; import { HstSvelte } from '@histoire/plugin-svelte'; export default defineConfig({ plugins: [HstSvelte()], setupFile: '/src/histoire.setup.ts' }); histoire.config.js

Slide 24

Slide 24 text

© 2022 Ateam Inc. 24 ● 公式プラグインの@histoire/plugin-screenshotを使ってスクリーンショットを撮影してビジュアルリグレッションテス トを実施することができます。 ● ビルドコマンドで実行でき、スクリーンショットは.histoire/screenshots に保存されます。 ビジュアルリグレッションテスト $ npm i -D @histoire/plugin-screenshot import { defineConfig } from 'histoire'; import { HstSvelte } from '@histoire/plugin-svelte'; import { HstScreenshot } from '@histoire/plugin-screenshot'; export default defineConfig({ plugins: [HstSvelte(), HstScreenshot()], setupFile: '/src/histoire.setup.ts' }); histoire.config.js

Slide 25

Slide 25 text

© 2022 Ateam Inc. 25 ● Histoireはブランドのガイドライン等に合わせてカスタマイズすることが可能です。 テーマをカスタマイズ可能 export default defineConfig({ theme: { title: 'Ateam Inc.', logo: { square: './image/logo_square.png', light: './image/logo_light.png', dark: './image/logo_dark.png' }, logoHref: 'https://www.a-tm.co.jp/', favicon: './image/favicon.png', colors: { gray: defaultColors.zinc, primary: defaultColors.rose } } }); histoire.config.js

Slide 26

Slide 26 text

© 2022 Ateam Inc. 26 ● Histoireはブランドのガイドライン等に合わせてカスタマイズすることが可能です。 テーマをカスタマイズ可能

Slide 27

Slide 27 text

© 2022 Ateam Inc. 27 最後に

Slide 28

Slide 28 text

© 2022 Ateam Inc. 28 ● Histoireを一通り使ってみましたが、UIコンポーネント管理ツールとしては最低限機能も揃ってます し、.svelteでStoryが書けるというのはすごく魅力的に感じました。 ただ、発展途上なツールなので不具合もありますし、SvelteKitのアップデートにより、動かなくなること もありました。 Svelteコアチームの方がHisoireのリポジトリのほうでフォローしていたりして都度、修正もしているので 後々安定してくると思います。 StoryBookと比べてしまうと、足りない機能はたくさんありますが、StoryBookほど機能はいらないし、コ ンポーネントカタログとして使えればいいという需要であればHistoireは選択肢としていいのではない かなと思います。 StoryBook7でSvelteKitの完全サポートも予定されているようなので StoryBookも注目していきたいです! 最後に

Slide 29

Slide 29 text

No content