Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
React / TypeScriptでのカラーピッカーの実装戦略
Search
t-jimbo
November 23, 2025
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React / TypeScriptでのカラーピッカーの実装戦略
TSKaigi Hokuriku 2025でのLT資料です。
https://hokuriku.tskaigi.org/talks/40
t-jimbo
November 23, 2025
More Decks by t-jimbo
See All by t-jimbo
高い開発生産性を実現するために取り組んだMagicPodの利活用
jimbo
0
3.2k
Other Decks in Programming
See All in Programming
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
500
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
180
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.6k
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
160
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
540
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
180
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
5.3k
Android CLI
fornewid
0
110
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
act2-costs.pdf
sumedhbala
0
120
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Unsuck your backbone
ammeep
672
58k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
First, design no harm
axbom
PRO
2
1.2k
Building an army of robots
kneath
306
46k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
550
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Fireside Chat
paigeccino
42
4k
Transcript
© PLAID, Inc. React / TypeScriptでの カラーピッカーの実装戦略 t-jimbo © PLAID,
Inc. 2025.11.23 | TSKaigi Hokuriku 2025
© PLAID, Inc. ⾃⼰紹介 2 写真 t-jimbo Takuma Jimbo /
神保 拓眞 Software Engineer Nubrick / Lab Dept. PLAID, Inc.
© PLAID, Inc. 3 カラーピッカーの話 Figma
© PLAID, Inc. <input type="color"> 4 MDN Web Docs
© PLAID, Inc. <input type="color"> 5 Pros ‧実装コスト ‧アクセシビリティ ‧各Platform最適化
Cons ‧デザインの統⼀‧カスタマイズ
© PLAID, Inc. ライブラリ 6 uiwjs/react-color React⽤で唯⼀使えそうだったやつ 軽量でカスタマイズしやすい まだ名が売れていない
© PLAID, Inc. ライブラリ 7 いろいろある
© PLAID, Inc. ライブラリ 8 が、どれも決定的とは⾔えない現状 • カスタマイズ性 • Star数
/ DL数 • メンテナンスの継続性 • バンドルサイズ • 実装コスト とりあえず今回はuiw/react-colorを選んだ
© PLAID, Inc. 9 カラーコードいろいろ
© PLAID, Inc. カラーコード 10 いろいろある • HEX (e.g. #FF4769) •
RGB • HSV / HSB • HSL • XYZ / CIE 1931 • OKLAB • OKLCH • etc.
© PLAID, Inc. HSV 11 よく⾒るSlider + 2DピッカーのUI • Hue(⾊相)
• Saturation(彩度) • Value / Brightness(明度) ※CSSには hsv() といったメソッドは無い 明度 暗 明 彩度 ⾊相 低 ⾼ Figma
© PLAID, Inc. HSL 12 HSVと似てるけどちょっと違う • Hue(⾊相) • Saturation(彩度)
• Lightness(輝度) これはCSS対応 hsl(0, 0, 88) 輝度 暗 明 彩度 ⾊相 低 ⾼ Figma
© PLAID, Inc. モダンなやつ 13 OKLCH • Lightness(明度) ◦ RGBの平均値ではなく、
⼈間の知覚する明るさ • Chroma(明るさを加味した彩度) • Hue(⾊相) ここ数年でCSS対応 oklch(0.7, 0.1, 272) oklch.com
© PLAID, Inc. 14 どう実装する?
© PLAID, Inc. どう実装する? 15 決め⼿に⽋けるライブラリ事情 いろんなカラーコード形式 • 汎⽤的で強いHEX, RGB
• 視覚的に扱いやすいHSV, OKLCH, ... 機能‧UIも変わりうる • テーマカラーパレット • スポイトツール • グラデーション
© PLAID, Inc. どう実装する? 16 決め⼿に⽋けるライブラリ事情 いろんなカラーコード形式 • 汎⽤的で強いHEX, RGB
• 視覚的に扱いやすいHSV, OKLCH, ... 機能‧UIも変わりうる • テーマカラーパレット • スポイトツール • グラデーション
© PLAID, Inc. どう実装する? 17 UI、機能は⽐較的変更しやすい ライブラリも乗り換えられる アプリケーションのインターフェースを変えるのは難しい
© PLAID, Inc. どう実装する? 18 UI、機能は⽐較的変更しやすい ライブラリも乗り換えられる アプリケーションのインターフェースを変えるのは難しい 境界をちゃんとつくる
© PLAID, Inc. どう実装する? 19 DB App ColorPicker UI、機能は⽐較的変更しやすい ライブラリも乗り換えられる
アプリケーションのインターフェースを変えるのは難しい 境界をちゃんとつくる
© PLAID, Inc. UI、機能は⽐較的変更しやすい ライブラリも乗り換えられる アプリケーションのインターフェースを変えるのは難しい 境界をちゃんとつくる どう実装する? 20 DB
App ColorPicker SV picker Hue slider Alpha slider
© PLAID, Inc. アプリケーションで扱うカラーコードは? どう実装する? 21 DB App ColorPicker SV
picker Hue slider Alpha slider
© PLAID, Inc. どう実装する? 22 type Any Color = `#${string}`
| RgbaColor | HsvaColor | HslaColor | ...
© PLAID, Inc. どう実装する? 23 type Any Color = `#${string}`
| RgbaColor | HsvaColor | HslaColor | … つらい
© PLAID, Inc. どう実装する? 24 アプリケーションではRGBAが使いやすい • 光の三原⾊ • Webを含む多くの環境でサポート
• 計算処理がしやすい • sRGB以外の⾊空間への対応も⽐較的できる • HEXはstringのparseがちょっと⾯倒
© PLAID, Inc. どう実装する? 25 DB App ColorPicker RGBA SV
picker Hue slider Alpha slider アプリケーションではRGBA(またはHEX)が使いやすい
© PLAID, Inc. どう実装する? 26 DB App ColorPicker RGBA SV
picker Hue slider Alpha slider ColorPickerコンポーネントでは?
© PLAID, Inc. どう実装する? 27 RGB → HSVは⼀意に決まらない SV 2D
Pickerを実装するには、内部状態を HSVA で保持するのがよい react-colorful / ColorPicker.tsx
© PLAID, Inc. どう実装する? 28 DB App ColorPicker RGBA HSVA
SV picker Hue slider Alpha slider ColorPickerコンポーネント内部では、状態をHSVAで保持する
© PLAID, Inc. どう実装する? 29 ColorPicker HSVA
© PLAID, Inc. ColorPicker内部のUIや機能‧依存するライブラリが変わっても対応できる どう実装する? 30 DB App ColorPicker RGBA
HSVA HSL picker LCH picker LLM palette
© PLAID, Inc. まとめ 31 • カラーピッカーの実装⽅法は多様で最適解がない • 現状は2Dピッカーが主流だが、将来の拡張が考えられる •
型を決めて腐敗防⽌層を設けるのがよさそう