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

フロントエンドの複雑さに耐えるため実践したこと / readyfor-nextjs-first

Takepepe
February 05, 2021

フロントエンドの複雑さに耐えるため実践したこと / readyfor-nextjs-first

【READYFOR】実践!フロントエンド分離戦略::発表資料
https://readyfor.connpass.com/event/198730/

Takepepe

February 05, 2021
Tweet

More Decks by Takepepe

Other Decks in Technology

Transcript

  1. 参照秩序 のガイドライン ファイル構成は
 Re-ducks パターンとしました。
 関心範囲を境界とし、
 Module 毎で管理。
 ├── redux


    ├── A
 ├── B
 ├── C
 ├── D
 ├── index.ts
 ├── reducers.ts
 └── store.ts
 #readyfor_meetup

  2. 参照秩序 のガイドライン ├── redux
 ├── A
 ├── B
 ├── C


    ├── D
 ├── index.ts
 ├── reducers.ts
 └── store.ts
 ファイル構成は
 Re-ducks パターンとしました。
 関心範囲を境界とし、
 Module 毎で管理。
 Module #readyfor_meetup

  3. 参照秩序 のガイドライン ├── redux
 ├── A
 ├── B
 ├── C


    ├── D
 ├── index.ts
 ├── reducers.ts
 └── store.ts
 Module の内訳は以下のとおり。
 State を軸とした定義を保有します。
 state.ts / reducer.ts / actions.ts
 selectors.ts / thunks.ts
 #readyfor_meetup

  4. 参照秩序 のガイドライン ├── redux
 ├── A
 ├── B
 ├── C


    ├── D
 ├── index.ts
 ├── reducers.ts
 └── store.ts
 この Module 同士は、
 参照関係をもつことができます。
 #readyfor_meetup

  5. 参照秩序 のガイドライン ├── redux
 ├── A
 ├── B
 ├── C


    ├── D
 ├── index.ts
 ├── reducers.ts
 └── store.ts
 例えば「A」で発行された
 「A」のための Action を、
 「C・B」でも購読する、
 という参照関係です。
 #readyfor_meetup

  6. 参照秩序 のガイドライン ├── redux
 ├── A
 ├── B
 ├── C


    ├── D
 ├── index.ts
 ├── reducers.ts
 └── store.ts
 この参照秩序が保たれなければ、
 スパゲティコードが生まれます。
 Reducer と Selector で、
 この参照捻れは発生し得ます。
 #readyfor_meetup

  7. Cypress で実践する BDD
 Redux と Cypress は相性がよく、
 Action dispatch で特定条件の再現が可能です。


    こういった場面で、Redux の特性が活きてきます。
 #readyfor_meetup

  8. Cypress で実践する BDD
 PR とともに実装内容がテストに記されているため、
 PR 概要を詳に書かずとも概要が伝わる状態が理想です。
 
 describe("「支払い方法」そのものが表示されない条件 ",

    () => { - xit("最終確認ページから「リターンを変更する」ために戻ってきた場合 ", () => { + it("最終確認ページから「リターンを変更する」ために戻ってきた場合 ", () => { }); });
  9. 制御・非制御 Component の I/F
 たとえば、非制御 Component + Form
 前提の props

    設計が紛れていた事。
 Form 都合の props を剥がすリファクタリングに
 想定以上の工数がかかりました。
 
 #readyfor_meetup

  10. 制御・非制御 Component の I/F
 React on Rails で利用していた箇所としては、
 非制御 Component

    がベストだった背景がそこに。
 移行に必要なコストに違いないものです。
 
 #readyfor_meetup

  11. これからも Redux を使いつづけるか?
 useContextSelector など、
 Redux(useSelector) の代替となる様な
 React 公式 API

    の検討も始まっており、
 状態管理ライブラリ選定はやはり悩みどころです。
 #readyfor_meetup