個人開発者向けのサービスの開発記録 #45 20240301

tyshgc
·

本日の作業

本日は馬術レッスンの日なので進捗は少なし。

  • ✅ FSDとRemixのloaderの関連について

  • 🚴 分報に関する設計・実装

    • UseCaseの実装

  • Domain EventとPrismaの実装

  • Supabaseの設定と開通

    • Supabase Auth

    • Supabase Database

  • 🛑 🚴 イベントストーミングとサービスブループリンの融合についてzennにまとめる(休日にやる)

FSDとRemixのloaderの関連について

※時間できたら下の内容をzennにまとめる

loaderはSSRで実質Backendなのでroutesにのみ置ける。

これを踏まえてFSDのLayersを絡めるとデータをどう渡すかの問題が発生する。Propsで渡すとPropsバケツリレーになるし、ContextにするとFSDの思想の疎結合性から若干ズレてしまう。

FSDの成り立ちと概要

Feature Sliced Designは、複数のロシアのフロントエンド開発者によって約2018年から2020年にかけて形成され始めました。この設計手法は、特にDmitriy Shekhovtsovなどの開発者によって推進され、コミュニティからのフィードバックと実践経験をもとに徐々に発展しました。FSDの開発には、実際のプロジェクトでの問題点や痛み点を解決するためのアイデアが多く寄せられ、それらが集約されていきました。

この設計手法は、以前から存在するモジュールドリブン開発、クリーンアーキテクチャ、ドメイン駆動設計(DDD)などの原則を基にしていますが、フロントエンド特有の課題に対処するためにこれらを適応・改良しています。FSDは、アプリケーションを「機能」(features)、「エンティティ」(entities)、「共有」(shared)のレイヤーに分割し、さらにそれぞれのレイヤーを「スライス」に分けることで、より整理され、管理しやすいコードベースを目指しています。

Remixのloader

  • SSRの初期レンダリングで取得できるデータはRoutesにあるloaderを通してコンポーネントが取得する。

  • RoutesにはURLが連動する。

    • app/routes/products/detail/[productId].tsx -> /products/detail/1

    • app/routes/products/create.tsx -> /products/create

    • app/routes/products/newer-makers.tsx -> /products/newer-makers

  • Routesには<Outlet />でURLのネストができる

    • productsのroot用routeコンポーネント。URLは「/products」

    • /products/newer-makerにアクセスするとOutletにnewer-makers.tsxの中身が表示される

Remixの仕組みとFSDのLayers

  • RemixのRoutesに相当するFSDのLayerは次の3つ

    • Pages, Widgets, Features

  • Featuresにはロジックまたはロジックとのやり取りが含まれる可能性があるのでRoutesに置くのは妥当ではなさそう

  • FSDの疎結合性を考えると画面に依存しロジックを持たないLayerはWidgets以上と考え、それらをRoutesにするのが良さそう。

イニシャルレンダリングとFSDの問題

  • 前述した通りloaderを持つのはRoutesのため、FSD的にはPagesかWidgetsが持つことになる。

    • PagesをRoutesのrootでwidgetsを使う場合は<Outlet />を設置する。

    • WidgetsはネストされたRoutesとして扱う。

    • ネストされたRoutesが必要ない場合はFeaturesをrootのRoutesに設置する。

  • FeaturesやEntititesに初期データを渡す様にするにはPropsバケツリレーかContextしかないが、疎結合性を最低限のラインで守るにはContextが選択肢としてはベター。

    • MakerListContextはMakerList Entity Componentと関連付けておく。

その他、メモ

← #44 #46 →

@tyshgc
デザインファーム及びスタートアップ(上場)などを経てフリーランスとして、様々なスタートアップや大手企業の新規事業の立ち上げ期における事業設計・アプリケーションの設計・開発、サービスのUX分析とデザインとエンジニアリングの両軸でお手伝いさせていただいています。 現在、個人開発者向けの支援サービスを個人開発中。 X Account: @tyshgc