グローバルBtoB SaaSにおける React開発の課題と実践
by
k-furusho
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
© DressCode Inc . グローバルBtoB SaaSにおける 🌏 React開発の課題と実践 Dress Code株式会社 古庄 和也
Slide 2
Slide 2 text
© DressCode Inc . 1. 自己紹介 2. 会社 / プロダクト紹介 3. i18n対応とLocalization事例 4. 複雑な状態管理に対するアプローチ 5. まとめ Agenda
Slide 3
Slide 3 text
© DressCode Inc . 会社 / プロダクト紹介
Slide 4
Slide 4 text
● Dress Code株式会社 創業メンバー ○ 1人目エンジニア × 技術広報 ● DRESS CODE というワークフォースマネジメントプラットフォームを開発 ○ グローバルに展開している BtoB向けのコンパウンドSaaS ● 2月からReact Tokyoの運営メンバー ● 趣味 ○ ゴルフ / 競馬 / ポーカー ○ 週末は浅草周辺に出没します ■ (アミューズ浅草・ウインズ浅草サイコー) 自己紹介 ふるしょう(@k_furusho_)
Slide 5
Slide 5 text
© DressCode Inc . 会社 / プロダクト紹介
Slide 6
Slide 6 text
CONFIDENTIAL Copyright © DressCode Inc. All rights reserved. 14.1億円 資金調達を実施 Se Pre Seed&Seed Round 130+社 が利用中 Se Number of companies Se Number of countries 4カ国 で事業を展開 Dress Code株式会社について 2024年9月 正式創業:2025年4月 21名 東京都中央区築地2-1-4 銀座PREX East 8F Date of establishment / 設立年月 Location / 所在地 Member / メンバー数 Deconstruct all the business operation, and enable everyone to perform intuitively. Mission / ミッション
Slide 7
Slide 7 text
CONFIDENTIAL Copyright © DressCode Inc. All rights reserved. DRESS CODEについて Deconstruct all the business operation, and enable everyone to perform intuitively. Mission / ミッション パートナー SIer/ITインフラ 通信キャリア リース/ファイナンス ベンダー/ディストリ ビューター リテール/ホールセー ル 士業/プロフェッショ ナルサービス SaaS提供 利用料支払 販売手数料/各種フィー 場所/機会の提供 商品/サービス支払 商品/サービス提供 マーケット(情報/機会)提供 マーケット利用 カスタマー 大企業 中堅企業 中小企業 個人事業主 BPO Professional Finance Lease Market Place Equipment SIM Furniture Fleet Device HR Force RCT Force GA Force PJ Force CG Force IT Force
Slide 8
Slide 8 text
技術スタック 言語 DB インフラ その他・ツール フレームワーク
Slide 9
Slide 9 text
技術広報 カンファレンス・コミュニティ・テックブログに力を入れています! https://zenn.dev/p/dress_code
Slide 10
Slide 10 text
© DressCode Inc . i18n対応とLocalization事例
Slide 11
Slide 11 text
● 現在4ヶ国語対応 ● i18next, react-i18nextを採用 ● Adapterパターンで設計 ○ 直接依存をカプセル化 ○ 初期化処理・カスタムローダーも隠蔽 ● 型安全な翻訳キー運用 ○ .tsファイルでObjectとして運用 ○ NameSpace分割 ■ zod, route, feature …etc ○ コード補完性 i18n対応とLocalization事例
Slide 12
Slide 12 text
● 多言語・日付・通貨の表示に関するコアロジックを集約 ● 初期リソースのバンドルと動的ローディング ● 言語検出の優先規定 ○ Server Session ○ Client State ○ Browser Locale ● ほとんどが純粋関数で実装されており、 ○ 複雑なfixtureのsetup不要 ○ Vitestで高速にテスト可能 i18n対応とLocalization事例
Slide 13
Slide 13 text
ユーザーのLocaleに合わせた表示 ● 住所や日付、通貨などの表示最適化 ● StorybookでUIテストを管理 ○ Storybook環境の言語切り替え ○ user locale毎の表示 ○ 入力値・props毎の表示 i18n対応とLocalization事例
Slide 14
Slide 14 text
i18n対応とLocalization事例 私の知らなかったLocaleの世界
Slide 15
Slide 15 text
国際電話番号入力コンポーネント ● 国コード・電話番号 ● API単位の異なるin/outの形式に対応 ● 非同期バリデーション ○ カスタムバリデーションの拡張 i18n対応とLocalization事例 グローバル SaaS を支える React コンポーネント設計: 国際電話番号入力の実装例
Slide 16
Slide 16 text
© DressCode Inc . 複雑な状態管理に対するアプローチ
Slide 17
Slide 17 text
HR領域のBtoB SaaSにおける機能例 ● 入社手続き > 正社員 > 対象者の割り当て(アカウント発行を含む場合有) ● 入社に必要な情報の回収
Slide 18
Slide 18 text
入社手続き > 正社員 > 対象者の割り当て ● 考慮事項 ○ 段階的な情報入力とステップ管理 ○ 非同期処理とローディング状態の管理 ○ APIエラーハンドリングとユーザーへのフィードバック ○ 入力値のバリデーションとガード条件 ○ 特定条件におけるエラーハンドリング(日付検証など) ○ 状態のクリーンアップとリセット ○ 複雑な選択ロジック ○ 関連データのキャッシュ管理 ○ …etc
Slide 19
Slide 19 text
入社手続き > 正社員 > 対象者の割り当て
Slide 20
Slide 20 text
入社手続き > 正社員 > 対象者の割り当て
Slide 21
Slide 21 text
● 状態遷移が明確に定義され、予期しない状態遷移を防止 ● 開発効率の改善 ○ 状態遷移ロジックをコンポーネントから分離できる ○ テスタビリティが高く、安全に再利用可能なロジックの構築が可能 ○ StateMachine × LLM テスト生成の相性が良い ○ 仕様の認識齟齬防止にも繋がる ■ 可視化したStateMachineをベースにPdMや関係者と仕様を擦り合わせやすい ● 拡張性と保守性 ○ 状態遷移が一元化できるため、追加要求が生じた場合にも品質保証しやすい ○ ドメインモデリングとの相性も良いため、featruesベースの開発にも相性が良い XStateを用いたClient Stateの統制
Slide 22
Slide 22 text
入社に必要な情報の回収
Slide 23
Slide 23 text
● 考慮事項 ○ 地域×個社×対象者×パターン毎に動的なフォーム生成が必要 ○ 標準フィールドとカスタムフィールドのサポート ○ 柔軟なバリデーション機構 ○ 解像的なフォーム構造 ○ 動的コレクションとグループによる繰り返し入力 ○ 多インスタンスの独立した中央集権的な状態管理 ○ 外部システムとの連携を考慮した設計 ○ …etc 入社に必要な情報の回収
Slide 24
Slide 24 text
● Zustandを全面的に採用 ○ Zustand × React Context ○ Slice, immer middleware ● Storeによる中央集権と分離性を重要視 ○ 多インスタンスフォームの状態分離 ○ 状態とロジックを関心毎に分割 ○ イミュータブルな状態更新・副作用の局所化 ○ フォームの整合性を維持する複雑性の隠蔽 入社に必要な情報の回収 複雑な動的フォームを制覇する: Zustand Slice パターンによる状態管理戦略
Slide 25
Slide 25 text
XSTate ● 特定のUIコンポーネントやfeatureにお いて、厳密かつ、状態遷移を管理したい ○ 目安:useState が3つ以上 ● ユーザーインタラクションや非同期処理 のフローを宣言的にモデル化したい ● 処理の段階やモード管理など、「状態遷 移」自体が価値となる場合 ZustandとXStateの使用判断 Zustand ● フォーム全体のデータ保持と同一画面内 からのアクセスが必要なケース ● 比較的自由な構造のオブジェクトを扱 う、汎用的な状態管理 ● 機能スコープ内での効率的なデータ共有 と、パフォーマンス劣後が懸念される機 能
Slide 26
Slide 26 text
© DressCode Inc . まとめ
Slide 27
Slide 27 text
● グローバルSaaSの開発は技術的な挑戦領域・観点が多い ○ かつ、コンパウンドに発展していく場合は、プロダクト間のUI/UXを保つための抽 象化や、モジュールの分割が開発生産性にも寄与する ● i18n対応やLocalizationなど、 ○ 正解がわからない中で工夫を凝らしながら持続的な開発効率を追求 ● Zustand,XStateはいいぞ〜 ○ 状態の統制・関心の分離を追求しやすいと感じている まとめ
Slide 28
Slide 28 text
@gamonges 本日、Dress Code社のエンジニア2名も参加しています! ぜひ、懇親会でお声がけいただけると嬉しいです! (We are hiring!!!) 最後に https://herp.careers/v1/dresscode/7cVOfb7IIvyH @かわうそ
Slide 29
Slide 29 text
© DressCode Inc . End