個人開発者向けのサービスの開発記録 #26 20240210

tyshgc
·

本日の作業

  • ➕ ✅ apps/coreの内容を適切に分解した

  • データベース環境の構築

    • 🚴 prisma・tRPCの導入

    • 🚴 prisma・tRPCの導入serverをAPI app(apps/api)として切り出す

    • Supabaseのセットアップ

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

    • 🚴 Model・Repository実装

apps/coreの分解

次の様にする。

  • apps/core/server -> apps/api

  • apps/core/views -> packages/ui/src/entitites, features

  • apps/core/models -> packages/domain

packages/domainの役割

  • modelsはドメインモデル = 集約(Entity)と値オブジェクト及びリポジトリとユースケースをまとめる。

    • ドメインモデルはFrontend(apps/admin, developers)側で参照する。

    • ユーザのインタラクションに対して以下の様なフローにする。

      hooks→ユースケース↔︎repository(集約)↔︎api client

  • eventsはドメインイベントをまとめる。

    • ドメインイベントは主にBackend(apps/api)側で参照する。

    • tRPCを介してFrontend(client)側から受け取った情報をドメインイベント単位で永続化や外部システムとの連携を行う。

packages/uiの役割

  • Feature-Sliced Design のfeatures, entitties, sharedを置く場所にする。

  • FSDではentitiesのSegmentsにapi clientとの繋ぎこみとmodel = View Modelがあるけどこうはせず、featuresがContainer Componentとしてその責務を持つ様にする。また、featuresはステートマシンも紐づく様にする。

    • そうしないと、admin・developersと二つのアプリケーションで文脈が異なる、つまり参照すべきデータが異なるものをうまく捌けないと思われるから。

    • これらのことから、entitiesはcompound patternを採用してSlicesがcompoundのルートコンポーネント名になり、その下に子コンポーネントがある状態にする。

そのほか、メモ

  • 個人開発でアーキテクチャがーとかより小さく実装するサイクルを回す方がいいのはわかっているけど、並行して仕事でも同じアーキテクチャを採用しているのでついでにやってる。

    • 違うのは仕事の方はBackendが別言語で別のエンジニアが実装しているのでprismaとドメインイベントがない点。

    • あとこの知見を記事化したい気持ちもあるのでやってる。

  • 最近自分がそっちにアンテナ貼っているからか個人開発というワードをよく見かける。

← #25 #27 →

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