2022年に生産性が向上したと思うmacOS用ターミナル向けツールやコマンド10選

株式会社ゆめみ Advent Calendar 2022 23日目の記事です。

# はじめに

2022年も残りわずかとなりましたね。

今年一年を振り返ってみて、普段業務でよく使用しているmacOS用のターミナル向けのツールやコマンドを紹介したいと思います。

## 動作確認環境

```sh
$ sw_vers 
ProductName:            macOS
ProductVersion:         13.1
BuildVersion:           22C65
```

# 生産性が向上したと思うmacOS用ターミナル向けツールやコマンド

## 1. Fig.app

https://fig.io/

ターミナルでコマンドの自動補完を行うGUIアプリです。ディレクトリ名やファイル名を自動で補完してくれたり、gitの各種コマンドやブランチ名等も補完してくれます。一般的なコマンドは補完が効くので、かなり生産性向上に寄与してくれました。

見た目は以下のような感じになります。

![スクリーンショット 2022-12-23 21.10.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/5a8e613f-38d3-559b-af3e-109fb41727c8.png)

## 2. Starship

https://starship.rs/ja-jp/

BashやZsh、Fish等で使用できるカスタマイズ可能なシェル用プロンプトを提供するツールです。

細かく調整しなくても、いい感じのプロンプトにしてくれます。

現在選択しているgitブランチやAWSプロファイルのリージョンを表示したり、ランタイムのバージョンを表示してくれます。
また、それらの情報が不要なときは表示されないというのも嬉しいポイントです。

![スクリーンショット 2022-12-23 21.25.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/2bcdc842-d088-c336-92fe-85a2785dc0f2.png)

:::note warn
ちなみに、デフォルトのフォントだと各種アイコンが??になってしまうので、Nerdフォントを導入する必要があります。
https://github.com/ryanoasis/nerd-fonts
:::

StarshipのインストールはHomebrewでできます。

```sh
# starshipのインストール
brew install starship
```

Starshipのconfigは以下のように設定しています。

```toml:~/.config/starship.toml
# https://starship.rs/ja-jp/config/

# シェルプロンプトの間に空行を追加します
add_newline = true

# プロンプトの記号変更
[character]
success_symbol = "[\\(｀・ω・´\\) ❯](bold green)"
error_symbol = "[\\(´ ・ω・`\\) ❯](bold red)"

# バッテリー表示
[battery]
full_symbol = "🔋 "
charging_symbol = "⚡️ "
discharging_symbol = " "
disabled = false

[[battery.display]]
threshold = 20
style = "bold yellow"

[status]
style = "red"
symbol = "🔴"
format = '[\[$common_meaning$signal_name$maybe_int $status\]]($style) '
map_symbol = true
disabled = false

[directory]
truncation_length=4
truncate_to_repo=false
disabled = false
```

configの詳細は以下をご参照ください。

https://starship.rs/ja-jp/config/

## 3. lsd (LSDeluxe)

https://github.com/Peltoche/lsd

コマンド名はちょっとドキっとしますが、lsコマンドのデラックスバージョンです。

ディレクトリやファイル一覧をわかりやすく表示してくれます。

カラーリングはもちろんのこと、設定ファイルで表示項目を調整することもできます。

![スクリーンショット 2022-12-23 21.44.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/5c8e202b-c104-6441-e36d-96da9b795846.png)

```sh
# lsdのインストール
brew install lsd
```

通常のlsコマンドの代わりにlsdを使用するようにエイリアスを設定しておくと便利です。お好みでどうぞ。

```sh:~/.zshrc
alias ls='lsd'
alias l='lsd -l'
alias ll='lsd -l'
alias la='lsd -a'
alias lla='lsd -la'
alias lt='lsd --tree'
```

## 4. teee - `alias teee='tee >(pbcopy)'`

コマンドの結果を標準出力で画面に表示しつつ、クリップボードにもコピーしておく便利コマンド `teee` です。
（実際はコマンドと言うよりエイリアスですが）

macOSにはコマンドの結果をクリップボードにコピーする `pbcopy` および、クリップボードの内容を出力する `pbpaste` コマンドがあります。

通常、コマンドの結果をパイプでpbcopyに渡しますが、その際に標準出力がpbcopyにもっていかれてしまい、どんな内容がコピーされたのかがわかりにくさがありました。

その時に tee コマンドを使って画面に結果を出力しつつクリップボードにもコピーできないかなと思い、以下のエイリアスを作成しました。

```sh
# ~/.bashrc or ~/.zshrc
alias teee='tee >(pbcopy)'
```

エイリアスを設定したらターミナルを再起動するか、 `exec $SHELL` でシェルを読み込み直します。

teee コマンドの使い方のイメージ以下になります。

```sh
echo 'Hello, World!' | teee
#=> Hello, World!
```

```sh
pbpaste
#=> Hello, World!
```

クリップボードにコピーしつつ、別のコマンドにもパイプで渡すこともできます。

```sh
echo '{"message":"Hello!"}' | teee | jq -r .message
#=> Hello!
```

```sh
papaste
#=> {"message":"Hello!"}
```

## 5. hstr

https://github.com/dvorka/hstr

bash/zsh用のコマンド履歴インクリメンタル検索ツールです。

```sh
brew install hstr
```

でインストールして、

```sh
# bash
hstr --show-configuration >> ~/.bashrc

# zsh
hstr --show-configuration >> ~/.zshrc
```

で設定を追加すると使えるようになります。

基本的にはキーボードショートカット `Control + R` でhstrを呼び出すと、コマンド履歴をインクリメンタル検索できます。

過去に実行したコマンドを探す際のスピードが格段にアップするのでオススメです。

## 6. jq

https://stedolan.github.io/jq/

有名なツールですね。jqはコマンドラインでJSON形式の文字列を整形したり解析します。

JSONから特定の値を取り出したり、JSONの文法チェックにも使ったりしています。

何かと業務で利用する機会が多いツールです。

![スクリーンショット 2022-12-23 23.04.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/e3e13edf-e5f8-64c8-17f5-501eca6031f0.png)


## 7. Mo (Mustache Templates in Bash)

https://github.com/tests-always-included/mo

moはMustache記法 (`{{` と `}}`) で書かれたファイルや文字列を環境変数の値で置き換えてくれるツールです。

moはbashスクリプトになっているので、ダウンロードして実行権限を付与したらパスが通っている場所に配置するだけでインストール完了します。

```sh
# ダウンロード
curl -sSL https://git.io/get-mo -o mo

# 実行権限付与
chmod +x mo

# パスが通っている場所に移動させてインストール完了
sudo mv mo /usr/local/bin/
```

例は以下になります。

```sh
# 一度実行してみる
echo 'Hello, {{NAME}}!' | mo
#=> Hello, !

# 環境変数を定義
export NAME=Taro
```

moはCIやCDで環境毎に異なる設定ファイルを作成するのに使用しています。

## 8. zsh-completions

https://github.com/zsh-users/zsh-completions

zshの各種コマンドをTABキーで自動補完してくれるツールです。

1番で紹介したFig.appが使えない環境などで使用しています。

```sh
brew install zsh-completions
```

で導入できます。細かな設定方法は、

```sh
brew info zsh-completions
```

を参照してください。

## 9. neovim

https://neovim.io/

neovimはvimから派生したテキストエディターです。

たまにターミナルでファイル編集したいときにneovimだとデフォルトの状態でもいい感じにファイル編集ができるので重宝しています。

## 10. glow

https://github.com/charmbracelet/glow

glowはコマンドラインでMarkdownファイルを見やすくするマークダウンビューワーです。

```sh
brew install glow
```

でインストールできます。

使い方は以下の通り。

```sh
# ファイルを読み込む
glow README.md

# 標準出力からMarkdown文字列を受け取る
cat README.md | glow -
```

Markdownファイルの内容をパッと確認したいときに便利です。 

`-p` オプションを付けるとページャーが起動します。

オプションが覚えられないので、パイプ経由でプレビューしやすいように以下のエイリアスを設定しています。

```sh
# ~/.bashrc or ~/.zshrc
md='glow -p -'
```

mdエイリアスの使い方は次のようになります。

```sh
cat README.md | md
```

お試しあれ。

# おわりに

この記事では生産性向上につながりそうな普段よく使っているコマンドやツールを、パッと思い出せるモノを中心に10個紹介しました。

このようなツールやコマンドを活用して、業務効率化を図っていきたいですね。

最後までお読みいただきありがとうございました！