■イベント Sansan Builders Box 2019 https://jp.corp-sansan.com/sbb2019/
■登壇概要 タイトル:Eightのフロントエンド〜改善の歴史と今後の展望〜
登壇者: Eight事業部 フロントエンジニア 青山修平
▼Sansan Builders Box https://buildersbox.corp-sansan.com/
Eightのフロントエンド〜改善の歴史と今後の展望〜
View Slide
Sansan Builders Boxアジェンダ- Eightの紹介- Eightフロントエンドの歴史- 課題と改善- まとめ
Eightの紹介
Sansan Builders BoxEightの紹介名刺でつながる、ビジネスのためのSNS• 正確にデータ化• 近況情報が届く• すぐに名刺情報にアクセス• 気軽に連絡
Sansan Builders BoxPCからも利⽤可能Eightの紹介
Sansan Builders Box- Eight企業向けプレミアム- Eight Career DesignEightの紹介 - 企業向けサービス
Sansan Builders Box名刺をスキャンするだけで、社内の名刺が共有できるEight 企業向けプレミアム
Sansan Builders BoxEight Career Designタレントプールで転職シグナルをキャッチ
⻘⼭ 修平(Shuhei Aoyama)• Eight Career Designを担当• さわり⼼地のよいUIを作っていきたいフロントエンドエンジニア@Mt_blue81
Eightフロントエンドの歴史
Sansan Builders BoxEightフロントエンドの歴史2012/2 2013/4 2015/12jQuery UIBackbone.jsReact + Redux
Sansan Builders Box- 初期リリース- 名刺ホルダーjQuery UI 時代
Sansan Builders Box- 機能拡充- メッセージ- 通知- プレミアム- フレームワーク導⼊Backbone.js + jQuery UI + CoffeeScript 時代
Sansan Builders Box- MVCの構成が複雑化- デザイン刷新- やってみる!React + Redux + ES6 時代
課題と改善
Sansan Builders Box【UI】- モノリシックなCSS- バラバラなスタイル、コンポーネント【データ】- 煩雑な定形コード作成課題
モノリシックなCSS
Sansan Builders Box- 課題 - モノリシックなCSS参照
Sansan Builders Box- ID セレクター- 要素型セレクター- 複雑な結合⼦- !important- 課題 - モノリシックなCSS………
Sansan Builders Box- 課題 - モノリシックなCSSここの背景⾊⽔⾊に変えたいな※ 限りなく現実に近いフィクションです
Sansan Builders Box- 課題 - モノリシックなCSSなぜそこも・・・それじゃぁ、これで・・・※ 限りなく現実に近いフィクションです
Sansan Builders Box- 課題 - モノリシックなCSS※ 限りなく現実に近いフィクションです
改善
Sansan Builders BoxEightフロントエンド 改善 の歴史2016~CSSのコンポーネント化2015/12React + Redux
Sansan Builders Box- CSSファイルをコンポーネントファイルに合わせる- 1つのコンポーネントには1つのCSS- スタイル定義のセレクタに規約を設ける- コンポーネントの最外部に固有のclassをつける- ドキュメントの整備- 既存のCSSファイルをコンポーネント単位に- およそ 11,000⾏- 地道な作業- 改善 - CSSのコンポーネント化BEM scss-lint
Sansan Builders Box- 改善 - CSSのコンポーネント化BコンポーネントAコンポーネント疎結合
バラバラなスタイル、コンポーネント
Sansan Builders Box- 課題 - バラバラなスタイル、コンポーネント同じ?
Sansan Builders Box- 課題 - バラバラなスタイル、コンポーネントマウスホバー時
Sansan Builders Box- 課題 - バラバラなスタイル、コンポーネント似ているけど違う
Sansan Builders BoxEightフロントエンド 改善 の歴史2016~CSSのコンポーネント化2015/12React + Reduxスタイルガイド
Sansan Builders Box- 参照しやすいように静的なドキュメントとして展開- PropType (型定義)が表現できる- 実際に触って動かせる- react-styleguidist- 改善 - スタイルガイド
Sansan Builders Box- 改善 - スタイルガイドこんなボタンにしたいんだけどスタイルガイドのこのボタンであわせてみませんか?デザイナ エンジニアなるほど
Sansan Builders Box- 改善 - スタイルガイドここはスタイルガイドのこのコンポーネントでいけそうですねエンジニアデザイナなるほど
さらに改善~新スタイルガイド~
Sansan Builders Box- あらためて既存UIからの切り出し- デザイナとの確認- チームでの議論- 改善 - スタイルガイド New
Sansan Builders Box- Storybook- React Hooks- TypeScript- Jest- 改善 - スタイルガイド Newプロダクト全体へ
Sansan Builders BoxEightフロントエンド 改善 の歴史2016~CSSのコンポーネント化2015/12React + Reduxスタイルガイド新スタイルガイド
Sansan Builders Box- 改善 - スタイルガイド
煩雑な定形コード作成
Sansan Builders Box- 課題 - 煩雑な定形コード作成• YAML or JSON• RESTful API• a.k.a. Swagger
Sansan Builders Box- 課題 - 煩雑な定形コード作成Swagger UIhttps://swagger.io/tools/swagger-ui
Sansan Builders Box- 課題 - 煩雑な定形コード作成サーバエンジニア アプリエンジニア フロントエンジニア
Sansan Builders Box- 課題 - 煩雑な定形コード作成194 API (2019/10時点)⼤量のコードが必要
Sansan Builders Box- 課題 - 煩雑な定形コード作成viewmiddlewareactionreducerstoreReduxReact定形処理のコード群• 通信部分• reducerコピペコード
Sansan Builders Box- 改善 - ⾃動でデータを取り扱う定義があるなら⾃動的にデータを取得、格納できるのでは
Sansan Builders BoxEightフロントエンド 改善 の歴史2016~CSSのコンポーネント化2015/12React + Reduxスタイルガイド新スタイルガイドコード⾃動化2017~ 2018/5~
Sansan Builders Box- swagger-client- API定義から⾃動で通信を⾏う- normalizr- ネストしたリソースを正規化- https://redux.js.org/recipes/structuring-reducers/normalizing-state-shape- 改善 - ⾃動でデータを取り扱う
Sansan Builders Box- API定義から専⽤のコードを⽣成するツールを作成- normalizrで利⽤するschema定義- actionのtype定義- データの型情報など- ⽣成されたコードを使って通信、レスポンス解析を⾏うためのmiddlewareとreducerを作成- 改善 - ⾃動でデータを取り扱うhttps://github.com/eightcard/openapi-to-normalizr
Sansan Builders Box- 改善 - ⾃動でデータを取り扱う{type: GET_PET__PET_ID_,payload: { petId: 1 },}dispatchaction
Sansan Builders Box- 改善 - ⾃動でデータを取り扱う専⽤middleware actionresponseschema +normalizrで正規化dispatchswagger-clientで通信
Sansan Builders Box- 改善 - ⾃動でデータを取り扱うid: 2id: 1Pet PetStoreid: bid: astoreviewReact正規化により同じデータは⼀箇所に専⽤reducer
Sansan Builders Boxnormalizrのメリット- 更新APIなどではレスポンスを利⽤して、なにもしなくてもデータ更新- APIのレスポンスに更新済みデータがあればschemaに従って更新- ネストしているリソースも正規化するので異なるAPI由来でもデータ更新- 改善 - ⾃動でデータを取り扱う{petStore: {id: “a”,pet: {petId: 1,kind: “cat”}}}storepetStore更新pet更新
Sansan Builders Box- 改善 - ⾃動でデータを取り扱うviewmiddlewareactionreducerstore定形処理のコード群• 通信部分• reducerReduxReact
Sansan Builders Box- 改善 - ⾃動でデータを取り扱うaction schema reducer不要 不要x 4
まとめ
Sansan Builders Box- フロントエンドの歴史と改善- レガシーへの対応も新しいチャレンジも- 技術だけではなくチームを巻き込んだ改善まとめ
Sansan Builders Boxまとめデザイナ, PO フロントエンド サーバサイド