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
0
57
React / TypeScriptでのカラーピッカーの実装戦略
TSKaigi Hokuriku 2025でのLT資料です。
https://hokuriku.tskaigi.org/talks/40
t-jimbo
November 23, 2025
Tweet
Share
More Decks by t-jimbo
See All by t-jimbo
高い開発生産性を実現するために取り組んだMagicPodの利活用
jimbo
0
3k
Other Decks in Programming
See All in Programming
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
450
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
37k
Graviton と Nitro と私
maroon1st
0
160
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
120
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.3k
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
240
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osc25hi-duckdb
takahashiikki
0
230
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
930
Cap'n Webについて
yusukebe
0
160
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
580
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
140
New Earth Scene 8
popppiees
0
1.3k
Done Done
chrislema
186
16k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
220
GitHub's CSS Performance
jonrohan
1032
470k
The Invisible Side of Design
smashingmag
302
51k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
100
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
100
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
870
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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ピッカーが主流だが、将来の拡張が考えられる •
型を決めて腐敗防⽌層を設けるのがよさそう