とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

ファイルの中身を開く時にcatを使う場合、内容がカラーリングされないので「bat」を使い始めた話

catというコマンドはファイルを結合して表示するためのコマンドです。例えばcat file1 file2のように実行するとfile1とfile2の内容が結合されて画面に表示されます。cat file1 file2 > mergedと実行すると、結合された内容がmergedというファイルに書かれます。

catというコマンドは最小インストールされたLinuxホストであっても最初からインストールされていることが多く、結合せずに単体のファイルを指定してファイルの中身を確認する時にもよく使うコマンドです。

GUIがある環境では何らかのテキストエディターやコードエディターを使って開くことが多いですが、ssh接続した環境でファイルを開くときにはcatをよく使います。

catコマンドはそういう意味では便利なのですが、ファイルを開いたときにカラー表示できないのが悩みの種でした。いや、もちろんそういうためのツールでないと言われればそうなのですが、ないものは欲しいと考えるのが人間というものでして、「(catコマンドは軽量で便利だけど、コードのカラーリングをしたいな)」と、常日頃、思っていました。 色々調べたところに最初に見つけたのがccatというものでした。

ccatはカラーリングに対応したcatコマンドで、Golangで実装されています。 基本的にはcatでできることはできて任意のカラーリングでファイルを表示したり、何かのデータをパイプに繋げてccatを実行することで、テキストデータをカラーで表示できます。

ccatの主な使い方は、次のような感じです(ヘルプをそのまま引用)。

Examples:
  $ ccat FILE1 FILE2 ...
  $ ccat --bg=dark FILE1 FILE2 ... # dark background
  $ ccat --html # output html
  $ ccat -G String="_darkblue_" -G Plaintext="darkred" FILE # set color codes
  $ ccat --palette # show palette
  $ ccat # read from standard input
  $ curl https://raw.githubusercontent.com/jingweno/ccat/master/main.go | ccat

ただこのccatは調べると、「これは良い」、「便利」みたいな記事はたくさんみつかるものの、2015年が最後のリリースで開発は事実上6年前で止まっています。

www.linuxjournal.com

ccatのおかげでだいぶ目は楽になったのですが、開発が止まっているのが気がかりでした。 そこで同じような実装がないかGitHubを検索したところ、見つけました。それはbatです。 batはRustで書かれたcatのクローンです。設定をすると、Gitコマンドと連携して使うこともできるそうです。 2018年頃から開発されているツールです。

基本の使い方は例えばこのような感じです。基本機能はcatやccatと一緒です。

Examples:
  $ bat FILE1 FILE2 ...
  $ bat FILE1 FILE2 > MERGED
  $ bat -l python main.py   #pythonカラーリングでファイルを開く
  $ bat main.py             #標準設定でファイルを表示
  $ bat -p main.py          #カラーリングだけのプレーン表示
  $ bat -H 1:5 main.py     #1から5行目までをハイライト表示
  $ man bat | bat           #マニュアルをbatで開く

デフォルトの設定だと、行数表示されてかつ、開いているファイルが冒頭に表示されるので、これでいいじゃんって感じになりました。catコマンドからはそれますが、ファイル編集もできたらいいのにな...なんて感じました。

1から5行目までをハイライト表示すると、こんな感じです。

batコマンドはRHEL, Rocky, Almaの場合は、EPELリポジトリーが有効だとインストールできます。

sudo dnf install bat

macOSの場合はHomebrewでインストールできます。

brew install bat

今までccatを使っていましたが、気に入ってしまったのでbatに乗り換えてしまいました。 万が一batでできないことがあれば、catを使えばいいですしね。

普段使いのMacでは、コードエディターとしては主にVSCodeを使っていますが、ソースの中身を表示するだけにVSCodeを起動するのは遅いので、そういうときにbatを使おうと思います。CLIで使えるツールの方が、CLIでAI Agentと対話するときに便利ですからね。

Linuxの場合は、自分が管理していてよくファイルのやり取りをするような環境にはbatをインストールしています。 最近のお気に入りです。