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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
t-jimbo
November 23, 2025
Programming
0
65
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
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
170
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
CSC307 Lecture 09
javiergs
PRO
1
840
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
Oxlintはいいぞ
yug1224
5
1.3k
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
130
今から始めるClaude Code超入門
448jp
8
9k
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
770
Featured
See All Featured
Visualization
eitanlees
150
17k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
Designing for Timeless Needs
cassininazir
0
130
Technical Leadership for Architectural Decision Making
baasie
2
250
The Art of Programming - Codeland 2020
erikaheidi
57
14k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
Building Adaptive Systems
keathley
44
2.9k
GraphQLとの向き合い方2022年版
quramy
50
14k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2k
4 Signs Your Business is Dying
shpigford
187
22k
What does AI have to do with Human Rights?
axbom
PRO
0
2k
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ピッカーが主流だが、将来の拡張が考えられる •
型を決めて腐敗防⽌層を設けるのがよさそう