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
100
0
Share
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.1k
Other Decks in Programming
See All in Programming
The Less-Told Story of Socket Timeouts
coe401_
3
200
Kingdom of the Machine
yui_knk
2
320
[RubyKaigi 2026] Require Hooks
palkan
1
200
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
340
ファインチューニングせずメインコンペを解く方法
pokutuna
0
310
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
400
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
160
10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話
takuya_houshima
0
2.6k
Coding as Prompting Since 2025
ragingwind
0
830
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
140
おれのAgentic Coding 2026/03
tsukasagr
1
150
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
220
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
520
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
480
The Spectacular Lies of Maps
axbom
PRO
1
700
Being A Developer After 40
akosma
91
590k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
260
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
100
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
710
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
The Limits of Empathy - UXLibs8
cassininazir
1
300
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
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ピッカーが主流だが、将来の拡張が考えられる •
型を決めて腐敗防⽌層を設けるのがよさそう