Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

React / TypeScriptでのカラーピッカーの実装戦略

Avatar for t-jimbo t-jimbo
November 23, 2025

React / TypeScriptでのカラーピッカーの実装戦略

TSKaigi Hokuriku 2025でのLT資料です。
https://hokuriku.tskaigi.org/talks/40

Avatar for t-jimbo

t-jimbo

November 23, 2025
Tweet

More Decks by t-jimbo

Other Decks in Programming

Transcript

  1. © PLAID, Inc. ⾃⼰紹介 2 写真 t-jimbo Takuma Jimbo /

    神保 拓眞 Software Engineer Nubrick / Lab Dept. PLAID, Inc.
  2. © PLAID, Inc. ライブラリ 8 が、どれも決定的とは⾔えない現状 • カスタマイズ性 • Star数

    / DL数 • メンテナンスの継続性 • バンドルサイズ • 実装コスト とりあえず今回はuiw/react-colorを選んだ
  3. © PLAID, Inc. カラーコード 10 いろいろある • HEX (e.g. #FF4769) •

    RGB • HSV / HSB • HSL • XYZ / CIE 1931 • OKLAB • OKLCH • etc.
  4. © PLAID, Inc. HSV 11 よく⾒るSlider + 2DピッカーのUI • Hue(⾊相)

    • Saturation(彩度) • Value / Brightness(明度) ※CSSには hsv() といったメソッドは無い 明度 暗 明 彩度 ⾊相 低 ⾼ Figma
  5. © PLAID, Inc. HSL 12 HSVと似てるけどちょっと違う • Hue(⾊相) • Saturation(彩度)

    • Lightness(輝度) これはCSS対応 hsl(0, 0, 88) 輝度 暗 明 彩度 ⾊相 低 ⾼ Figma
  6. © PLAID, Inc. モダンなやつ 13 OKLCH • Lightness(明度) ◦ RGBの平均値ではなく、

    ⼈間の知覚する明るさ • Chroma(明るさを加味した彩度) • Hue(⾊相) ここ数年でCSS対応 oklch(0.7, 0.1, 272) oklch.com
  7. © PLAID, Inc. どう実装する? 15 決め⼿に⽋けるライブラリ事情 いろんなカラーコード形式 • 汎⽤的で強いHEX, RGB

    • 視覚的に扱いやすいHSV, OKLCH, ... 機能‧UIも変わりうる • テーマカラーパレット • スポイトツール • グラデーション
  8. © PLAID, Inc. どう実装する? 16 決め⼿に⽋けるライブラリ事情 いろんなカラーコード形式 • 汎⽤的で強いHEX, RGB

    • 視覚的に扱いやすいHSV, OKLCH, ... 機能‧UIも変わりうる • テーマカラーパレット • スポイトツール • グラデーション
  9. © PLAID, Inc. どう実装する? 19 DB App ColorPicker UI、機能は⽐較的変更しやすい ライブラリも乗り換えられる

    アプリケーションのインターフェースを変えるのは難しい 境界をちゃんとつくる
  10. © PLAID, Inc. どう実装する? 23 type Any Color = `#${string}`

    | RgbaColor | HsvaColor | HslaColor | … つらい
  11. © PLAID, Inc. どう実装する? 24 アプリケーションではRGBAが使いやすい • 光の三原⾊ • Webを含む多くの環境でサポート

    • 計算処理がしやすい • sRGB以外の⾊空間への対応も⽐較的できる • HEXはstringのparseがちょっと⾯倒
  12. © PLAID, Inc. どう実装する? 25 DB App ColorPicker RGBA SV

    picker Hue slider Alpha slider アプリケーションではRGBA(またはHEX)が使いやすい
  13. © PLAID, Inc. どう実装する? 26 DB App ColorPicker RGBA SV

    picker Hue slider Alpha slider ColorPickerコンポーネントでは?
  14. © PLAID, Inc. どう実装する? 27 RGB → HSVは⼀意に決まらない SV 2D

    Pickerを実装するには、内部状態を HSVA で保持するのがよい react-colorful / ColorPicker.tsx
  15. © PLAID, Inc. どう実装する? 28 DB App ColorPicker RGBA HSVA

    SV picker Hue slider Alpha slider ColorPickerコンポーネント内部では、状態をHSVAで保持する