マガジン

色の名前を使わずに色を指示する:AIへの色の伝え方

遊びをつくる

執筆にClaudeを使用しています。

ボタン、歯車、ベルが順につながり、操作・状態・反応を示す紙細工風イラスト。
記事のテーマをもとに制作したAI生成イラスト。

ゲームのタイトル画面の配色をAIに頼む場面を考えてみます。「落ち着いた青で」と書くと、返ってくるコードの青は、思い描いていた青と近いでしょうか。同じ文を何度か送ったとき、毎回同じ青になるでしょうか。 この記事で確かめるのは、色の名前を使わずに、明るさ・鮮やかさ・温かさの三つの軸で色を伝えると、色名で頼むより狙いに近い色が返ってくるかどうかです。結果は書きません。読者が自分で行えるよう、問いの立て方、準備、手順、記録の取り方、結果の読み方を設計書の形で示します。

この記事の目次
  1. 色名が伝えているものと、伝えていないもの
  2. 実験の設計:三つの伝え方を比べる
  3. 準備と手順
  4. 記録の取り方:生成コードの色を数値にする
  5. 結果の読み方と起こりやすい誤り
  6. 次の行動

色名が伝えているものと、伝えていないもの

「青」という一語には、幅広い色が含まれます。深い紺色も、淡い水色も、くすんだ灰青も、日常では青の仲間として扱われます。色名は便利ですが、明るさや鮮やかさの情報を落とした状態で相手に渡されます。

人間同士なら、前後の文脈や好みの共有で補えます。AIに頼む場合は、その補いが毎回同じとは限りません。色名が曖昧さの一因になっているなら、色名を外して別の軸で伝えたときに、ずれや散らばりが小さくなる可能性があります。これがこの実験の仮説です。成り立つかどうかは、記録を取ってから判断します。

三つの軸は、色を数値で扱うHSLという表し方にほぼ対応させられます。

  • 明るさ:HSLのL(Lightness)。0に近いほど暗く、100に近いほど白に近づきます。
  • 鮮やかさ:HSLのS(Saturation)。0に近いほど灰色に近く、100に近いほど混じり気のない色です。
  • 温かさ:色相H(Hue)の位置の大まかな言い換えです。赤・橙・黄の側を「温かい」、青・青緑の側を「冷たい」と呼びます。

注意点が二つあります。HSLのSは、見た目の鮮やかさと完全には一致しません。同じSでも、色相によって鮮やかに見える度合いは変わります。もう一つは、温かさだけでは色相が決まらないことです。「中間」と伝えた場合、緑にも紫にも解釈できます。この限界も実験の観察対象に含めます。

実験の設計:三つの伝え方を比べる

問いは「同じ目標色を、伝え方を変えて頼むと、生成された色と目標のずれ、および生成ごとの散らばりはどう変わるか」です。比べる条件は三つです。

  • 条件A(色名):色名で頼みます。例:「背景は落ち着いた青にしてください」。
  • 条件B(三軸の言葉):色名を使わず、三軸の段階で頼みます。例:「背景は、明るさは中より少し暗め、鮮やかさは控えめ、温かさはやや冷たい側にしてください」。
  • 条件C(三軸の言葉+相対修正):条件Bの出力を見たうえで、「明るさをもう一段階だけ上げてください」のように、軸と方向だけで直します。

条件Cを入れる理由は、色の伝え方には最初の一回だけでなく、直し方も含まれるからです。「もう少し明るく」のような相対的な指示が、実際に目標へ近づく方向に働くかを見ます。

禁止語のルールも決めます。条件Bと条件Cでは、色名(赤、青、水色など)に加えて、色を連想させるものの名前(空、海、夕焼け、血、若葉など)も使いません。連想語は色名の代わりになってしまい、軸だけの伝達を測れなくなるためです。指示文を書いたら、禁止語が混ざっていないか読み直してください。

準備と手順

準備するものは、次のとおりです。

  • 使うAIを一つ決めます。モデルと設定は、実験の間は変えません。
  • 色を確認するブラウザを一つ決めます。表示のずれを減らすためです。
  • カラーピッカー(OSやブラウザの開発者ツールにあるもの)と、下に示す測定用の小さなHTMLを用意します。
  • 記録用の表を用意します。表計算ソフトでも紙でもかまいません。

1. 目標色を決める

ゲームの画面を一枚想定し、背景・ボタン・文字の三色について、カラーピッカーで目標色を選びます。先に決めて記録し、以後は変更しません。結果を見てから目標を動かすと、比較が成り立たなくなります。

2. 目標色を三軸の言葉に翻訳する

目標色をHSLの数値にし、三軸の段階に直します。段階の境目は、この実験のために均等に切った目安であり、公的な基準ではありません。

  • 1、明るさ(L):0〜20、鮮やかさ(S):0〜20
  • 2、明るさ(L):20〜40、鮮やかさ(S):20〜40
  • 3、明るさ(L):40〜60、鮮やかさ(S):40〜60
  • 4、明るさ(L):60〜80、鮮やかさ(S):60〜80
  • 5、明るさ(L):80〜100、鮮やかさ(S):80〜100

温かさは、色相Hを見て「冷たい/やや冷たい/中間/やや温かい/温かい」から選びます。境目は自分で決め、記録に残してください。紫や緑のように位置が曖昧な色は「中間」にしやすいので、その色を選んだ場合は後の読み方で特に注意します。

3. 生成と回数

各条件で同じ頼み方を5回ずつ、毎回新しい会話で行います。会話を引き継ぐと、前の出力に引きずられるためです。依頼の骨格は固定します。たとえば「ゲームのタイトル画面を、一枚のHTMLで作ってください。背景、ボタン、文字の色は次の指示に従ってください」とし、色の指示部分だけを条件ごとに差し替えます。条件Cだけは、条件Bの各回の出力に続けて、相対修正を一回だけ送ります。

記録の取り方:生成コードの色を数値にする

記録の単位は「条件 × 回 × 要素(背景・ボタン・文字)」です。つまり1条件につき5回×3要素で15件、三条件で45件になります。生成されたコードから色コードを抜き出し、次の小さなHTMLで目標との差を出します。HTMLファイルとして保存し、ブラウザで開くだけで動きます。

html
<!doctype html>
<meta charset="utf-8">
<title>色の差を測る</title>
<p>目標 <input id="a" value="#3a7ca5"> 生成 <input id="b" value="#4f8fb8"> <button id="go">測る</button></p>
<pre id="out"></pre>
<script>
function hsl(hex){
  const n=parseInt(hex.replace('#',''),16);
  const r=(n>>16&255)/255,g=(n>>8&255)/255,b=(n&255)/255;
  const mx=Math.max(r,g,b),mn=Math.min(r,g,b),d=mx-mn;
  const l=(mx+mn)/2;
  let h=0,s=0;
  if(d){
    s=d/(1-Math.abs(2*l-1));
    if(mx===r)h=((g-b)/d+6)%6;
    else if(mx===g)h=(b-r)/d+2;
    else h=(r-g)/d+4;
    h*=60;
  }
  return {h,s:s*100,l:l*100};
}
document.getElementById('go').onclick=()=>{
  const t=hsl(a.value),c=hsl(b.value);
  let dh=Math.abs(t.h-c.h); if(dh>180)dh=360-dh;
  out.textContent=
   '目標 H'+t.h.toFixed(0)+' S'+t.s.toFixed(0)+' L'+t.l.toFixed(0)+'\n'+
   '生成 H'+c.h.toFixed(0)+' S'+c.s.toFixed(0)+' L'+c.l.toFixed(0)+'\n'+
   '色相差 '+dh.toFixed(0)+'度 / 彩度差 '+(c.s-t.s).toFixed(0)+' / 明度差 '+(c.l-t.l).toFixed(0);
};
</script>

入力できるのは「#」付き6桁の16進数です。生成コードが「#abc」のような3桁や、rgb()、hsl()で書かれていた場合は、あらかじめ6桁の16進数に直してから入力してください。

表には、1件ごとに次の項目を残します。

  • 条件、回、要素
  • 生成された色コード
  • 色相差(度)、彩度差、明度差
  • 指示文の全文(後で禁止語の混入を確認するため)

結果の読み方と起こりやすい誤り

数値がそろったら、条件ごと・要素ごとに二つの観点で見ます。

  • ずれ:色相差の平均、彩度差と明度差の平均(符号つき)。符号を残すと、「毎回暗すぎる」のような偏りが見えます。
  • 散らばり:5回の間で、色相・彩度・明度がどれだけ揺れたか。最大と最小の幅で十分です。

判断の例を挙げます。条件Bのずれが条件Aより小さく、散らばりも小さければ、三軸の言葉は色名より安定して伝わったと読めます。ずれは小さいのに散らばりが大きければ、平均では近くても毎回の当たり外れが大きい伝え方です。散らばりは小さいのにずれが大きい場合は、AIが一貫して別の解釈をしている可能性があり、段階の言葉の選び方を見直す手がかりになります。

条件Cでは、修正前後の差が目標に近づいたかを軸ごとに確かめます。明度は近づいたが色相はずれたなど、軸ごとに結果が分かれることもあります。

5回という回数は少なめです。差が小さいときは、結論を急がず回数を増やしてください。

起こりやすい誤りを挙げます。

  • 連想語の混入:「静かな夜のような」と書くと、色名を使わなくても色を指示してしまいます。
  • 会話の持ち越し:新しい会話で行わないと、前の出力が影響します。
  • 目標の後出し変更:結果を見てから目標を直すと、比較が無意味になります。
  • 表示環境の違い:モニタの設定やダークモードの切り替えで見た目は変わりますが、色コードの数値は変わりません。数値で比べる限り影響は小さいものの、見た目の印象を記録するときは環境を固定してください。
  • HSLの限界:低い鮮やかさの色は色相が不安定で、わずかな差で色相が大きく動きます。灰色に近い目標を選ぶと、色相差が大きく出やすい点に注意してください。
  • 要素の混同:背景・ボタン・文字は役割が違い、AIがコントラスト確保のために明るさを調整することもあります。要素ごとに分けて読みます。

次の行動

まず、目標色を一つだけ、背景の一色に絞って、条件AとBを3回ずつ試してみてください。記録表と上のHTMLがあれば、一時間もかからずに最初の数値がそろいます。そこで差が見えたら、ボタンと文字、条件C、回数の追加へと広げていきます。