Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複雑化したcomponent群と向き合う / #241106_plk_frontend

Ryota Misumi
November 07, 2024
300

複雑化したcomponent群と向き合う / #241106_plk_frontend

Ryota Misumi

November 07, 2024
Tweet

Transcript

  1. © LayerX Inc. 4 三角 亮太(delta) 自己紹介 • 株式会社LayerX ◦

    2024/04〜バクラク申請/経費精算 • 好きな食べ物: うどん・みかん
  2. 5 © LayerX Inc. 事業紹介 稟議・支払申請・経費精算 仕訳・支払処理効率化 法人カードの発行・管理 帳票保存・ストレージ 帳票発行

    * 経費精算のSlack連携は申請内容の通知のみ ・AIが領収書を5秒でデータ化 ・スマホアプリとSlack連携あり ・領収書の重複申請などミス防止機能 ・AIが請求書を5秒でデータ化 ・仕訳・振込データを自動作成 ・稟議から会計までスムーズに連携 ・年会費無料で何枚でも発行可 ・インボイス制度・電帳法対応 ・すべての決済で1%以上の還元 ・AIが書類を5秒でデータ化 ・あらゆる書類の電子保管に対応 ・電子取引・スキャナ保存に完全対応 ・帳票の一括作成も個別作成も自由自在 ・帳票の作成・稟議・送付・保存を一本化 ・レイアウトや項目のカスタマイズも可能
  3. 6 © LayerX Inc. 事業紹介 稟議・支払申請・経費精算 仕訳・支払処理効率化 法人カードの発行・管理 帳票保存・ストレージ 帳票発行

    * 経費精算のSlack連携は申請内容の通知のみ ・AIが領収書を5秒でデータ化 ・スマホアプリとSlack連携あり ・領収書の重複申請などミス防止機能 ・AIが請求書を5秒でデータ化 ・仕訳・振込データを自動作成 ・稟議から会計までスムーズに連携 ・年会費無料で何枚でも発行可 ・インボイス制度・電帳法対応 ・すべての決済で1%以上の還元 ・AIが書類を5秒でデータ化 ・あらゆる書類の電子保管に対応 ・電子取引・スキャナ保存に完全対応 ・帳票の一括作成も個別作成も自由自在 ・帳票の作成・稟議・送付・保存を一本化 ・レイアウトや項目のカスタマイズも可能
  4. © LayerX Inc. 7 基本的な機能 2021年の4月リリースのNuxt製のアプリ 支払申請・購買申請・経費精算などなど複数の申請種別の申請・承認を扱うプロダクト - 申請種別ごとにいろんな種類のvalidationがあったり、 -

    設定で色々経路をいじれたり、 - OCRでデータを読み込んだり とにかく場面場面でいろんな入力が入ってきてハンドリングが必要なプロダクトです バクラク申請経費精算について
  5. © LayerX Inc. 9 主にこの二つ 1. ドメインの複雑さと、リリース時には一般的だったatomic designベースのディレクトリ構造の相性の 悪さ 2.

    リリース時にNuxtが対応していたVue2系から、Vue3系へ移行する難しさ 複雑化したって何?
  6. © LayerX Inc. 10 色々な申請種別を扱うという複雑なドメインが atomic designのパーツを下位のレイヤーから組み立てる思想と合わせにくかった • 下位のcomponentは不要な共通化が行われ再利用・修正が難しい ◦

    例: すごく汎用的な<TextInput />みたいなものが存在していた ◦ 実際はvalidation、クリックした時の挙動、入力した時の挙動までとにかく多岐にわたる ◦ 色々なロジックに対応するためpropsをたくさん受け取って何をするcomponentなのか分か らない • 上位のcomponentは責務とともに実装も膨らむ ◦ サーバからデータを取る、propsに渡すデータ・関数を作成するで実装が膨らむ atomic designとどう相性が悪かったのか
  7. © LayerX Inc. 12 1. 😢ドメインの複雑さとatomic designベースのディレクトリ構造の相性の悪さ a. 😢下位のcomponentの不要な共通化 b.

    😢上位のcomponentの責務が大きくなりでかすぎるcomponentがいる 2. 😢vue2からvue3への移行の難しさ a. 😢vue2時代の型の相性の悪さを引きずって型チェックができていない b. 😢options APIとcomposition APIの混在 この2大巨頭によって思わぬところに影響が出て実装がとても難しいうえに 時間が経つにつれて悪化の一途をたどっている😢😢😢 複雑な状況まとめ
  8. © LayerX Inc. 15 ディレクトリベースの漸進的な改善 atomic designベースのディレクトリに機能単位のディレクトリを新しく切った 狙い 1. 😢→☺ドメインの複雑さとatomic

    designベースのディレクトリ構造の相性の悪さ a. 😢→☺下位のcomponentの不要な共通化 b. 😢→☺上位のcomponentの責務が大きくなりでかすぎるcomponentがいる 新規のものは基本的にfeatures/に入れるように • 明らかに汎用的なもの以外はfeaturesに入れて過度の汎用化を防いだ • featuresに閉じたロジックはcomposableを経由するようにして上位の componentの肥大化を防いだ
  9. © LayerX Inc. 16 ディレクトリベースの漸進的な改善 現実 1. 😢→😢ドメインの複雑さとatomic designベースのディレクトリ構造の相性の悪さ a.

    😢→☺下位のcomponentの不要な共通化 b. 😢→😢上位のcomponentの責務が大きくなりでかすぎるcomponentがいる 新しい下位のcomponentによる複雑さは増えなくなった☺ 上位のcomponentは責務が大きいまま😢 だけど責務が膨らんで行くことは少なくなった☺
  10. © LayerX Inc. 17 力あるのみ • 根気のあるチームメンバーの手によってそれはもうたくさんあった型エラーが0に・・😭 • 進め方は色々工夫してはいたものの型エラーが残っていると伝播してすぐ増えてしまうので 何だかんだ時間と気持ちの戦い・・

    • ただただ偉業 型エラーを全て直す 予定通りの結果 • 😢→😐vue2からvue3への移行の難しさ ◦ 😢→☺☺vue2時代の型の相性の悪さを引きずって型チェックができていない ◦ 😢options APIとcomposition APIの混在
  11. © LayerX Inc. 18 1. 😢→😢ドメインの複雑さとatomic designベースのディレクトリ構造の相性の悪さ a. 😢→☺下位のcomponentの不要な共通化 b.

    😢→😢上位のcomponentの責務が大きくなりでかすぎるcomponentがいる 2. 😢→😐vue2からvue3への移行の難しさ a. 😢→☺☺vue2時代の型の相性の悪さを引きずって型チェックができていない b. 😢options APIとcomposition APIの混在 複雑さの現在地