#63 日報・分報のcommand/domain-event実装準備 ─ 個人開発者向けのサービスの開発記録

tyshgc
·

本日の作業

  • 🚴 分報・日報・ユーザに関する設計・実装

    • ✅ 日報・分報の公開について修正

    • 🚴 Server側のDMMFの実装

      • 🚴 command/event/policyの型定義と実装

    • Prismaとの結合

  • サインインの実装

    • 認証画面実装

    • 認証ロジック実装(主にClient側)

    • Server側の認証チェック実装

    • Client側の認証チェック実装

  • 🛑 🚴 イベントストーミングとサービスブループリンの融合についてzennにまとめる(次のもくもく会で書く予定)

日報・分報の公開について修正

上のEvent Stormingだと「下書き or 即時公開」のなのに集約の型定義・zod schemaが次の様に「日報(分報)の公開タイミング」となっていた。正しくはEvent Stormingでよく、予約投稿は今は必要ないので諸々修正しました。

Event Stormingの修正

予約公開など公開タイミング周りが丸っと不要だったのでトルツメ。ついでに公開時の通知周りも再整理して修正done。

引き続き分報も修正する。分報も同じく公開タイミングは不要で下書きと即時公開のみ必要。あと通知周りを整理する。分報公開の度またはメールを飛ばすのはきついし、まとめたタイミングとしても1日に何回かに分けないと分報の意味も薄れるので通知とSlackのみにする。

日報のcommand/event/policyの型定義と実装

集約の型定義・zod schema定義は一旦終わったのでcommand/event/policyの型定義と実装をしていきます。実装の方法は「fp-tsとDMMF」でまとめたのでそれを基に自然言語で具体的な処理などを起こします。これを基に実装を進めます。

日報の記録 〈RecordDaily〉

  • 入力 ─ 日報〈DailySchema〉

    • 日報のタイトル・内容・公開設定を検証する

    • 日報に追加する分報を追加する

  • 出力 ─ Either<Daily>

    • Slackへの連携済みの場合

      • Slack APIに投げるデータを生成する

        • ポストする文

        • サムネイル

        • 日報詳細のURL

        • チャンネルの指定

      • Slack APIへポストする

    • 通知の許可ありの場合

      • 通知サービスへ投げるデータ作成する

        • 通知文

        • 日報詳細のURL

      • 通知サービスへデータを投げる

      • メールテンプレートを生成する

        • タイトル

        • 本文

      • メールを配信キューに登録する

尚、通知周りはどのサービス使うか決めてないので後で実装します。Slackは最初のフェーズでは自分が使えればいいので一旦これも後回し。

その他、メモ

イミュータブルデータモデルとストレージについて

日報の概念をNotionにまとめてますが、イミュータブルデータモデルやDMMFの経ていくうちに、「変更履歴」が日報の概念にもあるのではと。それがどれほどビジネスロジックとして必要かで変更履歴を追える様にするかでイミュータブルデータモデルをどこまでやるかを決めていくのが良さそう。でないと、なんでかんでもドメインイベントを残すとデータベースが本来のサービスに求められる規模感より不必要なストレージを確保しなくてはいけなくなる。

何が言いたいかというと、単なるデータとして考えるのではなくデータベース設計もドメイン知識をそして、そのための考察を繰り返して進めないといけないと思いました。

DMMFについて話した

僕にDMMFのことを教えてくれたエンジニアさんとDMMFやってみた感想などを共有しあった。DMMFが非エンジニアとコードを見ながらコミュニケーションできるのでは?という話になって、処理の流れや処理の命名などがOOPより非エンジニアでもわかりやすいので極論そういうこともできる可能性はあるとか。DDDEUのコント…再現動画ではそれを物語っている。

コードはともかくDMMFの実装は自然言語ととして表現もできるし、図式化もEvent StormingでできるのでOOPよりは確かに非エンジニアにはわかりやすいというのは少しわかる気もする。

とはいえ関数型プログラミング経験がなくDDDも知識だけなどのエンジニアがメンバーに多いとなかなか導入が辛いのではというのも共通認識にとしてあった。というかDDDが難しい、いや事業ドメインへの理解をすることが難しい。ドメインエキスパート不在とか非エンジニアが要求を明確に持っていないとか。そうなるとアプリケーションの設計・実装にも精通していて、ユーザの認知処理やサービス設計にも精通しているデザイナーが最初のブーストの現場にいると良いと思う。ま、そんな人材そうそういないけど。

← #62 #64 →

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