#88 複数のアプリで一つのコンポーネントでスタイルを分ける ─ 個人開発者向けのサービスの開発記録

tyshgc
·

本日(4/25)の作業

本日も仕事の方が忙しくてガッツリ作業時間取れない& 仕事の方でも使うTurborepo(Monorepo) + Tailwind + cva + twMergeで複数のアプリケーション間で共通のコンポーネントを使うがスタイルが若干異なる場合の対応を行いました。

  • ✅ 複数のアプリケーション間かつそれぞれのスタイルを区分する共通のコンポーネントの実装

  • 🚴 日報の画面設計・実装

    • 🚴 設計

    • 🚴 実装

  • サインインの実装

    • 認証画面実装

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

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

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

複数のアプリケーション間かつそれぞれのスタイルを区分する共通のコンポーネントの実装

見出しの通りですが具体的に説明をメモっときます。

要件

  • Hoge App, Moge AppとRemixのアプリケーションをturborepoのmonorepoで2つまとめている

  • Hoge App, Moge Appとpackages/uiでまとめているUI Component用のpackageをimportしている

  • Hoge AppとMoge Appでは色味が異なるがコンポーネントとしては色だけなのであとは共通コンポーネントとして扱いたい

下はセクション間の区切り線のコンポーネントです。

これはpackages/ui/sharedディレクトリ配下にあります。これだとHoge AppもMoge Appも黒(alpha 50)の区切り線になります。仮にHoge Appの全体のカラーパターン次第ではくっきりした線になり区切り線が目立ちすぎユーザの認知を妨げる可能性があり適した色合いにしたいところです。

で、まずは以下の型定義にします。

hogeVariants, mogeVariantsと用意します(とりあえず適当にdark/lightで反転した色を定義してます)。それをAppVariantsオブジェクト型にまとめ、DividerPropsにジェネリクスを設けてPropsのappとVariantPropsのジェネリクスにAppVariantsのどちらか指定した形で渡します。

これを実装するとこうなります。

これでコンポーネントを使う際も <Divider app="moge" color="dark" /> と言った感んじにすると良いですし、app PropsをContextで渡ってくるようにしておけばPropsで一々指定しなくても良いです。

ちなみにcolorでhogeDark, mogeDarkみたいにしても良いですが、Hoge AppでもmogeDarkが指定できるのはなって思ってこうしました。

その他、メモなど

  • 仕事の方、API実装とかは今回担当していないので別のエンジニアが実装したものを結合しようと思ってAPIドキュメント見てるけどイミュータブルデータモデリングとかを頭に入れてしまった後によくあるようなRESTful APIを見ると戸惑ってしまう。

← #87 #89 →

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