現代のコマンドラインインターフェースやターミナルエミュレータで、文字に色を付けたりカーソル位置を操作したりできるのは、ANSIエスケープシーケンスという制御信号の仕組みがあるからです。これは単なるテキストデータではなく、ターミナルに対して「ここから先は赤色で表示せよ」や「カーソルを一行上に移動せよ」といった命令を伝えるための特殊なバイト列です。
もともとは物理的なビデオディスプレイ端末を制御するために開発されましたが、現在ではソフトウェア上のターミナルにおいても標準的な仕様として広く採用されています。

Key Facts
- 主要規格: ECMA-48、ISO/IEC 6429、ANSI X3.64などが定義している。
- 基本構造: 多くのシーケンスはESC文字(0x1B)から始まり、それに続くコードで動作を決定する。
- CSI (Control Sequence Introducer): カーソル移動や画面消去など、多くの制御命令の起点となる重要なシーケンス。
- SGR (Select Graphic Rendition): 文字の太字、色、背景色などの視覚的スタイルを制御するパラメータ。
- 互換性: DEC VT100などの歴史的な端末から、現代のxtermやWindowsターミナルまで幅広くサポートされている。
制御コードの基礎:C0とC1
ターミナル制御には、大きく分けて「C0」と「C1」という2つの制御コードセットが存在します。
C0制御コード
C0はASCII規格の一部として定義されており、単一バイトで動作する基本的な制御機能を提供します。例えば、改行(LF)やタブ(HT)、ベル音(BEL)などがこれに該当します。これらはデータ転送量を抑えつつ、基本的なテキスト操作を行うために不可欠な要素です。
C1制御コードとエスケープシーケンス
より高度な操作を行うためののがC1セットです。通常、これらはESC文字(0x1B)に続く特定のバイト列(Feシーケンス)として表現されます。これにより、単一バイトでは表現しきれない複雑な命令をターミナルに送ることが可能になります。

CSI(制御シーケンス導入子)による高度な操作
ANSIエスケープシーケンスの中で最も頻繁に利用されるのが、CSI (Control Sequence Introducer) です。これは ESC [ という形式で始まり、その後に具体的な命令コードが続きます。
主なCSIコマンドの機能
- カーソル制御: 上下左右への移動や、特定の座標への絶対移動(CUP)が可能です。
- 画面操作: 画面全体の消去(ED)や、行単位の消去(EL)が行えます。
- 状態保存: 現在のカーソル位置を保存し、後でそこへ復帰させる機能(SCP/RCP)を備えています。
SGRによる視覚効果の制御
CSIの後に m という文字が続く SGR (Select Graphic Rendition) は、文字の見た目を変更するために使用されます。太字、斜体、下線などのスタイル指定に加え、前景色や背景色の変更が可能です。

色の表現方式とカラーパレット
ターミナルで利用できる色の種類は、サポートされているモードによって異なります。
| モード | 色の数 | 特徴 | 指定方法の例 |
|---|---|---|---|
| 3-bit / 4-bit | 8色 / 16色 | 標準的な基本色と高輝度色。 | CSI 31 m (赤) |
| 8-bit | 256色 | カラーパレットによる詳細な色指定。 | CSI 38;5;n m |
| 24-bit | 約1677万色 | True Color。RGB値を直接指定。 | CSI 38;2;r;g;b m |
その他の特殊シーケンス
OSコマンド (OSC)
ESC ] で始まる OSC (Operating System Command) は、ターミナルのウィンドウタイトルを変更するなど、エミュレータ自体の設定を操作するために利用されます。xtermなどの実装では、終了コードとしてST(String Terminator)の代わりにBEL(ベル音)が使われることもあります。
DEC固有のシーケンス
歴史的なDEC VT100端末で導入された ESC 7 (カーソル位置保存) や ESC 8 (復帰) といったシーケンスは、標準のCSIよりも広い互換性を持つ場合があり、現在でも多くの環境でサポートされています。
Frequently Asked Questions
ANSIエスケープシーケンスとは具体的に何ですか?
ターミナルに対して、文字の表示形式やカーソルの位置などの制御を指示するための特殊なバイト列のことです。ESC文字から始まるため、エスケープシーケンスと呼ばれます。
CSIとSGRの違いは何ですか?
CSIは「制御シーケンス導入子」という命令の開始合図のようなもので、カーソル移動や画面消去など幅広い命令を含みます。SGRはCSIの一種で、特に「文字の色やスタイル(太字など)」を変更することに特化したパラメータです。
なぜ古い規格(VT100など)が今でも使われているのですか?
多くのターミナルエミュレータが互換性を維持しているためです。共通の規格があることで、OSやハードウェアが異なっても、同じ制御コードで同様の視覚効果を得ることができます。
24-bitカラー(True Color)はすべてのターミナルで使えますか?
いいえ。古いターミナルやシンプルな実装の環境では、8色や256色までしかサポートされていない場合があります。利用可能な色は、使用しているターミナルエミュレータの仕様に依存します。
エスケープシーケンスをプログラムで送るにはどうすればいいですか?
標準出力に直接文字列として書き込むことで送信できます。例えば、C言語やPythonなどで \x1b[31m という文字列を出力すれば、それ以降の文字が赤色で表示されます。
References
- Note that some n and m are italicized; these are placeholders for numeric parameters, not literal characters.
- Seen in DOS shell window (non-fullscreen) running in Windows 3.x all the way up to cmd.exe in Windows 8.1
- PowerShell's default shortcut , unchanged for over a decade, remaps yellow and magenta to give PowerShell distinctive foreground/background colors compared to the Command Prompt. PowerShell 7 is unaffected.
- Debug console, "Dark+" theme
- Campbell theme, used as of Windows 10 version 1709.
- For virtual terminals, from /etc/vtrgb.
📸 フォトギャラリー


