職人にとって道具は手足のようなもの。Macの職人を自負するのであれば、道具とはFinderでありDockでありiCloudであり、macOSというシステム全体と答えるはず。況んやTerminalをや、macOSの深みへ至るには不可欠の道具であり、これを磨かずしてなんとすべきか。

という大仰な書き出しで始まったが、今回のテーマは「Terminal」の外観にメリハリをつけること。背景色を変えてみようとかテーマがどうだという話ではなく、狙うは「文字色」。Emacsやviといった歴史あるツールでは、ソースコードに含まれる予約語を色分けして表示するカスタマイズ術が確立されているが、それをTerminalでよく使うコマンドでも実現しようというものだ。

なお、世の中には「GNU Source-highlight」などのありがたいツールも存在するが、そういったものはmacOSの場合HomeBrewやMacPortsを介すことになるため、導入のハードルは若干上がる。今回は、コピペでも対応できるカスタマイズ術として、"素のmacOS"でできることにこだわってみたい。

「ls」を見やすく

手始めは、定番の「ls」から。言わずとしれたディレクトリの内容を一覧するためのコマンドだが、デフォルトでは色の概念がない。ファイルとディレクトリも区別されないため、Terminalビギナーが最初に遭遇する簡単そうだが手強いコマンドだ。

そんなlsコマンドも、オプションに「-G」を付けて実行すれば、ANSIカラーシーケンスに従い色分け表示されるようになる。デフォルトでは、通常のファイルはTerminalで指定されたテキストカラー、シェルスクリプトなど実行可能ファイルは赤、ディレクトリは青、シンボリックリンクはマゼンタで表示されるはずだ。なお、以下のエイリアス定義では、ファイル種別をさらに明確にするため、「-F」オプションを付けている。

$ alias ls="ls -GF"
  • 上がデフォルトの、下が「-G」と「-F」オプション付きの実行結果。どちらが見やすいかは一目瞭然

この設定は、Terminalのデフォルトテーマ(Basic)ではそれなりに使えるが、背景色が暗めのテーマを使用している場合、青が見えにくくなる。実行形式ファイル(赤)とシンボリックリンク(マゼンタ)の色傾向が似ていることも、少々気になる。

そこで、ディレクトリの文字色(前景色)をシアンに、実行形式の文字色を黒/背景色を赤に変更してみた。環境変数LSCOLORSに22の色の組み合わせを定義すると(表)、ディレクトリや実行形式ファイルなど、種別によって表示色をカスタマイズできるのだ。思案しただけあって(これが言いたかった)、背景が黒のテーマにマッチすると思うがどうだろう?

$ export LSCOLORS="gxfxcxdxabegedabagacad"
  • 3回目の実行結果が、環境変数「LSCOLORS」をカスタマイズしたあとのもの。より違いがわかりやすくなったはず

環境変数LSCOLORSの色設定
順番 種別 前景 背景
1,2 ディレクトリ blue(e) デフォルト色
3,4 シンボリックリンク magenta(f) デフォルト色
5,6 ソケット green(c) デフォルト色
7,8 パイプ brown(d) デフォルト色
9,10 実行ファイル red(b) デフォルト色
11,12 ブロックデバイス blue(e) cyan(g)
13,14 キャラクタデバイス blue(e) brown(d)
15,16 実行ファイル(SUID有効) black(a) red(b)
17,18 実行ファイル(SGID有効) black(a) cyan(g)
19,20 ディレクトリ(sticky有効) black(a) green(c)
21,22 ディレクトリ(sticky無効) black(a) brown(d)
※:色の後ろにあるアルファベットは「man ls」のLSCOLORS項に掲載

「man」にメリハリを

lsの次に色をカスタマイズすべきコマンドは「man」だ。いわゆるオンラインマニュアルを閲覧するためのコマンドであり、ビギナーとベテラン(マニア?)の別なく愛用者は多い。しかし、macOSに収録されているmanはls同様デフォルトでは色の設定が施されていないため、オプションや環境変数などのキーワードと平文が区別されず少々わかりにくいのが難点だ。

そこで用意したいのが、環境変数「LESS_TERMCAP」の定義。manでマニュアルのソースを解釈するときは、groffの機構を使うが、最終的にはページャ(デフォルトではless)を利用するため、ページャの設定次第でカラー表示が可能になる。macOSに収録のlessはそのようにビルドされているため、必要な定義をbashのログインスクリプト(一般的には「~/.bashrc」)に記述しておけば、manがカラー化されるという寸法だ。

記述例はリスト1のとおり。見出しやオプションの部分にはマゼンタ、引数やキーワードの部分にはシアンが使われるようデザインしている。これを「~/.bashrc」に追加しておくと、次回Terminalウインドウを開いたときから適用される。すべて英語で取り付きにくいmanも、少しは親しみやすくなろうというものだ。

  • デフォルト(上)と比べると、環境変数「LESS_TERMCAP」定義後(下)はメリハリがあってわかりやすい

リスト1:~/.bashrcに追加する内容

export LESS_TERMCAP_mb=$(printf '\e[01;31m')
export LESS_TERMCAP_md=$(printf '\e[01;35m')
export LESS_TERMCAP_me=$(printf '\e[0m')
export LESS_TERMCAP_se=$(printf '\e[0m')
export LESS_TERMCAP_so=$(printf '\e[01;33m')
export LESS_TERMCAP_ue=$(printf '\e[0m')
export LESS_TERMCAP_us=$(printf '\e[04;36m')