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

フロントエンド開発における設計のお話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Duck Duck
November 25, 2023

 フロントエンド開発における設計のお話

フロントエンド開発における設計の大切さとコンポーネント設計の具体例の一部を紹介します!

Avatar for Duck

Duck

November 25, 2023

Other Decks in Programming

Transcript

  1. 自己紹介 職種 Software Engineer / Engineer Maganer 経歴 SIer (5年)

    → SaaS提供会社 (3年) + 業務委託 趣味 バンド活動 (ベース) / ロードバイク X @engine_duck Daiki Endo ( Duck )
  2. フロントエンドが責務を担う関心毎が増えた • ページルーティング • Model (外部データ) の状態 (キャッシュ等) • 見た目をどう表示するのかの状態

    • DOMの値 (refオブジェクト) • 認証 / 認可 管理 etc. SSRやRSC (React Server Component) でも、 SeverでフェッチするかClientでフェッチするかの違いで、 フロントエンド (React) が管理することには変わらない。 Client Server Web API JS ( React / Vue ) React / Vue 等のモダンフロントエンドの関心事
  3. フロントエンド開発での関心毎が増えているので、コードが複雑になりやすい。 Next / Nuxt を使えば、React / Vue が提供する複雑な機能を便利に使えるが、 これだけではコードの保守性と可読性がすごく高まる訳ではない。 バックエンド開発では、

    MVCモデルやSOLID原則、クリーンアーキテクチャを用いたクラス設計など、 責務/依存を意識してコードを書いていく流れがあるが、 フロントエンド開発では、ライブラリやFWは何を使うかはよく議論されているが、 設計についてはあまり言及されていない (?) 知られていない ( ? ) ※ Atomic Designはかなり有名。 『フロントエンドのデザインパターン』https://zenn.dev/morinokami/books/learning-patterns-1 ⇦ オススメです! React / Vue ( 宣言的UIライブラリ ) が普及したのも日本ではここ数年なので、 有識者がまだ多くないことも背景にある (?) フロントエンド開発の設計手法は意外と知られていない?
  4. UI表示のみに関心を持つViewコンポーネント 受け取ったデータをどう表示するかに 関心を持つコンポーネント Model コンポーネント Model (外部データ)に関心を持つンポーネント Fetcher Hooks (SWR等)

    をサブスクライブするコンポーネント データロードするサーバーコンポーネント Viewコンポーネントをハンドリングする Controllerコンポーネント 外部データをどのViewコンポーネントに 任せるのかに関心を持つコンポーネント Controller コンポーネント View コンポーネント View コンポーネント MVC指向で考えるコンポーネント設計
  5. Organisms ( Container ) / Template ・特定のプロダクトに依存しない  ( = 他アプリケーションでも使用可能

    ) ・外部モジュール化できる ・UI表示のためのLocal Stateは持つことはある Molecules Atom Atom Atom Organisms ( Presentational ) Molecules Atom Atom Molecules Atom Atom Organisms ( Presentational ) Molecules Atom Atom Molecules Atom Atom Atomic Designを基に考えるコンポーネント設計 ・業務ロジックは持たない ・プロダクト毎に設計 採用ライブラリやプロダクトによって 考え方は変わります! ・ドメインに関心を持つ ・業務ロジックを持つ ・外部データへのアクセスがある
  6. 保守性と可読性を高める工夫やお話したいことは、他にもたくさんあります! • ディレクトリ設計 / スタイリング設計 / テスト設計 • Global State

    を扱うhooksをサブスクライブするコンポーネントの区分 • 循環参照が起きないような工夫 • コンポーネントにおけるProps定義の大切さ ◦ コンポーネント名とProps名でどのようなコンポーネントか分かるように ◦ Propsは関心事として捉える ◦ PropsはなるべくHTMLに沿うようにする ◦ Slot ( ReactElement)で渡すことを意識する その他の開発時の設計およびポイント その他の開発時の設計およびポイント