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

Vanilla-extractで タイプセーフに始める Utility first CSS

eraser5th
October 15, 2022

Vanilla-extractで タイプセーフに始める Utility first CSS

eraser5th

October 15, 2022
Tweet

More Decks by eraser5th

Other Decks in Programming

Transcript

  1. 自己紹介
 ▪ 学部2年 ERASER(加藤豪, @eraser5th)
 ▪ 趣味
 ◦ 環境構築( Neovim,

    Wezterm, …etc)
 ◦ Vtuber
 ◦ スプラトゥーン
 ▪ スキル
 ◦ Webフロントエンド
 ▪ React, Next, TS, GraphQL, Vue, Nuxt, …etc 
 ◦ UIデザイン(入門中) 
 ▪ figma
 ポートフォリオ(即席)
  2. 従来のCSS手法1
 
 ▪ 関心の分離
 ◦ HTMLにはコンテンツのみを含めるべきであり、スタイリングは全てCSSの中で行うべき 
 ▪ HTML構造とCSSを切り離す
 ◦

    BEMなどのCSS設計手法が考えられる 
 ▪ 手順
 ◦ HTMLを記述する
 ◦ 要素に対し、それを表すクラス名を付与する 
 ◦ クラスをフックとしてCSSを記述しスタイリングする 

  3. 従来の手法2による問題点
 ▪ コンポーネントのパターンへの対応のしづらさ
 ◦ 中身が左寄せ、中央寄せ、右寄せのCard 
 ▪ 改善としてコンポーネント+ユーティリティ
 ◦ 先程の例であれば、align-left,

    align-center, align-rightなどのある特定のスタイリングのみに関心 を持つユーティリティクラスを追加 
 ◦ コンポーネントにパターンを追加することなくさまざまなデザインに対応が可能となる 

  4. Utility first CSS
 ▪ 全てのスタイリングを、先程のユーティリティのようなものを組み合わせることに よって実現させる
 ◦ bg_red100, cl_black900, flex,

    fill, br_xl, fs_md, … 
 ▪ 利点
 ◦ 一貫したスタイルになる 
 ▪ 既存のものを使うのであればそのスタイルに乗っ取ることができる 
 ▪ 新たに組むのであれば、その時点でデザインシステムをある程度固めることができる 
 ◦ 過度な抽象化を抑える 
 ▪ 欠点
 ◦ 時として大量のユーティリティクラスを付与するので、マークアップの見通しが悪くなる 

  5. Vanilla-extractとは?
 ▪ CSS-in-TSライブラリ
 ▪ 特徴
 ◦ 型安全
 ◦ 無効なプロパティ値はビルド時にエラー 


    ◦ CSSファイルをビルド時に生成するのでランタイムの計算が少ない 
 ◦ さまざまなプラットフォーム上で動作 

  6. Vanilla-extract + Utility first
 
 ▪ 解決される問題
 ◦ Vanilla-extractは.css.tsファイルに記述する必要がある(vanilla-extract) 


    ▪ ユーティリティクラスを提供するので、マークアップ内にスタイルを記述できる 
 ◦ tailwindなどの多くのutility-first-cssには型が存在しない(utility first) 
 ▪ 全てのユーティリティクラスにTSによる型の補償 
 ◦ エディタに専用のプラグインが必要(utility first) 
 ▪ TSのLSPによる補完ができれば、どんなエディタでも補完が効く 
 ▪ プロパティ値も定義元参照を用いて確認することができる 

  7. 今後の課題・展望
 ▪ 課題
 ◦ hoverなどの実装に使っているsprinkleという機能の特性上、複数のプロパティをまとめたユーティリティクラス の実装が難しい。
 ◦ 同様の理由で変数名などの統一について考える必要性がある。 
 ▪

    混乱のない範囲であれば別プロパティでもまとめたいが(bg-black と bg-coverのようなもの)、sprinkleで はこれが許されない。
 ◦ ビルドサイズ
 ▪ 既にcss, jsの総ビルドサイズが3000KiBほどになっており、ビルドにも時間がかかる 
 ▪ (これに関してはもはや、Vanilla-extractの使用を止める他無いような気もしている) 
 ▪ 展望
 ◦ ほぼTailwindの丸パクリ状態なので、他のライブラリなど比較しつつ、オリジナルにしていきたい 
 ◦ 上の課題がある程度解決し、必要なユーティリティを増やし終えたらライブラリとして公開