GUIが全盛の時代にあっても、ターミナルは「最良のツール」であり続けています。Ars Technicaのシニアテクノロジーエディターが、2007年からの経験をもとに培ったシェルカスタマイズの全容を、実際のコードとスクリーンショットとともに公開しました。bash・fish・Vim・フォントまで、CLIを快適にする具体的な設定が詰まっています。

コマンドの実行時間をプロンプトに表示する

記事の中心となるカスタマイズが、コマンドの実行時間をプロンプトに自動表示する仕組みです。.bashrcに関数群を追加することで、直前のコマンドがどれだけの時間を要したかを次のプロンプトに表示できます。

表示形式は人間が読みやすい形式に自動変換されます。マイクロ秒(us)・ミリ秒(ms)・秒(s)・分(m)・時間(h)を状況に応じて切り替え、常に3桁の精度を維持します。また、コマンドの終了コードが0であれば緑のチェックマーク(✓)、それ以外であれば赤のバツ印(✗)と終了コードを表示します。

Ars Technicaによると、この機能はターミナルセッションを何日も開きっぱなしにしがちな管理者にとって特に有用で、「いつ・何を・どのくらいの時間で実行したか」を後から確認できる点が実用的とのことです。

macOSでfishシェルを使う場合向けには、同等の機能をfishの構文で実装したコードも公開されています。fishではCMD_DURATION変数(ミリ秒単位)を利用し、同様の時間フォーマット変換を行います。

GRCでコマンド出力をカラー化する

ターミナルの視認性を高めるツールとして紹介されているのが、**GRC(Generic Colorizer)**です。追加設定なしで幅広いコマンドの出力に色付けができます。

.bash_aliasesに以下のようなエイリアスを設定することで、dfdufreepingtracerouteipなどの出力が自動的にカラー表示になります。またlsには--color=autollには-AlFh --group-directories-firstオプションを設定し、数値は-hスイッチで人間が読みやすい単位に変換しています。

ただし、ipなどをGRCでラップした場合、パイプで別コマンドに渡す際に予期しない動作をすることがあるため注意が必要です。

ターミナルアプリとVimの選択

ターミナルアプリについては、Ghostty・Alacritty・iTerm2(tmuxウィンドウ統合機能付き)・Warpなどを試用したものの、現在もmacOS標準のTerminal.appを使い続けているとのことです。乗り換えない理由として、ANSIカラーの解釈が変わることで色の調整に時間を取られる点が挙げられています。

エディタはVimを採用しており、Vim-AirlinePromptlineを組み合わせてステータスバーを整備しています。.vimrcの主な設定内容は以下の通りです。

  • 構文ハイライトを常時有効化
  • 小文字のみの検索は大文字・小文字を区別せず、混在する場合は区別する
  • 80列目をハイライト表示(colorcolumn=80
  • タブをスペース4つに統一(tabstop=4softtabstop=4shiftwidth=4expandtab
  • 括弧の対応表示をブロックからアンダーラインに変更(カーソルと混同しにくくするため)
  • 矢印キーで表示行単位の移動を実現(長い折り返し行での操作性向上)

フォントにはMonaspace Neon(MonaspaceファミリーのひとつでGitHub Nextが公開)を採用しており、記事内のスクリーンショットすべてにこのフォントが使われています。「数十年かけてたどり着いた、等幅フォントの理想形に最も近いもの」と評価されています。

あなたのターミナル設定を見せてほしい

記事はArs Technicaの読者に向けた「ターミナル設定の共有」を呼びかける企画でもあります。Neofetchのログインスプラッシュから完全自作のターミナル環境まで、優れた投稿はArs Technicaが記事内で紹介するとのことです。

今回紹介されたカスタマイズはすべて、StackExchangeやRedditの投稿から収集・蓄積したものだとArs Technicaは述べており、コードはそのまま流用・改変して使えます。CLIを日常的に使う方にとって、プロンプトのタイマー表示やGRCによるカラー化は導入コストが低く、実用性の高いカスタマイズです。

Q&A

Q. bashのコマンドタイマーはどこに設定すればよいですか? 記事で紹介されているコードは.bashrc内のPS1プロンプト設定として記述します。PROMPT_COMMANDPS0を組み合わせることで、コマンド実行前後の時刻を計測し、次のプロンプトに経過時間を表示します。

Q. GRCはどのシェルでも使えますか? 記事ではbash環境での使用例が紹介されています。GRC自体は幅広い環境で動作するとされていますが、パイプを使って出力を別コマンドに渡す場合は予期しない動作が起きることがあるため、注意が必要です。

Q. Monaspace Neonはどこで入手できますか? 記事によると、MonaspaceはGitHub Nextが公開しているフォントファミリーです(monaspace.githubnext.com)。詳細は出典元の記事および公式サイトを参照してください。

出典