「ReactとAtomicDesignからみるコンポーネント開発」に参加してきました

コンポーネント開発で変わったフロントエンドとrecompose

  • 石橋啓太
  • DMM.com クリプトマイニング開発部
  • @usagi-f
  • 本書いた人(React開発現場の教科書)

フロントエンドの今昔

  • モノリシック
    • サーバ側にView実装
    • jQuery
    • JSでDOM組み立て
  • マイクロサービス

ターニングポイント

  • レンダリングアルゴリズム
    • UIを宣言的に実装
    • Diff Patch
    • DOMツリーと状態の分離
  • HTMLの組み立てから状態をどう管理するかに変わった
    • 複雑な設計がしやすくなりできることが広がった
    • UNIX哲学の適用
      • 小さいは美しい
    • 宣言的な実装は再現性高い
  • 空中戦から戦略戦へ

React + Atomic Design

React

  • UI構築を抽象化
  • 宣言的関数実装
  • 小さく作って組み合わせる思想
    • 副作用はどうする
    • 責務の分離
  • DOMの書き換えはReactに隠蔽される
    • UIの構築に注力できる

AtomicDesign

  • UIを分類して定義付け
  • UIデザインも含めて設計できる
  • 全てを準拠させるようなものではない
  • デザイナーとエンジニアのコミュニケーションがしやすくなる

higher order component

  • HOC
    • 関数を引数にとって関数を返す関数
// 副作用が逃げる
const withSome = (component) => {
  return {
  }
}
const Button = (props) => <button>{props.label}</burron>
const NewButton = () => withSome(Button)

recompose

  • recompose
    • reactが用意してるもの
  • UIコンポーネントから余計な実装を省きやすい
  • 再利用性が高まる
  • AtomicDesignにも準拠しやすくなる

まとめ

  • コンポーネント開発が普及しそう
    • WebComponents
    • react-native-dom
    • material-ui
    • Polymer
      • lit-html
    • preact
    • alibaba/rax

Alternative Atomic Designをさがして(仮)

AtomicDesignおさらい

  • ページやインターフェイスに含まれる要素を5段階で構成した
  • それを組み合わせることでアプリを作る

5要素

  • Atoms
    • それ以上分解できない
  • Molecules
    • 一つのことをうまくできること
  • Organisms
  • Template
  • Pages

AtomicDesignへの疑問

  • Atomsからほんとに作れるの?
  • MoleculesとOrganismsの違いがわからない

Alternative Atomic Design

  • 作者
    • AtomicDesignは厳格に守るものではない

GE

Futuerlearn

  • MoleculesとOrganismsの違いがわからない
  • 分ける必要あるのか
  • helpers
    • それ単体で意味をなさないもの
  • standalone
    • それ単体で独立したコンテンツ

Lewis ...

  • 用語が混乱を招く

Airbnb DLS

Back...

  • 楽譜からメタファーを持ってきた
    • ハーモニー
    • メロディー
    • リズム

まとめ

  • MoleculesとOrganismsの違いにみんな悩んでる
  • 化学用語馴染みづらい
  • チームに合った構造を試してる

React360でVR

React360とは

  • 3DとVRのUIフレームワーク
  • ReactVRから改名した
    • Web実装とOculus実装を分けた
    • Web版がReact360
  • メリット
    • Reactの考え方でVRのUIを構築可能
  • GetStarted

      yarn add react-360-cli
      react-360 init sample
      cd sample && yarn start
    
  • コンポーネントはRNっぽい

    • ViewとかTextとか
    • AppRegistryとか

アーキテクチャ

  • Main Thread
  • Executer
    • React App
    • RN

トークセッション

  • atomsから作っていくスタイルは合わないことが多い
    • プロジェクトの性質による
    • 諸届はあってると思う
  • デザイナーがいるかどうか
  • UIライブラリを使うかどうか
  • material-uiみたいな公開されたデザインシステムの構成だけ使いたい見た目は自分で作りたい
    • スマホアプリならAndroidはmaterial-designがベースとかなってるから乗っかりやすい
    • Webは自由だから悩みどころ