一度は触れてほしい、ターミナルが美しいと思えるツール5選+α

## はじめに
こんにちは！ITスクールRareTECHにてCS（Customer Support）を担当している池村です。今回の記事は、ターミナルで使える便利ツールのご紹介です。

サードパーティ製のツールの中でも、これは良い（というか美しい）と思ったツールを紹介していきます。完全に私の趣味の領域ですが、ある程度シェルを使い慣れてきた方はぜひ一読ください。

## `btop`
まずはPCのリソースをモニタリングできる`btop`コマンドの紹介です。
こちらはCPU・メモリ・ディスク・ネットワーク・プロセスの情報をリアルタイムで表示できるリソースモニタと呼ばれるものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/355e6f2c-baef-4d66-80d9-e72f336bef77.png)

https://github.com/aristocratos/btop?tab=readme-ov-file#with-cmake-community-maintained-3

Macユーザーであれば、以下のコマンドでインストール可能です。
```Bash:btopのインストール
brew install btop
```
Windowsの方は以下で使えると思われます。（Windowsユーザーではないので確かではありません）
```Bash:Windowsの場合
scoop install btop
```



`btop`の起動はそのまま`btop`で実行可能です。
`esc`キーをクリックすると、メニューが表示されるのでお試しください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/c91492d2-a94d-45f2-a4e7-6d270644102b.png)

OPTIONSでは様々な設定を変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/762f6f31-8395-4fc6-82f0-a7a828e50d90.png)

HELPでは、`btop`のキー設定が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/6129cda1-b5bb-4085-b472-bd38a051bd0b.png)

:::note info
`btop`の前は`htop`というコマンドがありましたが、最近はこっちの方を使っている方が多い印象です。軽さで言えば`htop`の方が軽量ですが。
:::

参考画像（`htop`）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/72d702b0-dc17-4b5d-a489-e184e10f337f.png)

:::note info
これはこれで、眺めているだけでご飯食べれるくらい綺麗ですけどね！
:::


## `ctop`
topシリーズ二つ目は`ctop`です。
こちらはc、つまりcontainerの略です。Dockerを使っているエンジニアの方は重宝するコマンドになります。

```Bash:インストール方法
# Mac
brew install ctop

# Windows
scoop install ctop

# Ubuntu
sudo apt install ctop
```

https://github.com/bcicen/ctop

使い方は`btop`同様、`ctop`と叩けば実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/9a02cd68-1936-4dcb-9a25-51ce7c061421.png)

:::note warn
何かしらのコンテナを立ち上げた状態でないと表示はされません。あと、そもそもDocker Engineが起動していないと動きません。ご注意ください。
:::

この`ctop`では、起動しているコンテナの詳細、再起動やコンテナの中に入ることなど、簡単に行えるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/e17d02ae-8452-4cd6-bde8-8e2e077505ad.png)

:::note warn
とても便利ですが、Dockerの基本コマンドを押さえてから使うようにしてください。
:::


## `oha`
次に紹介するのは`oha`コマンドです。
こちらは主にHTTPサーバーへの負荷テストなどで使われるコマンドですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/555f1805-2807-4ce2-9da8-d33954a8325a.png)

```Bash:インストール方法
# Mac
brew install oha

# Windows
winget install hatoo.oha

# Ubuntu
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ stable main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg
apt update
apt install oha
```

https://github.com/hatoo/oha

使い方はリクエストを送りたいURLに対して、`oha`を実行する形です。
```Bash:ohaの使い方
oha https://www.google.co.jp/
```

デフォルトですと、1秒間の間、HTTPリクエストを送り続けるようになっています。その後、リクエスト数・応答時間・スループットをサマリーとして表示してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/36da3a33-cfca-421d-bfbe-9e20ad1f89ab.png)


:::note info
負荷テストは、システムやWebサービスが高負荷の状態でも正常に動作するか？を確認するためのテストのことです。
:::

こちらもかなりのオプションがあるのですが、いくつか代表的なものを紹介します。

```Bash:リクエスト数を指定する
oha -n 1000 https://example.com
```

上記コマンドを叩くことで、合計1000リクエストを送ることができます。

```Bash:同時リクエストを送る
oha -c 50 https://example.com
```
上記の場合、『50人が同時にアクセスする』を再現することができます。

```Bash:認証付きのAPIテストの場合
oha -H "Authorization: Bearer token123" https://example.com
```

トークンをHTTPヘッダーに含めて、APIにアクセスする認証テストで重宝します。

```Bash:POSTリクエストでjson形式のデータを送る
oha -m POST -d '{"key":"value"}' -H "Content-Type: application/json" https://example.com/api
```

これもよくあるパターンかと思いますので、負荷テストに最適です。

![output5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/06c935ee-ed58-4f40-80bf-9315c364c250.gif)



## `lazygit`
こちらはGit関係のツールになります。
これもかなり使いやすく、Git コマンドを視覚的に操作できるのでおすすめです。

:::note warn
ある程度Gitのコマンドを扱えるようになってから利用することをおすすめしています。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/6cc92d48-8356-44e2-ba52-07d0522ac200.png)

インストール方法は以下になります。
```Bash:Macの場合
# 最新版を早めに使いたい場合
brew install jesseduffield/lazygit/lazygit

# 安定版を使いたい場合
brew install lazygit
```

```Bash:Windowsの場合
winget install -e --id=JesseDuffield.lazygit
```

```Bash:Ubuntuの場合
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | \grep -Po '"tag_name": *"v\K[^"]*')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit -D -t /usr/local/bin/
```

詳しくは以下のリンク先を参照してください。👇

https://github.com/jesseduffield/lazygit?tab=readme-ov-file#homebrew

使い方は簡単です。ですが。

:::note warn
注意点として、Git管理下ではないディレクトリで実行すると、新しくgit initを行う仕様になっています。もちろん確認画面は出ますが、ホームディレクトリなどでは実行しないことをおすすめします。
:::


```Bash:lazygitを起動
lazygit
```

`lazygit`を開くと、様々なウィンドウが見えると思います。
キーバインドは、`?`キーを叩くと表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/242f0e92-4341-4bf0-a711-4c4c3c0d353e.png)

様々なことがこちらのキーバインドでできるようになっています。

簡単に使い方を説明します。
まず、左側にあるウィンドウには番号が振られており、それぞれ1~5キーを押すことで移動が可能です。←,→キーでも移動は可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/9b364c9f-728d-4da4-8673-b099e0e23eb0.png)

#### [1] Statusウィンドウ
まず1のウィンドウには、リポジトリ名と、現在のブランチが表示されており、aキーを押すと右側のウィンドウに操作履歴やコミット履歴が表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/f394b797-588a-49c9-acb1-cccfc6705d87.png)

#### [2] ファイルウィンドウ
2のウィンドウには、変更されたファイルなどの差分が表示されます。
例として、test.txtを作成した状態の画像を残しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/3289f2a4-5605-4c5e-a26c-58539ed67069.png)

このtest.txtにカーソルが当たった状態で、spaceキーを押すとステージングされます。その後、cキーでコミットメッセージを作成するウィンドウが表示され、コミットが可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/88e54577-d54a-42fe-9525-44fda57388a4.png)

#### [3] ブランチウィンドウ
こちらはブランチ一覧が表示され、簡単に切り替え可能になっています。
ブランチにカーソルを合わせると、今までのログも確認することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/2d249d79-92d0-4cd8-90bf-d013f0360e38.png)

下部にキー操作の説明が書いてありますので、そちらの通りに操作も可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/abbda5db-0111-424f-95de-80842b7febf1.png)

#### [4] コミットウィンドウ
こちらはコミットの詳細や、操作の履歴を確認できます。`git show`や`git reflog`などを扱っているウィンドウですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/519538e7-ff4c-433e-9816-fb502160bd5c.png)

こちらも下部にあるキー操作の通りに操作が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/34b6e1b8-9bf7-412f-a9df-23b053aff77e.png)

#### [5] Stashウィンドウ
こちらはその名の通り、変更差分を一時的に退避したものを一覧表示するウィンドウです。

:::note info
Gitのコマンドに飽きてきたら、使ってみて欲しいツールです！
:::


## `yazi`
次に紹介するのは`yazi`です。こちらはRust製のファイルマネージャーです。
とても高速で、ファイル内のプレビューや、画像などもCUI上で見ることができるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/f94f8855-47b1-4b2b-8c45-01c02a6706dc.png)

https://github.com/sxyazi/yazi

ドキュメントはGitHubとは別になっているので、以下を参照してください。

https://yazi-rs.github.io/docs/installation

これを使うには追加で色々なものをインストールする必要があります。
```Bash:Macの場合
brew install yazi ffmpeg sevenzip jq poppler fd ripgrep fzf zoxide imagemagick font-symbols-only-nerd-font
```

```Bash:Windowsの場合
scoop install yazi
scoop install ffmpeg 7zip jq poppler fd ripgrep fzf zoxide imagemagick
```

```Bash:Ubuntuの場合
apt install ffmpeg 7zip jq poppler-utils fd-find ripgrep fzf zoxide imagemagick
```

使い方は特に難しくありません。

```Bash:yaziを起動
yazi
```

#### キーバインド一覧
| キーバインド | 代替キー | アクション |
|------------|---------|----------|
| `k` | `↑` | カーソルを上へ移動 |
| `j` | `↓` | カーソルを下へ移動 |
| `l` | `→` | 選択中のディレクトリに入る |
| `h` | `←` | 現在のディレクトリを抜けて親ディレクトリへ移動 |

| キーバインド | アクション |
|------------|-------------------------------|
| `K` | プレビュー内を 5 ユニット上にスクロール |
| `J` | プレビュー内を 5 ユニット下にスクロール |
| `g ⇒ g` | カーソルをリストの先頭へ移動 |
| `G` | カーソルをリストの末尾へ移動 |
| `z` | `zoxide` を使用してディレクトリへ移動 |
| `Z` | `fzf` を使用してディレクトリへ移動またはファイルを開く |

:::note info
残りはドキュメントを参考に色々いじってみてください🖐️
Vimを使っていると、少々使い所が減りますが、画像プレビューも含めて綺麗なツールです😄
:::

## ここからは無駄系コマンドをご紹介
### lolcat
まずは`lolcat`コマンドです。
これはターミナル画面上への出力結果を虹色にしてくれるものです。
特に意味のあるコマンドではありませんが、出力結果が綺麗なので気に入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/3e2d9083-7deb-4b42-819a-3861159d7a3a.png)

```Bash:インストール方法（Mac）
brew install lolcat
```

:::note warn
Windowsの方はWSLを入れていれば使えます。
:::

```Bash:使い方
ls | lolcat
cat ファイル名 | lolcat
```

:::note info
基本的に`|`(パイプ)で繋いで使う形になります。
:::


### cmatirix
cmatirixはターミナル画面上にマトリックスのような文字を降らせるコマンドです。
なんの意味もないコマンドですが、綺麗なので気に入っています。

![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/d22f7ad7-7950-4307-a6ab-d254f67cfc0a.gif)

```Bash:インストール方法（Mac）
brew install cmatrix
```

```Bash:使い方
# 基本的な使い方
cmatrix

# lolcatとの連携
cmatrix | lolcat
```
`lolcat`と連携すると、、👇こんなこともできます。
![output2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/7b96460b-215a-459e-8493-388e8511a74c.gif)

### `termdown`
次は`termdown`と呼ばれるコマンドです。
これはターミナル上でカウントダウンをしてくれるツールになっています。
これもlolcatと一緒に使うことが多いですね。

```Bash:インストール方法（Mac）
brew install termdown
```

```Bash:使い方
# 基本的な使い方（10mは10分間、1hで1時間なども可能）
termdown 10m

# lolcatとの連携
termdown 10m | lolcat
```

![output3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/353af2bc-f4ab-45c6-a9da-c23dca87a265.gif)

:::note info
オプションを使うことで、時間になったらボイスが流れるなども可能です。
`--help`オプションで色々使ってみてください。
:::

## `cowsay`
`cowsay`コマンドは、アスキーアートを表示することができるコマンドです。
特に意味はありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/dd0301cb-8914-43a7-9dd8-ef6126a0c2b8.png)

```Bash:インストール方法（Mac）
brew install cowsay
```

```Bash:使い方
# 基本的な使い方（デフォルトは牛）
cowsay "Hello World"

# ドラゴンのアスキーアート
cowsay -f dragon "Hello World" | lolcat
```

:::note info
私は仕事中に20~30分ほど仮眠を取ることがよくあり、その際にこのコマンドを使って『寝ています』を伝えている時があります！😴
下の画像を表示しておいて寝ています（笑）
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/7190eff1-df26-419d-83a4-fc84cdcd2d76.png)

### `gping`
最後は`gping`コマンドですね。
これも正直`ping`コマンドで十分なのですが、視覚的にわかりやすくなりますし、綺麗なので気に入っています。
そもそも`ping`コマンドはサーバーなどに通信が可能なのか疎通確認をするコマンドです。`ping`コマンドの実行結果は👇

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/9b60bba9-bda9-4d2d-a101-9e651905df76.png)

これをグラフィカルに表現したのが`gping`です。

![output4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/5fe29017-1451-4130-a7fb-8bfa0dc67840.gif)

```Bash:インストール方法（Mac）
brew install gping
```

```Bash:使い方
gping 任意のURL
```

## おわりに
サードパーティ製のものばかりなので、実際の業務の時に使って良いかは会社次第というところではありますが、便利なコマンド（無駄コマンドもあり）なので、ぜひ一度使ってみて欲しいです！シェルは美しいなあと日頃から感じており、仲間が増えると嬉しいなあ〜と思っています。

ぜひ美しいシェルライフをお送りください😃

![b2936eba-b4d8-4887-b0bd-678a9ce4ebf6_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/44fd64de-cb84-4ffc-aea2-bc0ba1de5c55.png)