ANSI 256カラー ピッカー | xterm-256color パレットを 1 画面で
xterm-256color が定義する 256 色を、システム色 16・6×6×6 RGB キューブ 216・グレースケール 24 の 3 ブロックに分けて並べたピッカーです。番号を覚えなくても、見た色をそのままクリックすれば、前景 \e[38;5;Nm と背景 \e[48;5;Nm の escape sequence、bash の $'...' 形式、printf の \033[...] 形式、それに HEX と RGB がまとめて出ます。Vim / Neovim の colorscheme、starship.toml、tmux の status-line、oh-my-zsh のテーマを調整するときに、cheatsheet を別タブで開いたり数字を当て勘で打ち変えたりする手間が消えます。
💡 このツールについて
256 色番号は、覚えやすい並びにはなっていません。0〜15 はディストリビューションごとに微妙に違う「システム色」、16〜231 は 16 + r×36 + g×6 + b で算出される RGB キューブ、232〜255 は 8 + 10×N の階調グレー、という規則です。記事や cheatsheet を読めば理屈は分かりますが、実際に「ちょっと暗めの青」「もう一段くすんだ緑」が欲しいときに、毎回テーブルから番号を割り出すのは面倒です。
このツールは、3 セクションを画面に全部広げて、選んだセルの hex と RGB、コピペ用の escape sequence 5 種類をその場で出します。番号入力欄にキーボードから打ち込んでも、グリッドのセルをクリックしても、選択中の色は前景・背景プレビュー 2 帯と #ec1380 outline で示されるので、隣の色と見比べながら微調整できます。前景プレビューは選んだ色のテキストを暗背景に置き、背景プレビューは選んだ色を背景にした上で WCAG 相対輝度から自動で白/黒テキストを反転させるので、可読性まで含めて当たりが付きます。
出力は 4 形式 (\e[38;5;Nm・\e[48;5;Nm・$'\e[38;5;Nm'・\033[38;5;Nm) と reset \e[0m を独立した copy ボタン付きで並べてあります。bash の PS1 には $'...' を、printf のフォーマット文字列には \033 を、echo -e には \e を、と貼り付け先に応じて持っていけば、エディタ側で書き換える手間がありません。
🧐 よくある質問
Q. 0〜15 の色がターミナルで違って見えるのはなぜ? 0〜15 は terminal emulator (Windows Terminal / iTerm2 / kitty / alacritty / GNOME Terminal) ごとに、テーマで上書きされている領域です。ツールの表示は xterm 既定パレットなので、Solarized や Gruvbox を使っている人の手元では別の色になります。配色を厳密に確定したいなら、16〜231 の RGB キューブ側を使うのが無難です。
Q. \e[38;5;Nm と \033[38;5;Nm はどう違う?
中身は同じ ESC (0x1B) ですが、\e は ANSI-C quoted string ($'...' や Z シェル) でだけ解釈される拡張で、POSIX sh の printf 等では \033 (8 進) や \x1b (16 進) を使う必要があります。bash 専用なら \e、移植性が要るスクリプトなら \033、と使い分けてください。
Q. 24bit truecolor が使えるなら 256 色は要らない?
truecolor は端末が xterm-direct 系の TERM や COLORTERM=truecolor をサポートしている必要があります。tmux 0.x や古い ssh 経由、Cygwin、screen の素の構成では truecolor が剥がれて 256 色にフォールバックします。テーマを「どの環境でも同じ色」に揃えたいなら 256 色番号で書いておく方が安全です。
Q. 出力色が薄く見えるのは ChromeOS のディスプレイ問題? 背景プレビューには WCAG 相対輝度 0.5 を閾値に自動で文字色を反転させていますが、これは可読性確認用です。実際の端末で出る色は GPU と画面プロファイルに依存するので、最終調整は端末で見て決めてください。
Q. bash の PS1 に貼ったら改行位置がおかしくなる
PS1 で escape sequence を直接書くと、bash が文字幅を誤計算します。\[ と \] でくくる必要があります: PS1='\[\e[38;5;82m\]\u@\h\[\e[0m\] ' のように、color sequence の前後に \[ / \] を入れてください。zsh の PROMPT は %{...%} で囲みます。
Q. 番号入力で大きすぎる値を入れたら? 0 未満は 0 に、255 超は 255 に clip されます。負の値や文字を入れた場合は何も起きません (parse 失敗で無視)。
📚 豆知識
256 色サポートは 1999 年頃の xterm patch #115 で入りました。それまでの 8 色 (\e[30m〜\e[37m) と 16 色 (\e[90m〜\e[97m bright) では表現力が足りず、emacs ユーザーが colorscheme を作るために要望したのがきっかけ、と Thomas Dickey (xterm maintainer) のリリースノートに残っています。後の xterm-256color terminfo エントリは Debian / Ubuntu で 2002 年頃から標準入りし、2010 年代には Vim 系エディタの colorscheme コミュニティ (Gruvbox / Nord / Tokyo Night) が 256 色番号を前提に作られるようになりました。
6×6×6 RGB キューブのレベル値が [0, 95, 135, 175, 215, 255] という非等間隔になっているのは、暗部の階調を細かく取るためです。等間隔だと sRGB のガンマカーブ的に明暗の見え方が偏ってしまうので、低レベル側に解像度を寄せています。逆に、24 階調グレー (232〜255) は 8 + 10N の等間隔で、こちらは「微妙なグレー段階」を作りやすいよう設計されています。tmux の status-line 背景に colour234 (暗いグレー)、colour248 (中間グレー) あたりを多用するのはこの設計のおかげです。
ちなみに tmux の config で colour (UK 表記) が標準で使われ、米国綴り color も alias として通用するのは、作者 Nicholas Marriott が UK 出身であることから来た癖と紹介されることが多く、後方互換のため両綴り併用が今も残っています。