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

iOSDC2021

omuomugin
September 18, 2021

 iOSDC2021

歴史のある大規模アプリにDesign System を導入して開発をスケールさせる

omuomugin

September 18, 2021
Tweet

More Decks by omuomugin

Other Decks in Technology

Transcript

  1. 佐々⽊ (@omuomugin) 
 アプリ基盤チーム リード 
 iOS/Android インフラ周りの実装や 
 全体のアーキテクチャのリードしてます。

    中村 (@valmet) Design System プロジェクトリード 
 機能開発チームのリーダーやりながら、 
 Design System の推進もやってます。
  2. 佐々⽊ (@omuomugin) 
 アプリ基盤チーム リード 
 iOS/Android インフラ周りの実装や 
 全体のアーキテクチャのリードしてます。

    中村 (@valmet) Design System プロジェクトリード 
 機能開発チームのリーダーやりながら、 
 Design System の推進もやってます。
  3. ゼクシィの開発の歴史 外部の開発会社 開発体制共存期間 社内での開発 2011年 2019年 2021年 ~ 最初のリリース 開発⼈数

    : 約20名 
 Lines of Code : 約20万⾏ 結婚観などの変化を受け 
 開発のアジリティ向上や 
 技術的な負債の返済を⽬的に 
 社内のエンジニアが開発に参画 2013年
  4. アプリ基盤チーム - Design System の推進 - インフラ層のオーナーシップ - 全体のアーキテクチャの推進 -

    「機能開発チーム」の技術的な問題解決を⽀援 機能開発チーム - プロダクト全体で追ってる KPI などに紐づくような機能開発を担当 - 基本的には、iOS/Android どちらも開発するマルチファンクショナルチーム
  5. フォントサイズへのこだわり • System Font では 和⽂フォントが欧⽂ フォントの San Francisco に合わせて

    若⼲⼩さめに修正される 
 e.g. system font で 13.6 が およそ 13.0 になる • ゼクシィでは⽇本語を中⼼にデザイン していて困るので都度、調整していた ※ 同じフォントサイズのときのヒラギノを明⽰的に 
 指定した場合とsystem fontを指定した場合
  6. Design System という1つの解決策 • 「プロダクト全体で⼀貫性のあるデザインを担保するための仕組み」 
 ※ Design System ⾃体は様々な定義がある

    • 海外だと Net fl ix や Lyft 
 国内だと メルカリ や SmartHR の取り組みが有名 
 Net fl ix: https://net fl ixtechblog.com/hawkins-diving-into-the-reasoning-behind-our-design-system-964a7357547 
 Lyft: https://medium.com/tap-to-dismiss/a-design-systems-impact-159f4ad3c230 
 メルカリ: https://engineering.mercari.com/blog/entry/2019-08-26-090000/ 
 SmartHR: https://smarthr.invisionapp.com/console/share/ADUDJ8BW74C/403704083 • ゼクシィでの Design System の定義は以下3つを包括 
 ① Figma 上で整理された「デザインマスター」 
 ② iOSアプリ向けのライブラリ (Andorid は今後提供予定) 
 ③ デザインシステムの実装⼀覧を⾒ることができる「カタログアプリ」
  7. 佐々⽊ (@omuomugin) 
 アプリ基盤チーム リード 
 iOS/Android インフラ周りの実装や 
 全体のアーキテクチャのリードしてます。

    中村 (@valmet) Design System プロジェクトリード 
 機能開発チームのリーダーやりながら、 
 Design System の推進もやってます。
  8. Color Text Component Icon ZexyUI App Dynamic Framework Zexy ZexyCatalog

    全体構成 ※ ZexyCatalog = カタログアプリ (発表の後半で紹介)
  9. 実現したこと • デザインマスター上で Color 名を定義 
 e.g. ZexyPink • Color

    名をコード上で利⽤可能にする 
 e.g. UIColor.ZexyPink Color
  10. 設計 • UILabel をラップしたクラスを実装 
 → UILabel への変更を制限する • クラス名をデザインマスターと合わせる

    
 e.g. CaptionRegularBaseDeep 
 - テキストスタイル : Caption 
 - font weight : Regular 
 - Color : BaseDeep Text
  11. 設計 : UILabel への変更を制限する 変更できない🙅 • フォント(サイズ・カラーなど) • ⾏間の⼤きさ •

    カーニング(⽂字同⼠の感覚) • ベースラインの位置 変更できる🙆 • 表⽰するテキスト • テキストボックスの幅 • ⾏数 Text
  12. 実装 • テキストスタイルの定義を Enum としてまとめる • テキストスタイルごとに値を設定 
 textSize :

    10px → 10.7px 
 ※⽇本語フォントが調整されてしまうため 
 lineHeight, baselineO ff set なども設定 Text
  13. 実装 : Interface Builder でプレビューに反映させる • IBDesignable を利⽤して Interface Builder

    でリアルタイム反映できるようにする • IBInspectable を利⽤して Interface Builder で値を設定できるようにする 
 - text 
 - lines Text
  14. Component と課題感 • 繰り返し出てくる View パターン • SliderM (右図の⾚枠) の実装が4つも存

    在している 
 → 実装・デザイナーによるデザインチ ェックの負荷が⾼い😢 • デザイナーと密に連携しないとよく使 うパターンかどうかが判断がつかない Component
  15. Icon について • デザイナーにインタビューした結果「機能 的アイコン」と「装飾的アイコン」を分け て管理していることがわかった • 機能的アイコンは、意味のあるアイコンと してデザインマスター上に定義されたもの 


    → デザインシステムの対象にする • 装飾的アイコンは、特定の機能開発で⼀時 的に利⽤するようなアイコン 
 → デザインシステムの対象には含めない ゼクシィのデザインマスターに定義される「機能的アイコン」⼀覧 Icon
  16. 実現したこと • デザインマスター上で Icon 名を定義 
 e.g. wedding • Icon

    名をコード上で利⽤可能にする 
 e.g. UIImage.Wedding e.g. “wedding” アイコン Icon
  17. 実装の課題 : SVGの利⽤ • デザイナーの負担軽減のためにも SVG を利⽤したい • > Added

    support for Scalable Vector Graphic (SVG) image assets. These preserve their vector representation with deployment targets of macOS 10.15 or later, iOS 13 or later, and iPadOS 13 or later. (18389814) 
 ref: https://developer.apple.com/documentation/xcode-release-notes/xcode-12-release-notes • ゼクシィは、iOS12までをサポートしているので iOS12のサポート終了のタ イミングで ZexyUI に Icon の実装をする予定 Icon
  18. 佐々⽊ (@omuomugin) 
 アプリ基盤チーム リード 
 iOS/Android インフラ周りの実装や 
 全体のアーキテクチャのリードしてます。

    中村 (@valmet) Design System プロジェクトリード 
 機能開発チームのリーダーやりながら、 
 Design System の推進もやってます。
  19. カタログアプリ • 実際のアプリ上で Design System に実装さ れている挙動をチーム全体に⾒てもらいたい • 本体のアプリとは異なり数秒でビルドできる •

    社内アプリなので⽐較的⾃由な技術選定をし て最新技術を試す場としても有効 
 (iOS14以上をターゲットにしてる) 
 e.g. Compositional Layout, Swift Combine, SwiftUI, etc …
  20. 少なくともゼクシィで Design System がうまく⾏ってるコツ • デザイナーのメンタルモデルと業務フローをとにかくインタビューを通して 
 理解した上で Design System

    全体の設計を⾏う 
 → デザイナーが意図していない誤った共通化を避ける • 利⽤する開発者に対するコミュニケーションを重視する 
 → Design System 全体の README.md や各構成要素の使い⽅や制限事項などの README.md を⽤意している Design System 導⼊の効果は絶⼤だが、運営するのはとても⼤変なので 
 「Design Systemチーム」を組むなど体制の整理もするほうが良い (と考えている)