卒業制作、かなり気合の入った面白そうなシステムですね!「作りたいものから逆算するAI教材」というコンセプト、今のトレンドにも合っていて非常に魅力的です。
さて、画面レイアウトや画面遷移図までできている状態での「Reactのコンポーネント洗い出し(シーケンス図の活用)」ですね。ここで手が止まってしまうのは、実はとても自然なことです。なぜなら、シーケンス図は本来「オブジェクト間の相互作用(バックエンドの処理フローなど)」を得意とするため、フロントエンドのUIコンポーネントをそのまま当てはめようとすると、途端に難易度が上がるからです。
私が実際に開発現場や設計で使っている、スムーズにReactコンポーネントを洗い出すための現実的なアプローチを共有しますね。
- シーケンス図は「画面単位」ではなく「ユースケース(機能)単位」で書く
もし今、「画面Aから画面Bへの遷移」をシーケンス図にしようとしているなら、一度ストップしてみてください。Reactにおけるシーケンス図は、「状態(State)の変化」と「非同期処理(API通信)」の流れを整理するために使うと真価を発揮します。
シーケンス図に登場させる要素(ライフライン)の例
User(ユーザーの操作)
View(Reactコンポーネント例 MaterialDetailPage)
State / Hooks(状態管理:例 useMaterial)
API Client(FastAPIへのリクエスト担当)
Backend(FastAPI / Supabase)
例「AIが個別化した演習問題を生成する」のシーケンス
- ユーザーが「問題を生成」ボタンをクリック
- Viewが Hooks の関数を叩く
- Hooks** がローディング状態を true にし、API Clientを呼ぶ
- API Clientが FastAPI へリクエスト
- レスポンスが返ってきたら、Hooksがデータを State に保存
- Viewが State の変化を検知して、新しい演習問題を表示
このように書くと、「あ、この Hooks と State は複数の画面で使い回しそうだな」とか、「この表示部分は独立したコンポーネント(View)に切り出せるな」という境界線が見えてきます。
- 最もおすすめ 画面レイアウトから逆算する「コンポーネントツリー」
シーケンス図と並行して(あるいは先に)、すでに作成済みの画面レイアウトをフル活用する方法が一番確実です。Reactの公式ドキュメントでも推奨されている「Reactの思考法(Thinking in React)」をベースにします。
手順
- 赤ペンで囲む 画面レイアウトの図を印刷するか、デザインツール上で、意味のある塊ごとに四角で囲んでいきます。
大きな塊(ページ全体、サイドバー、メインコンテンツ)
中くらいの塊(教材カード、AIチャットウィンドウ)
小さな塊(ボタン、入力フォーム、アバターアイコン)
- 階層構造(ツリー)にする 囲んだ塊を、親子関係のツリー図に書き起こします。
text
1[MaterialPlaygroundPage] (ページ全体)
2 ├── [Sidebar] (進捗ナビゲーション)
3 └── [MainContent] (メイン領域)
4 ├── [ChatWindow] (AIチャット)
5 │ ├── [MessageList]
6 │ └── [MessageInput]
7 └── [CodeEditor] (演習コード・評価)
8
このツリー図ができると、シーケンス図で整理した「State(状態)」をどのコンポーネントに持たせるべきか(親に持たせるか、Hooksに逃がすか)が劇的に見えやすくなります。
3. 今回のシステム特有の「洗い出しのヒント」
今回のアプリは「Electron(デスクトップ)」や「AIチャット」「コード評価」など、リッチなフロントエンド機能が含まれていますよね。コンポーネントを洗い出す際は、以下の視点を持つと設計が破綻しにくくなります。
「ドメイン(業務)コンポーネント」と「UI(共通)コンポーネント」を分ける
AiChatWindow や LearningProgressBar はこのアプリ特有のドメインコンポーネント。
Button や Modal、InputField は使い回す共通UIコンポーネント。まずはドメイン側から洗い出すのがコツです。
AIの「考えている時間(非同期)」を意識する
AIの生成には時間がかかります。シーケンス図を書く時に「Streaming(テキストがパラパラ出るやつ)の処理はどう流れるか?」を意識すると、ChatBubble コンポーネントに必要なProps(プロパティ)が見えてきます。
次に起こすべきアクション
まずは難しく考えず、「一番コアになる画面(例えば、教材を表示してAIとやり取りする画面)」の画面レイアウトを1枚用意し、それをコンポーネントの塊に分解してツリー図を作ってみるのがおすすめです。
そのツリー図を見ながら、「じゃあ、AIチャットの送信ボタンを押した時のデータの流れだけ、シーケンス図で整理してみよう」と進めると、パズルがハマるように設計が進むと思います。
もし「この画面のこの機能、どう切り出せばいい?」という具体的な迷いがあれば、画面のイメージやユースケースを教えてください。一緒に考えていきましょう!応援しています。