Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add storybook #22

Merged
merged 11 commits into from Nov 23, 2023
Merged

add storybook #22

merged 11 commits into from Nov 23, 2023

Conversation

Eigo-Mt-Fuji
Copy link
Owner

No description provided.

@Eigo-Mt-Fuji Eigo-Mt-Fuji changed the title Feature/update 20231119 add storybook Nov 20, 2023
Copy link

github-actions bot commented Nov 20, 2023

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Button.stories.ts

このコードは、ボタンのStorybookコンポーネントのファイルです。Storybookは、コンポーネントのUIを視覚的に確認できるツールであり、開発者がコンポーネントの動作や見た目をテストするのに役立ちます。

このファイルでは、Buttonコンポーネントを使用していくつかのストーリーを定義しています。各ストーリーは、異なるプロパティを持つButtonコンポーネントのインスタンスを表示します。

以下に、このファイルの主なポイントを説明します。

  • meta変数は、ストーリーのメタデータを定義します。メタデータには、ストーリーのタイトルやコンポーネントの情報、パラメータ、引数のタイプなどが含まれます。

  • export default meta;行では、メタデータをデフォルトのエクスポートとして指定しています。

  • PrimarySecondaryLargeSmallという4つのストーリーが定義されています。各ストーリーは、argsプロパティを使用してButtonコンポーネントのプロパティを設定します。例えば、Primaryストーリーでは、primary: truelabel: 'Button'を指定しています。

これらのストーリーを使用すると、開発者はButtonコンポーネントの異なるバリエーションをStorybookで簡単にテストすることができます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Button.tsx

上記のコードは、ReactのコンポーネントであるButtonを定義しています。このコンポーネントは、ユーザーとのインタラクションのための主要なUIコンポーネントです。

Buttonコンポーネントは以下のプロパティを受け取ります:

  • primary (真偽値):ページ上でメインのアクションであるかどうかを示します。
  • backgroundColor (文字列):どの背景色を使用するかを指定します。
  • size (small | medium | large):ボタンのサイズを指定します。
  • label (文字列):ボタンに表示するテキストです。
  • onClick (関数):オプションのクリックハンドラーです。

コンポーネントの見た目は、button要素として定義されており、与えられたプロパティに応じて動的なクラス名とスタイルが付与されます。さらに、ボタンの背景色はbackgroundColorプロパティに基づいて動的に設定されます。

このコンポーネントは、import React from 'react';によってReactをインポートし、'./button.css';によってボタンのスタイルを定義している別のCSSファイルをインポートしています。

また、このモジュールは、他のファイルからインポートされることを想定しているため、外部にエクスポートされています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Header.stories.ts

このコードは、HeaderコンポーネントのStorybookのストーリーを定義しています。

Header.stories.tsファイルの最初の行では、MetaStoryObjというタイプをインポートしています。これらのタイプは、Storybookのメタデータとストーリーの型を定義するために使用されます。

次に、Headerコンポーネントをインポートしています。

meta変数は、Headerコンポーネントのメタデータを定義しています。titleプロパティには、ストーリーのタイトルが設定されています。componentプロパティには、ストーリーが表示するコンポーネントが設定されています。tagsプロパティには、ストーリーに関連するタグが設定されています。parametersプロパティには、ストーリーの表示方法やレイアウトなどの追加のパラメータが設定されています。

export default meta;行では、meta変数をデフォルトのエクスポートとして使用しています。

次に、Storyという型を宣言しています。この型は、StoryObj型をmeta変数に対して適用したものです。

LoggedInLoggedOutという2つのストーリーを定義しています。LoggedInストーリーでは、argsプロパティにuserオブジェクトを設定しています。LoggedOutストーリーでは、argsプロパティは空です。

これらのストーリーは、Headerコンポーネントの引数を異なる状態で表示するために使用されます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Header.tsx

このコードは、Reactコンポーネントのヘッダーを定義しています。以下に、コードの詳細な説明を示します。

1行目から6行目: 必要なパッケージをインポートしています。
8行目から11行目: userオブジェクトと、ログイン、ログアウト、アカウント作成のための関数を受け取るHeaderPropsインターフェースを定義しています。
13行目から54行目: ヘッダーのマークアップとロジックを定義しています。

  • ヘッダーコンポーネント全体は、<header>要素で囲まれています。
  • ヘッダーのコンテンツは、<div>要素によって2つのセクションに分割されています。
    • 最初のセクションでは、ロゴとタイトルが表示されています。
    • 2番目のセクションでは、userオブジェクトがある場合とない場合でコンテンツが異なります。
      • userオブジェクトがある場合: 「ようこそ、[ユーザー名]!」というメッセージが表示され、ログアウトボタンが表示されます。
      • userオブジェクトがない場合: ログインボタンと新規アカウント作成ボタンが表示されます。
        56行目: Headerコンポーネントがエクスポートされています。

このコードは、ヘッダーコンポーネントを定義しているだけでなく、ユーザーオブジェクトの有無に応じて表示内容を切り替える仕組みも実装しています。また、ボタンコンポーネントも別途定義されていることが分かります。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Page.stories.ts

このコードは、Pageコンポーネントに関する Storybook のストーリーを定義しています。PageコンポーネントにはLoggedOutLoggedInの2つのストーリーがあります。

LoggedOutストーリーでは、ログインされていない状態をシミュレートしています。

LoggedInストーリーでは、play関数を利用してインタラクションテストを行っています。canvasElementを取得し、その中から"Log in"という名前のボタンをクリックしています。このようにすることで、ログインされた状態をシミュレートしています。

また、PageコンポーネントにはMetaオブジェクトが定義されています。このオブジェクトには、ストーリーのタイトルやコンポーネントの定義、レイアウトなどの情報が含まれています。

このコードでは、Storybook のリポジトリで提供される@storybook/reactパッケージや@storybook/testing-libraryパッケージも使用されています。

【参考情報】

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Page.tsx

このコードは、Reactの関数コンポーネントであるPageを定義しています。Pageコンポーネントは以下のような機能を持っています。

  1. Headerコンポーネントをインポートしています。
  2. page.cssスタイルをインポートしています。
  3. User型を定義しています。
  4. userという名前の状態変数と、その変数を更新するためのsetUser関数をuseStateフックで定義しています。
  5. Headerコンポーネントを表示しています。userにはonLogin関数が呼ばれた時に{ name: 'Jane Doe' }という値をセットし、onLogout関数が呼ばれた時にはundefinedをセットするようにしています。
  6. ページの内容を表示しています。この内容はStorybookのページで表示されるものであり、実際のアプリケーションとは関係ありません。
    Good

Copy link

github-actions bot commented Nov 20, 2023

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Button.stories.ts

このコードは、Buttonコンポーネントのストーリーを定義しています。
ストーリーは、Buttonコンポーネントのさまざまなプロパティと値の組み合わせを使用して、異なる見た目のボタンを表示するために使用されます。

コードの概要:

  • Buttonコンポーネントをインポートします。
  • metaオブジェクトを定義します。このオブジェクトは、ストーリーのメタデータを指定します。例えば、タイトルやレイアウトの設定などがあります。
  • StoryObjという型を使用して、Story型を定義します。StoryObjは、Buttonコンポーネントのストーリーのタイプを指定します。
  • Primary、Secondary、Large、Smallの4つの異なるストーリーを定義します。それぞれのストーリーは、Buttonコンポーネントのプロパティと値の組み合わせを指定します。

このコードは、Storybookというツールを使用してコンポーネントを開発・テストする際に使用されます。また、このコードはリアクトプロジェクトで動作するように作成されています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Button.tsx

このファイルはReactコンポーネントのボタンを定義しています。コンポーネントのpropsは以下の通りです。

  • primary: boolean型の値です。ページ上で主要なアクションかどうかを示します。
  • backgroundColor: 文字列型の値です。ボタンの背景色を指定します。
  • size: 'small'、'medium'、'large'のいずれかの値です。ボタンの大きさを指定します。
  • label: 文字列型の値です。ボタンのテキストを指定します。
  • onClick: 関数型の値です。クリックハンドラを指定することができます。

ボタンのスタイルは、primaryがtrueの場合は'storybook-button--primary'のクラスが、falseの場合は'storybook-button--secondary'のクラスが適用されます。ボタンのサイズに応じて、'storybook-button--small'、'storybook-button--medium'、'storybook-button--large'のクラスも適用されます。

ボタンコンポーネントは、button要素として表示されます。テキストはlabelプロパティの値が表示され、backgroundColorプロパティの値が背景色として適用されます。また、スタイルは<style jsx>{...}</style>内で定義されています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Header.stories.ts

このファイルは、Storybookのヘッダー(Header)コンポーネントに関するストーリー(Story)を定義しているようです。

以下はファイルの内容の説明です。

  1. MetaStoryObjのimport文: この行では、Storybookの型定義からMetaStoryObjをimportしています。

  2. Headerコンポーネントのimport文: Headerコンポーネントをimportしています。

  3. metaオブジェクト: このオブジェクトは、Headerコンポーネントに関するメタデータを定義しています。titleプロパティにはストーリーのタイトル、componentプロパティには対応するコンポーネント、tagsプロパティにはタグ情報、parametersプロパティにはストーリーパラメータなどが指定されています。

  4. Story型: StoryObj型を使用してStory型を定義しています。

  5. LoggedInストーリー: LoggedInという名前のストーリーを定義しています。argsプロパティにはユーザーの情報が指定されています。

  6. LoggedOutストーリー: LoggedOutという名前のストーリーを定義しています。argsプロパティは空です。

これは、Storybookで使用するヘッダーコンポーネントのストーリーファイルの例です。ストーリーファイルは、コンポーネントのさまざまな状態やプロパティを示すために使用されます。これにより、コンポーネントのテストや確認が容易になります。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Header.tsx

このコードは、Reactで書かれたヘッダーコンポーネントです。以下にコードの概要を説明します。

  • ファイルの先頭でReactとButtonコンポーネントをインポートしています。
  • CSSスタイルシートのファイルもインポートしています。
  • User型とHeaderPropsというインターフェースが定義されています。
  • Headerコンポーネントは、引数としてuser、onLogin、onLogout、onCreateAccountを受け取ります。
  • ヘッダー要素の内部には、ヘッダーのロゴとボタンが配置されています。
  • userが存在する場合はログイン状態を表示し、ログアウトボタンを表示します。
  • userが存在しない場合は、ログインボタンと新規登録ボタンを表示します。

このコンポーネントは、ユーザーのログイン状態に応じて、適切なUIを表示するために使用されます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Page.stories.ts

このコードは、Storybookのストーリーファイルです。以下のような構成になっています。

  1. import文で必要なライブラリを読み込んでいます。
  2. metaというオブジェクトを定義しています。これはストーリーのメタデータを定義するもので、titlecomponentparametersなどの情報が含まれています。
  3. export default meta;によってmetaオブジェクトをデフォルトのエクスポートとして設定しています。
  4. Storyという型を定義しています。これはストーリーオブジェクトの型です。
  5. LoggedOutというストーリーを定義しています。
  6. LoggedInというストーリーを定義しています。このストーリーでは、play関数を使ってユーザーの操作をシミュレートしています。

ストーリーファイルは、コンポーネントのさまざまな状態やインタラクションを定義し、Storybook上で実際に動作を確認するために使用されます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/Page.tsx

このコードはReactコンポーネントを定義しています。以下の要点について説明します。

  1. コンポーネントのインポート:

    • Headerコンポーネントを'./Header'からインポートしています。
    • CSSファイルを'./page.css'からインポートしています。
  2. User型:

    • User型はnameというプロパティを持つオブジェクトです。
  3. Pageコンポーネント:

    • PageはReact Functional Componentです。
    • ページ内のユーザ状態を管理するために、userというstateと、それを更新するためのsetUser関数を定義しています。React.useStateを使用して初期化しています。
  4. JSX:

    • JSXで<Header>コンポーネントをレンダリングしています。userプロパティには現在のユーザ情報が渡されており、各ボタンのクリックイベントによってsetUser関数が呼び出されています。
    • <section>要素内にページの内容が記述されており、タイトルやテキスト、リンクなどが含まれています。
    • スタイルを適用するために、<div>要素にはtip-wrapperというクラスが設定されています。

このコードは、Storybookというツールを使用してUIコンポーネントのビルドとレビューを容易にするためのものです。Storybookでは、ページの状態をモックデータで表示することができます。コンポーネントの開発に役立つパターンやチュートリアルなど、詳細な情報はStorybookの公式ドキュメントやチュートリアルを参照してください。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Header.stories.ts

このスニペットは、ReactコンポーネントのストーリーファイルであるHeader.stories.tsです。Headerコンポーネントに関するストーリーを定義しています。

以下は、各セクションの説明です。

  1. import文: MetaおよびStoryObjタイプのインポートと、Headerコンポーネントのインポートが行われています。

  2. metaオブジェクト: ストーリーメタデータを定義しています。タイトル、コンポーネント、タグ、レイアウトなどのプロパティが含まれます。

  3. defaultエクスポート: metaオブジェクトに対してMetaタイプを割り当てています。この行はTypeScriptの型チェックを通過するために追加されています。

  4. Storyタイプの定義: StoryObjmetaを使用して定義しています。

  5. LoggedInストーリー: LoggedInというストーリーオブジェクトを定義しています。このストーリーでは、argsプロパティにuserオブジェクトが定義されています。

  6. LoggedOutストーリー: LoggedOutというストーリーオブジェクトを定義しています。このストーリーでは、argsプロパティは空です。

これらのストーリーを使用して、Headerコンポーネントのログイン状態に応じた表示を確認することができます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Header.stories.ts

このファイルは、Storybookを使用して作成された Header コンポーネントのストーリーファイルです。

Header コンポーネントのメタデータとして、次の情報が指定されています:

  • タイトル: 'ページ/Header'
  • コンポーネント: Header
  • タグ: ['autodocs']
  • パラメータ: レイアウトは 'fullscreen' と指定されています

このストーリーファイルには、以下の2つのストーリーが含まれています:

  1. LoggedIn ストーリー

    • ログイン済みのユーザーを表す引数が指定されています。
    • ユーザー名は 'Jane Doe' で指定されています。
  2. LoggedOut ストーリー

    • 追加の引数は指定されていません。

これらのストーリーを使用して、Header コンポーネントの動作や外観をテストすることができます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Header.tsx

このコードは、Reactで作成されたヘッダーコンポーネントです。

このヘッダーコンポーネントは、3つのボタンとユーザー名を表示します。ボタンのラベルとクリック時の動作は、親コンポーネントからpropsとして受け取ります。

ユーザーがログインしている場合は、「Welcome, [ユーザー名]!」と表示され、ログアウトボタンも表示されます。ユーザーがログインしていない場合は、ログインボタンとサインアップボタンが表示されます。

また、ヘッダーのスタイルは、"header.css"ファイルで定義されています。このファイルは、このコンポーネントが表示される際にインポートされます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Page.stories.ts

このコードは、Storybookを使用してReactコンポーネントのストーリーを作成するためのファイルです。

まず、Page.stories.tsというファイルが新規作成され、以下のコードが含まれています。

import type { Meta, StoryObj } from '@storybook/react';
import { within, userEvent } from '@storybook/testing-library';

import { Page } from './Page';

const meta = {
  title: 'ページ/Page',
  component: Page,
  parameters: {
    // More on how to position stories at: https://storybook.js.org/docs/react/configure/story-layout
    layout: 'fullscreen',
  },
} satisfies Meta<typeof Page>;

export default meta;
type Story = StoryObj<typeof meta>;

export const LoggedOut: Story = {};

// More on interaction testing: https://storybook.js.org/docs/react/writing-tests/interaction-testing
export const LoggedIn: Story = {
  play: async ({ canvasElement }) => {
    const canvas = within(canvasElement);
    const loginButton = await canvas.getByRole('button', {
      name: /Log in/i,
    });
    await userEvent.click(loginButton);
  },
};

このファイルでは、Pageというコンポーネントに対する2つのストーリーが定義されています。

1つ目のストーリーは、LoggedOutという名前であり、特に設定や処理は行われていません。

2つ目のストーリーは、LoggedInという名前であり、以下のような処理が定義されています。

  1. ストーリーが再生されると、指定されたcanvasElement内でログインボタンをクリックします。
  2. within関数を使用して、canvasElement内でDOM要素を取得します。
  3. canvas.getByRoleを使用して、ロールがbuttonで、テキストがLog inと一致するボタン要素を取得します。
  4. userEvent.clickを使用して、ログインボタンをクリックします。

このように、ログイン操作が再生(自動実行)されるストーリーが定義されています。

参考資料:

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Page.tsx

このコードは、Reactの関数コンポーネントであるPageを定義しています。このコンポーネントは、ReactのuseStateフックを使用してuserという状態を管理しています。Headerコンポーネントをレンダリングし、その中でuserの値を受け渡しています。

HeaderコンポーネントはHeader.tsxファイルで定義されており、userの値といくつかのコールバック関数を受け取ることができます。これにより、ログインやログアウト、アカウントの作成などの操作を実行することができます。

Pageコンポーネントの中身は、Storybookのページの例です。ページ内で使われているデータはモックデータであり、アプリ内で遷移することなくページの状態をビルド・レビューすることができるようになっています。

画面の幅は、ツールバーにある Viewports addon を使用して調整することができます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Header.tsx

このコードは、ReactコンポーネントであるHeaderを定義しています。このヘッダーコンポーネントは、ユーザーのログイン、ログアウト、アカウント作成などのアクションを実行できるボタンを表示します。

ヘッダーコンポーネントのpropsは以下のようになっています:

  • user: User型のオプションプロパティ。このユーザーは、ログインしているユーザーの情報を表します。
  • onLogin: 関数型プロパティ。この関数は、ログインボタンがクリックされたときに呼び出されます。
  • onLogout: 関数型プロパティ。この関数は、ログアウトボタンがクリックされたときに呼び出されます。
  • onCreateAccount: 関数型プロパティ。この関数は、アカウント作成ボタンがクリックされたときに呼び出されます。

ヘッダーコンポーネントは、上記のpropsに基づいて以下のように表示されます:

  • ヘッダー要素内にdiv要素があります。このdiv要素には、app-headerというクラス名が指定されます。
  • 最初のdiv要素内には、Acmeというテキストを含むh1要素と、Acmeのロゴが含まれるsvg要素があります。
  • 2番目のdiv要素内には、userが存在する場合の表示と、userが存在しない場合の表示があります。
  • userが存在する場合、
    • 「Welcome, [user.name]!」というテキストを表示するspan要素があります。
    • ログアウトボタンが表示されます。
  • userが存在しない場合、
    • ログインボタンが表示されます。
    • サインアップボタンが表示されます。

このコンポーネントは、ページのヘッダーとして使用されることが想定されています。ユーザーがログインしている場合は、ユーザーの名前とログアウトボタンが表示されます。ユーザーがログインしていない場合は、ログインボタンとアカウント作成ボタンが表示されます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/Button.stories.ts

このファイルは、ButtonコンポーネントのStorybookのストーリー定義を含んでいます。以下にいくつかの重要な情報をまとめます。

  • このファイルのパスは src/stories/parts/Button.stories.ts です。
  • Buttonコンポーネントは、Storiesで使用されます。
  • metaオブジェクトは、ストーリーの設定やパラメータなどのメタデータを定義します。
  • ストーリーのレイアウトは layout パラメータで "centered" に設定されています。
  • コンポーネントには自動生成されたAutodocsエントリがあります。
  • argTypes パラメータはコンポーネントのプロパティを制御するために使用されます。
  • PrimarySecondaryLargeSmall という4つのストーリーが定義されており、異なるプロパティを持っています。

それぞれのストーリーの詳細な説明は、こちらのコードを参照してください。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Page.stories.ts

このコードは、Storybookで使用するためのページコンポーネントのストーリーを定義しています。

ストーリーは、コンポーネントの異なる状態やユーザーのインタラクションを表現するために使用されます。

このコードでは、Pageコンポーネントに関する2つのストーリーが定義されています。

1つ目のストーリーはLoggedOutと呼ばれており、ユーザーがログインしていない状態を表します。このストーリーでは何も行いません。

2つ目のストーリーはLoggedInと呼ばれており、ユーザーがログインしている状態を表します。このストーリーでは、canvasElementを使用してコンポーネントの描画結果を取得し、ログインボタンをクリックするというユーザーのインタラクションが定義されています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/Button.tsx

このコードは、Reactで書かれたボタンコンポーネントです。以下に、コードの要点を説明します。

  1. Buttonコンポーネントは、Reactからimportされます。
  2. Buttonコンポーネントのpropsには、primary, backgroundColor, size, label, onClickの5つのパラメータがあります。
    • primaryは、ボタンがメインの操作かどうかを判定するためのフラグです。
    • backgroundColorは、ボタンの背景色を指定します。
    • sizeは、ボタンの大きさを'small', 'medium', 'large'のいずれかで指定します。
    • labelは、ボタンの表示テキストです。
    • onClickは、ボタンがクリックされたときのイベントハンドラ関数です(オプション)。
  3. Buttonコンポーネントは、primaryがtrueの場合は'storybook-button--primary'、そうでない場合は'storybook-button--secondary'というクラスを持つボタン要素を生成します。サイズに応じたクラスも付与されます。
  4. 背景色は、backgroundColorプロパティで指定された値によって設定されます。
  5. JSXの記法を使って、ボタンのスタイル(CSS)をインラインで設定しています。

このコンポーネントは、他のReactコンポーネント内で使用されることを想定しています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Page.tsx

このファイルは、ReactのコンポーネントであるPage.tsxを定義しています。このコンポーネントはPageという名前の関数コンポーネントです。

このコンポーネントは、Headerコンポーネントをインポートしています。また、CSSファイルであるpage.cssもインポートしています。

また、このコンポーネントはUserという名前の型を定義しています。この型はnameというプロパティを持ち、値の型はstringです。

Pageコンポーネントでは、useStateフックを使用してuserというステート変数を定義しています。初期値はundefinedです。

return文の中で、Headerコンポーネントをレンダリングしています。この際、userステート変数と、onLogin、onLogout、onCreateAccountというコールバック関数をpropsとして渡しています。

その後、article要素内にsection要素があり、その中にいくつかのHTML要素とテキストがあります。

このコンポーネントは、Storybookのページ内で利用されることを想定しています。具体的なデータはモックとして扱われ、ページの状態を簡単に構築・レビューすることができます。

また、storyコンポーネントのargsを使用してデータを構築するか、サービスからデータを取得してページコンポーネント内で組み立てることも可能です。Storybookではこれらのサービスをモック化することもできます。

このファイルの最後には、ビューポートの幅を調整するためのツールバーとしてのViewportsアドオンが記述されています。

以上が、このファイルの概要になります。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/SectionLayout.stories.ts

このファイルは、SectionLayoutコンポーネントのStorybook用のストーリーです。ストーリーブックは、コンポーネントの動作や見た目を実際に確認するためのツールであり、開発者にとって便利な機能を提供します。

ストーリーの内容を解説します。

1行目では、@storybook/reactモジュールからMetaとStoryObjをインポートしています。
次に、SectionLayoutコンポーネントをインポートしています。

meta定数は、ストーリーの情報を定義しています。
"title"はストーリーのタイトルを表しており、「パーツ/SectionLayout」となっています。
"component"はストーリーで使用するコンポーネントを指定しており、SectionLayoutコンポーネントが指定されています。
"parameters"はストーリーの追加のパラメータを指定するオブジェクトで、ここではレイアウトをフルスクリーンにするために'fullscreen'が指定されています。

次に、metaをtypeof SectionLayoutの型で満たすMeta型として宣言し、これをexportしています。
また、Story型はStoryObjとして宣言されており、こちらもexportしています。

最後に、Defaultストーリーを定義しています。
argsフィールドでは、SectionLayoutコンポーネントのpropsとして渡されるオブジェクトが定義されています。
ここでは、rowsというプロパティに2つのオブジェクトが要素として含まれる配列が指定されています。

ファイルの末尾には、改行が存在しないことに注意してください。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/SectionLayout.tsx

このコードは、ReactコンポーネントであるSectionLayoutを定義しています。このコンポーネントは、指定されたデータをグリッドレイアウトで表示するためのものです。

コード内で使用されているライブラリとコンポーネントは次の通りです:

  • @mui/material/Paper: Material-UIのPaperコンポーネントです。背景色やパディングなどのスタイリングを提供します。
  • @mui/material/Grid: Material-UIのGridコンポーネントです。グリッドレイアウトを構築するために使用されます。
  • styled(@mui/material/stylesからのもの): Material-UIのstyled関数を呼び出して、スタイルを指定したコンポーネントを作成します。

SectionLayoutコンポーネントは、CustomGridPropsというインターフェイスを受け取ります。CustomGridPropsは、rowsというプロパティを持つ配列です。rowsは、CustomGridItemというインターフェイスを持つオブジェクトの配列です。CustomGridItemは、idnameというプロパティを持つオブジェクトです。

コードの処理の流れは次の通りです:

  1. SectionLayoutコンポーネントがレンダリングされると、Paperコンポーネントが表示されます。Paperコンポーネントのスタイルは、sxプロパティを使用して指定されています。
  2. Gridコンポーネント内に、props.rowsの各要素ごとにStyledSectionコンポーネントが表示されます。それぞれの要素は、Gridコンポーネントの子要素として表示されます。StyledSectionコンポーネントは、centeringというクラス名が付いたPaperコンポーネントです。
  3. props.rows.mapメソッドを使用して、props.rowsの各要素を反復処理し、StyledSectionコンポーネントを生成します。それぞれの要素は、keyプロパティを持つGridコンポーネントの子要素として表示されます。

このコンポーネントは、与えられたデータをグリッドレイアウトで表示するための汎用的なコンポーネントです。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/Button.stories.ts

このコードは、ReactのStorybookを使用して、ボタンのコンポーネントのストーリーを作成しています。

まず、ファイルはButtonコンポーネントのストーリーを記述するためのTypeScriptのモジュールです。このモジュールは、次の内容を含んでいます。

  • Buttonコンポーネントのインポート
  • ストーリーのメタデータを定義するオブジェクトの作成
    • title: ストーリーのタイトル('コンポーネント/Button')
    • component: ストーリーで使用するコンポーネント(Button)
    • parameters: ストーリーブックの機能やアドオンの動作を制御するための静的なメタデータ(layout)
    • tags: Autodocsエントリを作成するためのタグ('autodocs')
    • argTypes: プロパティやパラメータの要素のコントロール方法(ここでは未使用)
  • ストーリーオブジェクトの作成
  • Primary、Secondary、Large、Smallの各ストーリーの定義とデフォルトのプロパティ設定

各ストーリーは、ボタンのプロパティを設定するためのargsオブジェクトを持っています。例えば、Primaryストーリーでは、プライマリボタンであることやラベルが "Button" であることが指定されています。

また、loadersプロパティを使用して、非同期のデータをストーリーにロードすることもできます。この例では、fetchを使用して"jsonplaceholder.typicode.com/todos/1"からデータを取得しています。

最後に、各ストーリーは、メタデータオブジェクトとストーリーオブジェクトを含んでいるデフォルトのエクスポートとして公開されています。これにより、Storybookがコンポーネントとそのストーリーを認識し、表示することができます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/Button.tsx

このコードは、Reactコンポーネントのボタン部分を記述しています。以下は、コード内の主なポイントです。

  • インポート:ReactコンポーネントとCSSファイルをインポートしています。

  • ButtonPropsインターフェース:このインターフェースは、Buttonコンポーネントのプロパティの型を定義しています。プロパティには、primary、backgroundColor、size、label、onClickがあります。

  • Buttonコンポーネント:Buttonコンポーネントは、ボタンのプロパティとともにレンダリングされます。primary、size、backgroundColor、labelの各プロパティを受け取り、ボタンのクラスとスタイルを設定します。ボタンがクリックされた場合、onClickプロパティが呼び出されます。

このコードは特定の要件に基づいてボタンを作成するためのベースとなるコンポーネントです。詳細な実装や使用方法は不明ですが、このコンポーネントを使用することで、異なるスタイルのボタンを作成できると思われます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/SectionLayout.stories.ts

diff --git a/src/stories/parts/SectionLayout.stories.ts b/src/stories/parts/SectionLayout.stories.ts
new file mode 100644
index 0000000..d867d06
--- /dev/null
+++ b/src/stories/parts/SectionLayout.stories.ts
@@ -0,0 +1,21 @@
+import { Meta, StoryObj } from "@storybook/react";
+import SectionLayout from './SectionLayout';
+
+const meta = {

  • title: 'パーツ/SectionLayout',
  • component: SectionLayout,
  • parameters: {
  •    layout: 'fullscreen',
    
  • },
    +} satisfies Meta;
    +export default meta;
    +type Story = StoryObj;

+export const Default: Story = {

  • args: {
  •    rows: [
    
  •        {id: 1, name: 'section1'},
    
  •        {id: 1, name: 'section2'},
    
  •    ]
    
  • },
    +};
    Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/SectionLayout.tsx

このコードは、Reactアプリケーションで使用されるSectionLayoutというコンポーネントです。このコンポーネントは、@mui/material(Material-UI)からimportされたPaperとGridコンポーネントを使用しています。

SectionLayoutコンポーネントは、CustomGridPropsという型のpropsを受け取ります。CustomGridPropsは、rowsという名前のCustomGridItemの配列を持つインターフェースです。

StyledSectionは、styled(Paper)を使用して作成されたスタイル付きコンポーネントです。テーマに基づいて背景色、フォントサイズ、パディングなどのスタイルを持っています。

SectionLayout関数は、grid layoutを使用してレイアウトを描画します。Gridコンテナ内に、props.rowsの各要素に対してGridアイテムを作成し、それぞれのアイテム内にStyledSectionを表示します。

Gridコンポーネントは、ブレイクポイント(xs、sm、md、lg、xl)を設定し、各要素が占有するカラムの数を指定します。さまざまなブレイクポイントでは、画面サイズに応じてアイテムの表示数が異なります。

最後に、SectionLayoutコンポーネントはPaperコンポーネントで囲まれており、スタイルやレイアウトの設定が行われています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Header.stories.ts

このコードは、Headerコンポーネント用のStorybookのストーリーファイルです。

Headerコンポーネントのメタデータ(meta)と、LoggedInLoggedOutという2つのストーリーオブジェクトが定義されています。

metaオブジェクトは、ストーリーブックでの表示方法や関連する情報を定義します。titleプロパティは、ストーリーブックのナビゲーションで表示される名前を指定します。componentプロパティは、ストーリーで使用するコンポーネントを指定します。

LoggedInストーリーは、ログインしているユーザーを指定するためのargsプロパティが定義されています。userオブジェクトのnameプロパティには、ユーザーの名前が指定されています。

LoggedOutストーリーは、追加の引数を持っていません。

これらのストーリーは、ストーリーブックでHeaderコンポーネントの異なる状態を表示するために使用されます。
Good

@Eigo-Mt-Fuji Eigo-Mt-Fuji merged commit f2c3f9d into main Nov 23, 2023
1 check passed
@Eigo-Mt-Fuji Eigo-Mt-Fuji deleted the feature/update-20231119 branch November 23, 2023 08:08
Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Header.tsx

このコードは、Reactで作られたヘッダーコンポーネントです。以下の機能を持っています:

  • ヘッダーコンポーネントには、ユーザー情報とログイン・ログアウト・新規アカウント作成ボタンのイベントハンドラーが渡されます。
  • ヘッダーコンポーネントは、ユーザーがログインしている場合としていない場合で表示内容が異なります。
  • ログインしている場合は、ユーザー名とログアウトボタンが表示されます。
  • ログインしていない場合は、ログインボタンと新規アカウント作成ボタンが表示されます。

また、このヘッダーコンポーネントは、Buttonコンポーネントとheader.cssスタイルファイル(スタイル付きのエントリーポイント)もインポートしています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Page.stories.ts

このコードはStorybookのストーリーファイルです。このファイルでは、特定のコンポーネントに関するストーリーを定義しています。

具体的には、Pageコンポーネントに関するストーリーを定義しています。LoggedOutLoggedInの2つのストーリーがあります。

LoggedOutストーリーでは、ログインせずにページを表示する状態を表しています。

LoggedInストーリーでは、ログインボタンをクリックするアクションを定義しています。play関数で定義されており、実行するとログインボタンをクリックする動作が再現されます。

これにより、Pageコンポーネントがログイン済みと未ログインの状態の両方で正しく表示されることを検証することができます。

また、metaオブジェクトには、ストーリーのタイトルやコンポーネントのパラメータなどの情報が含まれています。

このストーリーファイルは、Storybookの設定ファイルである.storybookディレクトリ内のconfig.jsファイルにインポートされ、StorybookのUIでストーリーとして表示されます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/pages/Page.tsx

このコードは、Reactコンポーネントを定義したファイルです。以下のようなコンポーネントが含まれています。

  • Header: ヘッダーコンポーネント
  • Page: ページコンポーネント

Pageコンポーネントは、以下のような要素をレンダリングします。

  • Headerコンポーネント
  • h2要素:「Pages in Storybook」というテキストを表示します。
  • p要素: 「component-driven process starting with atomic components and ending with pages」というテキストを表示します。
  • p要素: 「Render pages with mock data」というテキストを表示します。
  • ul要素: リストアイテム2つを含みます。
  • p要素: 「Get a guided tutorial on component-driven development」というテキストを表示します。
  • div要素:「Tip Adjust the width of the canvas with the Viewports addon in the toolbar」というテキストを表示します。

このコンポーネントは、Storybook(フロントエンド開発者向けのUIコンポーネントライブラリ)で使用されることを想定しています。Storybookは、ユーザーインターフェースのコンポーネントをビルド・テスト・ドキュメント化するためのツールです。このコンポーネントは、Storybookのページでレンダリングされることを意図しています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/Button.stories.ts

このファイルは、Storybookのコンポーネントのストーリーを定義しているものです。以下にファイルの内容を解説します。

  • metaは、ストーリーのメタ情報を定義しています。titleにはコンポーネントのタイトル、componentには該当するコンポーネントを指定します。parametersでは、ストーリーブックの特定の機能やアドオンの動作を制御するためのパラメータを指定できます。tagsには、オートドキュメントエントリーを生成するためのタグを指定します。そして、argTypesには、コンポーネントの引数の設定を指定します。

  • export const Primary: Story = ...などのブロックでは、実際のストーリーを定義しています。argsには、コンポーネントの引数のデフォルト値やプロパティの値を指定します。loadersには、非同期でデータを取得するためのローダー関数を指定します。

このファイルは、コンポーネントのストーリーを定義するための設定が含まれており、Storybookの動作を制御するための情報を提供しています。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/Button.tsx

このコードは、Reactで作成されたボタンコンポーネントです。

このコンポーネントには以下のプロパティがあります:

  • primary (boolean): ページ上での主要な操作かどうかを指定します。
  • backgroundColor (string): 背景色を指定します。
  • size ('small' | 'medium' | 'large') : ボタンの大きさを指定します。
  • label (string): ボタンの表示テキストです。
  • onClick (function): オプションのクリックハンドラーです。

このボタンコンポーネントは、primaryプロパティがtrueの場合は主要なアクションを表し、falseの場合はセカンダリアクションを表します。sizeプロパティでは、ボタンの大きさをsmallmediumlargeから選択できます。backgroundColorプロパティではボタンの背景色を指定できます。labelプロパティは、ボタンのテキストを指定します。onClickプロパティは、ボタンがクリックされたときに実行される関数です。

このコンポーネントは、button要素をレンダリングし、クラス名とスタイルを適用しています。スタイルは、backgroundColorプロパティに指定された背景色を使用しています。

このボタンコンポーネントは、他のReactコンポーネントで使用することができます。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/SectionLayout.stories.ts

diff --git a/src/stories/parts/SectionLayout.stories.ts b/src/stories/parts/SectionLayout.stories.ts
new file mode 100644
index 0000000..d867d06
--- /dev/null
+++ b/src/stories/parts/SectionLayout.stories.ts
@@ -0,0 +1,21 @@
+import { Meta, StoryObj } from "@storybook/react";
+import SectionLayout from './SectionLayout';
+
+const meta = {

  • title: 'パーツ/SectionLayout',
  • component: SectionLayout,
  • parameters: {
  •    layout: 'fullscreen',
    
  • },
    +} satisfies Meta;
    +export default meta;
    +type Story = StoryObj;

+export const Default: Story = {

  • args: {
  •    rows: [
    
  •        {id: 1, name: 'section1'},
    
  •        {id: 1, name: 'section2'},
    
  •    ]
    
  • },
    +};
    \ No newline at end of file

このコードは、SectionLayoutコンポーネントのStorybookファイルです。Storybookは、コンポーネントのインタラクティブなデモやドキュメンテーションを提供するツールです。

このファイルでは、SectionLayoutコンポーネントに関するメタデータとストーリーを定義しています。
メタデータは、Storybookで表示される情報を定義するためのオブジェクトであり、タイトルや表示するコンポーネント、レイアウトなどを含んでいます。

また、ストーリーでは、SectionLayoutコンポーネントのデフォルトのプロパティを指定しています。この場合、rowsプロパティに2つのセクションを含んだ配列を渡しています。

なお、ストーリーの定義にはStoryObj型を使用しています。これは、StorybookのStoryオブジェクトを定義するための型です。

以上が、このコードの概要です。もしご質問があれば、お気軽にどうぞ。
Good

Copy link

reviewer@1.0.0 start
node ./out/index.js ../../src/stories/parts/SectionLayout.tsx

このコードは、ReactコンポーネントのSectionLayoutを定義しています。

このコンポーネントは、MuiのPaperコンポーネントとGridコンポーネントを使用して、グリッドレイアウトを作成します。Paperコンポーネントは、背景色や余白、高さなどのスタイルを設定するために使用されます。

SectionLayoutコンポーネントには、propsとしてrowsという配列が渡されます。この配列はCustomGridItemという型を持ち、idとnameのプロパティを持つオブジェクトが要素として含まれます。

SectionLayoutコンポーネントでは、Gridコンポーネントを使用して、rows配列の要素を表示します。各要素はStyledSectionコンポーネントでラップされ、その中に表示するテキストはrow.nameから取得されます。

Gridコンポーネントのxsとlgのプロパティは、グリッドのレスポンシブな動作を制御します。xs=12, lg=12とすることで、画面幅がどのサイズになっても常に1行に表示されるようになります。

最後に、SectionLayoutコンポーネントはPaperコンポーネントでラップされ、レイアウト全体を囲む要素となります。

このコードは、グリッドレイアウトを作成し、rows配列の要素を表示するためのコンポーネントです。
Good

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant