CLI アプリケーションで色を選ぶ方法(2023)

2026/01/29 23:49

CLI アプリケーションで色を選ぶ方法(2023)

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

概要
本稿では、macOS Terminal.app の「Basic」、Ubuntu Tango Light/Dark、および GitHub が好む Solarized Light/Dark という三つの人気テーマにおいて、ターミナルカラーがどれほど読みやすく残るかを検証しています。構文ハイライト付きコードは全てのテーマで約 0.02 秒で終了するため、パフォーマンスは問題ではありません。
カラーテストの結果、多くのパレットはコントラストが低いことが判明しました。Basic では bryellow がライトモードで読めず、blue/brblue がダークモードで失敗します。Tango は Light モードで bryellow の問題と Dark モードで brblack の問題を抱えていますが、そのグレースケールは一貫しています。Sorcerer テーマの黒は背景よりも暗いため、ステータスバーに有用であり、brwhite はテキストを微妙に強調します。
Solarized は Lab* カラースペースを使用して明度を対称化し、モード間でアクセントカラーを共有可能にしています。ただし、その 16 色パレットは 2011 年に丸め誤差を回避するために設計されたものであるため、鮮やかな色がインターフェース要素に再利用されることが多く、いくつかの CLI では灰色または見えない場合があります。
最終表を作成した結果、著者はこれら一般的な構成で読みやすさを保てる 32 通りのカラー設定(通常 + ボールド)のうち 11 種類 を発見しました。ボールドテキストはデフォルトで明るく表示されるため、ユーザー設定により可読性に影響します。「colortest」と「highlight」というテストユーティリティは架空ですが、ターミナルウィンドウのスタイリングは macOS Terminal.app を模して視覚的一貫性を保っています。
推奨 – 開発者は CLI で使用するカラーを上記で特定された「ほぼ問題ない」色に限定し、広範なユーザーに対して可読性を維持し、アクセシビリティの課題とサポート負荷を削減するとともに、CLI の普及を促進すべきです。

この改訂された概要は主要ポイントを完全に反映し、推論の不備を排除し、明瞭さを保ち、曖昧な表現を取り除いています。

本文

CLIツールで構文強調付きのソースコードを表示することを想定してみましょう。
まずは、選んだ端末テーマに合うような色を決めます。

~ — zsh — Sorcerer — 51×11% highlight foo
# just some docs
func HelloWorld() [12]u8 {
    return "hello world\n"
}
Finished highlighting in 0.02 seconds.
% █Nice!

しかし、別のテーマを使っている人にとっても見やすいかどうかは分かりません。
少なくともデフォルト設定で試してみる価値はあるでしょう。


macOS Terminal.app のデフォルトテーマ

~ — zsh — Basic — 51×11% highlight foo
# just some docs
func HelloWorld() [12]u8 {
    return "hello world\n"
}
Finished highlighting in 0.02 seconds.
% █~ — zsh — Basic — 51×11% highlight foo
# just some docs
func HelloWorld() [12]u8 {
    return "hello world\n"
}
Finished highlighting in 0.02 seconds.
% █Youch!

次に、Ubuntu 等でデフォルトになる Tango テーマを試してみましょう。


Tango Light

~ — zsh — Tango Light — 51×11% highlight foo
# just some docs
func HelloWorld() [12]u8 {
    return "hello world\n"
}
Finished highlighting in 0.02 seconds.
% █~ — zsh — Tango Dark — 51×11% highlight foo
# just some docs
func HelloWorld() [12]u8 {
    return "hello world\n"
}
Finished highlighting in 0.02 seconds.
% █Hmm, better, but not by much.

最後に、最も人気のあるカスタム端末テーマである Solarized を試してみます。


Solarized Light

~ — zsh — Solarized Light — 51×11% highlight foo
# just some docs
func HelloWorld() [12]u8 {
    return "hello world\n"
}
Finished highlighting in 0.02 seconds.
% █~ — zsh — Solarized Dark — 51×11% highlight foo
# just some docs
func HelloWorld() [12]u8 {
    return "hello world\n"
}
Finished highlighting in 0.02 seconds.
% █Well then …

それでは各パレットを見てみましょう。


Sorcerer

~ — zsh — Sorcerer — 51×11% colortest
██ black   ██ brblack
██ red     ██ brred
██ green   ██ brgreen
██ yellow  ██ bryellow
██ blue    ██ brblue
██ magenta ██ brmagenta
██ cyan    ██ brcyan
██ white   ██ brwhite

Sorcerer では、デフォルト背景に対してすべての色が可読性を保っています。ただし黒は実際には背景より暗くなっているため、ステータスバー等で背景色として使うと便利です。
白はデフォルト前景色と同じ色で、

brblack
はやや薄い色です。さらに
brwhite
は前景色よりも明るく、エラーメッセージやタイトルなど重要なテキストを控えめに強調するのに適しています。


Basic

~ — zsh — Basic — 51×11% colortest
██ black   ██ brblack
...

Basic テーマは、残念ながら非常に劣っており、90 年代の xterm を思わせる外観です。

bryellow
はライトモードで読めません(前述のコードサンプルの関数名を確認してください)。ダークモードでは青と
brblue
が完全に読めない状態です。

その結果、安心して使用できる 13 色だけが残ります。

~ — zsh — Sorcerer — 51×11% colortest --only-usable
██ black   ██ brblack
...

Tango

~ — zsh — Tango Light — 51×11% colortest
...
~ — zsh — Tango Dark — 51×11% colortest
...

私の見解では、Basic テーマよりはずっと良いですが、完全に完璧というわけではありません。

bryellow
はライトテーマで再び読めませんし、
brgreen
はやや見づらいかもしれませんが、アプリケーションで
brgreen
を使用しても問題は生じないでしょう。

ここまで来ると、グレースケール ― 黒・

brblack
・白・
brwhite
― がライトとダークの両方テーマで一貫していることに気づくはずです。
つまり、Tango Light では
{,br}white
が読めず、Tango Dark では黒が読めません。要するに、以前考えていた「
brwhite
を使って内容を強調する」アイデアは破棄します。


Solarized

~ — zsh — Solarized Light — 51×11% colortest
...

Solarized は興味深いテーマです。
すべての色は Lab*(1970 年代に開発された視覚的均一性を持つ色空間)で選ばれています。
その明度は完全に対称で、Solarized Light と Dark が同じアクセントカラーセットを共有しながら等しいコントラストを保てます。さらに、ライトテーマの暖色系とダークテーマの寒色系は互いに補完関係にあります。

Solarized は非常に人気が高く、執筆時点で GitHub 上で最もスター数の多いテーマリポジトリです(15.4k スター)。次に近い Gruvbox は 11.8k スターしかありません。

Solarized の16色パレットの奇妙な構成を理解するには、2011 年に Solarized が初めて公開された時代へ戻る必要があります。
当時は24bit カラーをサポートする端末が存在せず、Vim テーマでは多くの場合「256 色パレットの最も近い値」に丸める手法が取られていました。この方法だとテーマの数学的対称性が破綻します。

そこで当時選ばれた解決策(実際はハック)は、Vim インターフェースで使用されるすべての色を 16 色に絞り込むことでした。Solarized のアクセントカラーは16色パレットの「ノンブライト」列に適合し、モノトーンカラーは「ブライト」列に収まります。ユーザーが端末で Solarized パレットを使用すると、Vim は 16 色だけでインターフェース全体を正しくカラリングできます。

しかし、Solarized が自ら採用したブライト色を利用するアプリケーションは見た目がおかしくなることがあります。多くの Solarized ユーザーが、CLI 出力が不自然にグレーまたは不可視になると報告しています。

brblack
は Solarized Dark では読めないため、影響を受けるブライト色とともにテーブルから除外します。


太字(bold)についての注意

かつて端末が明るい色を表示できなかった時代、ハードウェアメーカーは「太字」を明るく表示することで対処しました。これは多くの現代端末エミュレータにデフォルトで残っており、ユーザー設定によっては通常のカラフルテキストが太字になると同時に明るくなることがあります。


結論

以上を踏まえて、許容できる色の最終表を提示します。

~ — zsh — Sorcerer — 51×21% colortest --only-usable --bold

Regular:
██ black   ██ brblack
...
Bold:
██ boldblack   ██ boldbrblack
...

合計で 32 のうち 11 色しか「ほぼ問題ない」「多くの人が使っている一般的設定では読める」と判断できる色です。

CLI ツールを開発し、自己以外の誰かに使用される予定なら、ここで示した「大体 OK」な色だけに限定してカラ―を使用することを強く推奨します。


付録

この投稿では、macOS Terminal.app のウィンドウをできる限り似せて色を選び、ピクセル単位で寸法を合わせています。タイトルバーの寸法は実際の画面上の寸法に極力近づけました。colortest と highlight ユーティリティは完全に架空です。

Terminal.app は「Basic」のライトとダークバリエーションを個別には提供しておらず、OS のテーマが変わると自動で切り替わります。この反応機能は他のテーマ(プリインストールまたはユーザー作成)には公開されていないようです。

この挙動を再現するために、本投稿の端末ウィンドウはサイト全体がライトモードかダークモードかで反応させています。ただし Basic ウィンドウは固定で、実際に「ライト Basic」と「ダーク Basic」の両方を同時に見ることはありません。

— Luna Razzaghipour (2023年1月29日)

同じ日のほかのニュース

一覧に戻る →

2026/01/30 2:02

プロジェクト・ジーニー:無限に広がるインタラクティブワールドへの実験 (Note: The translation maintains the original length and conveys the meaning accurately.)

## Japanese Translation: > **Project Genie** は、米国のGoogle AI Ultraサブスクライバー(18歳以上)向けに提供されている最先端の実験プロトタイプです。ユーザーはテキストプロンプトやアップロードした画像を使ってインタラクティブな世界を構築・探索・リミックスできます。Genie 3、Nano Banana Pro、およびGeminiが動力源であり、Genie 3はシーン内を移動する際にリアルタイムでパスを生成し、Nano Banana Proはクイックスケッチプレビューとカメラコントロール(第一人称または第三人称)を提供します。探索はダイナミックで、システムはユーザーの行動に応じてオンザフライでパスを生成し、カメラコントロールを提供し、プロンプトやキュレーションされたギャラリー/ランダマイズコンテンツを通じて既存の世界をリミックスできます。ユーザーは自分の作成物の動画をダウンロードすることが可能です。 > 既知の制限には、世界のリアリズムの低下、物理的な不正確さ、キャラクターコントロール/レイテンシー問題、および生成時間の60秒上限があります。発表されたGenie 3機能(例:プロンプタブルイベント)はまだ実装されていません。このプロトタイプはGoogle Labsの責任あるAIイニシアチブの一環であり、信頼できるテスターからフィードバックを収集しています。 > Googleは米国外へのアクセス拡大を計画しており、最終的にはより広範なオーディエンスに公開し、ユーザー入力に基づいて機能を洗練させていく予定です。このツールはクリエイターを支援し、開発者に新しいコンテンツ生成ワークフローを提供し、AI駆動型インタラクティブメディアにおけるGoogleの地位を強化する可能性があります。

2026/01/30 3:55

プレイステーション II リコンパイル・プロジェクトは、まったくもって驚異的です。

## Japanese Translation: > **PS2Recomp は、PlayStation 2 タイトルをネイティブな Windows/Linux バイナリに変換する新しい静的リコンパイルツールであり、現在のエミュレーター(例:PCSX2)よりも優れた性能を目指しています。コンソール固有の CPU(Emotion Engine)と GPU(Graphics Synthesizer)を対象にすることで、低価格帯 PC でもスムーズに動作できる効率的なコードを生成できます。このプロジェクトは、N64 の Mario 64 や Zelda がモダングラフィックス機能を追加してリコンパイルされたような、以前のコンソールリコンパイル作業を基盤としており、このアプローチがより強力なシステムに適用できることを証明しています。 > > 「どんなゲームでも動かせる」ドロップイン型エミュレーターとは異なり、PS2Recomp は個別のタイトルに適用する必要があります。また、ゲームコードのデコンパイルも可能です。プロジェクトはまだ進行中ですが、一度完了すれば、Metal Gear Solid 2、Gran Turismo、God of War、Tekken 4、Shadow Hearts などのクラシック作品がネイティブ PC ポートとして登場し、モダンコントローラーをサポートし、高解像度リマスターやコミュニティリメイクも実現できる可能性があります。これによりプレイヤーは高フレームレート・鮮明な解像度と新しいビジュアルアップグレードを享受でき、開発者はレガシーリマスターの制作ルートが明確になり、業界は古いタイトルを現代ハードウェア上で保存し活性化する実証済みモデルを手に入れられます。 > > **技術的注記:** PS2 の Emotion Engine は 300 MHz 未満(2つのベクトルユニット)で動作し、Graphics Synthesizer は約 147 MHz(4 MB 内蔵 DRAM)で運転されており、クロック速度が低くても同時期のコンソールを上回る性能を示しています。

2026/01/30 7:38

**グリッド:永遠に無料、ローカル優先、ブラウザベースの3Dプリント/CNC/レーザー用スライサー**

## 日本語訳: Grid.Space は、完全にローカルで動作する無料のブラウザベースの製造プラットフォームです。ソフトウェアのインストール、ライセンス取得、クラウドアップロードは不要です。すべての学生作品はローカルデバイス上に保持されるため、COPPA と FERPA の準拠と完全なプライバシー保護が保証されます。このサービスは初回読み込み後にオフラインで動作し、Windows、macOS、Linux、Chromebook、タブレット、および古いコンピュータのすべてのモダンブラウザをサポートします。 3Dプリント(FDM / SLA)、CNC 溶接、レーザー切断、3D モデリングに対する業界標準のワークフローを提供し、実際のスキル移転が可能です。このプラットフォームは K‑12 の教室、メーカースペース、大学の研究室、図書館、ホームスクール、および放課後プログラムに最適で、IT の悩みや管理者権限を必要としません。 Grid.Space は、テクノロジー & エンジニアリング、サイエンス、アート & デザインの STEM 標準に沿っており、CAD/CAM ワークフロー、加法・減法製造、材料特性、および反復設計をカバーしています。学生は `grid.space/kiri`(3Dプリント / CNC)や `grid.space/mesh`(3Dモデリング)のようなショートカットを使用し、ドラッグアンドドロップでモデルを追加し、機械出力を生成してすべてをローカルに保存できます。 開始は簡単です。grid.space をブックマークし、次に docs.grid.space でチュートリアル、YouTube のウォークスルー、またはフォーラムでレッスンプランを確認してください。このプラットフォームは新機能を自動更新しながら完全にローカルなままです。MIT ライセンスの下でオープンソースとして公開されており、永遠に無料です—席ごとのライセンス料、サブスクリプション料金、または期限切れ割引はありません。サポートが必要な場合は admin@grid.space までお問い合わせください。