はじめに
ターミナルでの作業は、黒い画面に白い文字という無機質なものになりがち。
ログを見続ける作業などは、時として苦痛を伴うこともある。
lolcatは、そんなターミナルの出力を虹色(レインボー)に彩るツールである。
実用性について問われると返答に困るが、殺風景なコンソール画面を華やかにし、気分転換やデモ映えには効果的かもしれない。
環境
Ubuntu 24.04 LTS
lolcat 100.0.1lolcatの特徴
機能
- 標準入力やファイルの内容を虹色のグラデーションで出力
- 虹色が流れるアニメーション機能
- パイプライン処理に対応
実装
- オリジナルはRuby製
- Python版やGo版などの派生実装も多数存在する
インストール
Ruby製のツールであるため gem コマンドでインストールできるほか、主要なLinuxディストリビューションではパッケージマネージャからもインストール可能となっている。
# gemを使用する場合
gem install lolcat
# Ubuntu/Debian (apt)
sudo apt install lolcat
# Snap
sudo snap install lolcat
# macOS (Homebrew)
brew install lolcatログ
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
crack-common gyp libcares2 libgl1-amber-dri libglapi-mesa libjs-async libjs-events libjs-inherits
libjs-is-typedarray libjs-prettify libjs-regenerate libjs-source-map libjs-sprintf-js
libjs-typedarray-to-buffer libllvm17t64 liblttng-ust-common1t64 liblttng-ust-ctl5t64 liblttng-ust1t64
libnotify-bin libqt5x11extras5 libre2-10 libssl-dev libuv1-dev libxcb-damage0 mesa-utils-bin node-abbrev
node-ampproject-remapping node-ansi-regex node-ansi-styles node-aproba node-are-we-there-yet node-arrify
node-async node-async-each node-auto-bind node-babel-plugin-add-module-exports node-babel7-runtime
node-balanced-match node-base64-js node-binary-extensions node-brace-expansion node-busboy
node-camelcase node-caniuse-lite node-chownr node-chrome-trace-event node-ci-info node-cjs-module-lexer
node-cli-boxes node-cli-cursor node-clone node-collection-visit node-color-convert node-color-name
node-colors node-commander node-commondir node-concat-stream node-console-control-strings
node-convert-source-map node-core-js node-core-js-pure node-core-util-is node-data-uri-to-buffer
node-decompress-response node-deep-is node-defaults node-define-property node-delegates node-depd
node-diff node-electron-to-chromium node-encoding node-end-of-stream node-err-code node-error-ex
node-es-module-lexer node-escape-string-regexp node-eslint-utils node-eslint-visitor-keys node-esquery
node-estraverse node-esutils node-events node-fancy-log node-fast-deep-equal node-fast-levenshtein
node-fetch node-find-up node-flatted node-foreground-child node-fs-readdir-recursive
node-fs-write-stream-atomic node-fs.realpath node-function-bind node-get-caller-file node-get-stream
node-get-value node-glob node-globals node-got node-graceful-fs node-growl node-has-flag
node-has-unicode node-has-value node-has-values node-hosted-git-info node-iconv-lite node-ieee754
node-iferr node-imurmurhash node-indent-string node-inflight node-inherits node-ini node-interpret
node-ip node-ip-regex node-is-arrayish node-is-binary-path node-is-buffer node-is-descriptor
node-is-extglob node-is-path-cwd node-is-plain-obj node-is-plain-object node-is-stream
node-is-typedarray node-is-windows node-isarray node-isexe node-isobject node-js-tokens node-json-buffer
node-json-parse-better-errors node-json-schema node-json-schema-traverse node-json-stable-stringify
node-jsonify node-jsonparse node-kind-of node-levn node-loader-runner node-locate-path
node-lodash-packages node-lowercase-keys node-lru-cache node-map-visit node-memfs node-merge-stream
node-mimic-response node-minimatch node-minimist node-minipass node-mute-stream node-n3 node-negotiator
node-npm-run-path node-object-inspect node-object-visit node-once node-optimist node-optionator
node-osenv node-p-cancelable node-p-limit node-p-locate node-p-map node-pascalcase node-path-dirname
node-path-exists node-path-is-absolute node-path-is-inside node-path-type node-pify node-pkg-dir
node-postcss-value-parser node-prelude-ls node-process-nextick-args node-promise-inflight
node-promise-retry node-promzard node-prr node-pump node-punycode node-quick-lru node-randombytes
node-read node-readable-stream node-rechoir node-regenerator-runtime node-regenerator-transform
node-regexpp node-regjsgen node-repeat-string node-require-directory node-require-from-string
node-resolve node-resolve-cwd node-resolve-from node-restore-cursor node-resumer node-retry
node-run-queue node-safe-buffer node-serialize-javascript node-set-blocking node-set-immediate-shim
node-shebang-command node-shebang-regex node-shell-quote node-signal-exit node-slash node-slice-ansi
node-source-list-map node-source-map node-spdx-correct node-spdx-exceptions node-spdx-expression-parse
node-spdx-license-ids node-sprintf-js node-ssri node-stack-utils node-string-decoder node-strip-bom
node-supports-color node-tapable node-terser node-text-table node-through node-time-stamp
node-to-fast-properties node-tslib node-type-check node-typedarray node-typedarray-to-buffer node-undici
node-unicode-canonical-property-names-ecmascript node-unicode-match-property-value-ecmascript
node-unicode-property-aliases-ecmascript node-unset-value node-uri-js node-util-deprecate node-uuid
node-v8flags node-validate-npm-package-license node-wcwidth.js node-webpack-sources node-wordwrap
node-wrappy node-write-file-atomic node-xtend node-y18n node-yallist node-yaml nodejs-doc xbitmaps
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
ruby-optimist ruby-paint
The following NEW packages will be installed:
lolcat ruby-optimist ruby-paint
0 upgraded, 3 newly installed, 0 to remove and 59 not upgraded.
Need to get 38.0 kB of archives.
After this operation, 145 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 ruby-optimist all 3.0.0-2 [13.6 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble/universe amd64 ruby-paint all 2.2.0-1 [16.3 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble/universe amd64 lolcat all 100.0.1-3 [7992 B]
Fetched 38.0 kB in 1s (40.7 kB/s)
Selecting previously unselected package ruby-optimist.
(Reading database ... 118484 files and directories currently installed.)
Preparing to unpack .../ruby-optimist_3.0.0-2_all.deb ...
Unpacking ruby-optimist (3.0.0-2) ...
Selecting previously unselected package ruby-paint.
Preparing to unpack .../ruby-paint_2.2.0-1_all.deb ...
Unpacking ruby-paint (2.2.0-1) ...
Selecting previously unselected package lolcat.
Preparing to unpack .../lolcat_100.0.1-3_all.deb ...
Unpacking lolcat (100.0.1-3) ...
Setting up ruby-paint (2.2.0-1) ...
Setting up ruby-optimist (3.0.0-2) ...
Setting up lolcat (100.0.1-3) ...
Processing triggers for man-db (2.12.0-4build2) ...使ってみる
コマンドライン実行
基本的には他のコマンドの出力をパイプ | で lolcat に渡して使用する。
ls -l | lolcat実行すると、ファイル一覧が鮮やかなグラデーションで表示される。

lolcatのオプション
lolcat [オプション] [ファイル...]主なオプションは以下の通り。
| オプション | 説明 |
|---|---|
-a, --animate | アニメーション効果を有効にする |
-d, --duration | アニメーションの期間 |
-s, --speed | アニメーションの速度 |
-i, --invert | 背景色と文字色を反転させる |
-t, --truecolor | 24-bit TrueColorモードを有効にする |
-f, --force | 出力先がTTYでなくても強制的に色をつける |
-v, --version | バージョンを表示 |
-h, --help | ヘルプを表示 |
サンプル例
1. テキストファイルの表示
cat コマンドの代わりに使うことで、ソースコードや設定ファイルを虹色で読むことができる。
lolcat README.md2. アニメーション
-a または --animate オプションをつけると、色がサイケデリックに変化するアニメーション効果が付与される。
-d (duration) や -s (speed) でアニメーションの挙動を調整可能だ。
# 虹色に輝きながら文字が流れる
echo "Rainbows and unicorns" | lolcat -a -d 5003. 定番の組み合わせ
アスキーアートを表示する cowsay や figlet と組み合わせるのが、この界隈の定番である。
# 虹色の牛が喋る
cowsay "Hello, World" | lolcat
# 虹色の巨大文字
figlet "LOLCAT" | lolcat活用できるかも…?
ログインメッセージの装飾
.bashrc や .zshrc の末尾に以下のようなコマンドを追加しておくと、ターミナル起動時に少しだけテンションが上がるかもしれない。
date | cowsay -f dragon | lolcat長いログの視認性(?)
単色のログよりも、色が変化している方が行の区切りが直感的に分かりやすい……という説もあるが、目がチカチカするので長時間の閲覧には向かない…よね…。
参考
- busyloop/lolcat - GitHub
https://github.com/busyloop/lolcat
おわりに
lolcatは単に出力を虹色にするだけのジョークツールだが、それだけでターミナル作業が少し楽しいものになる。
エラーログが真っ赤に出力されると心臓に悪いが、虹色であれば「まあ、なんとかなるか」という大らかな気持ちになれるかもしれない(本当か?)
sl コマンドなどと同様に、開発環境に忍ばせておくとふとした瞬間に癒やしを与えてくれることでしょう。