Powerlevel10kとエイリアスでターミナルをちょっといい感じにする

## はじめに
新しいMacbookを手に入れると、毎回絶望するのがターミナルの初期状態の地味さ。

![スクリーンショット 2024-09-16 18.05.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853295/e2051dc9-38a6-62c2-7ae9-300abc1269aa.png)

作業環境の気持ち良さは仕事の効率に直結しているので、できるだけ自分好みのデザインと使いやすさにしたいところです。
今回は自分用の備忘も兼ねて、ターミナルをちょっといい感じにするカスタマイズを紹介します。

最終的なデザインはこんな感じ。
![スクリーンショット 2024-10-07 22.31.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853295/330165ec-272b-f38f-202f-47e5822d7531.png)

内容としては、以下になります。
・`Powerlevel10k` を使用してプロンプトを少しリッチな見た目に変更する
・エイリアスを設定して作業効率をアップする
・ヒストリの設定を使いやすいように変更する【おまけ】

:::note warn
Powerlevel10kはzshシェル用のテーマです
:::

## 1. フォントを変更する
`Powerlevel10`は、`Meslo Nerd Font`を使用することを推奨しています。
そのため、[こちら](https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#fonts)から、`Meslo Nerd Font`を自動インストールまたは手動インストールし、ターミナル > 設定 > プロファイル からフォントを変更します。

## 2. Oh My Zshをインストールする
[Oh My Zshのページ](https://ohmyz.sh/#install)からコマンドをコピーし、インストールします。
```zsh
# curlを使ったインストール
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# wgetを使ったインストール
sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
```

以下のような表示がされればインストール完了です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853295/6be0b322-8286-6087-8916-b4d941179166.png" width=80%>


## 3. Powerlevel10kをインストールする
`Powerlevel10`のリポジトリをcloneし、`~/.zshrc`内のテーマ設定を書き換えます。
```zsh
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
```

```diff_vim_l:~/.zshrc
- ZSH_THEME="robbyrussel"
+ ZSH_THEME="powerlevel10k/powerlevel10k"
```

## 4. Powerlevel10kをカスタマイズする
zshを再起動すると以下のような設定ウィザードが開き、質問に順に答えていくと、ベースとなるデザインのプロンプトを自動でカスタマイズしてくれます。
![スクリーンショット 2024-10-07 19.31.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853295/42eee159-01e7-eb87-c393-59598cff5754.png)

カスタマイズの内容を変更したい際は、以下のコマンドをたたくと再度ウィザードを開いて設定し直すことができます。
```zsh
p10k configure
```

細かいカスタマイズをしたい場合は、`~/.p10k.zsh`という設定ファイルの内容を書き換えることで実現可能です。

以下の項目あたりを変えることで、基本的な色の変更ができます。
```zsh:~/.p10k.zsh
# OSの表示色に関する設定
typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=
typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=

# ディレクトリの表示色に関する設定
typeset -g POWERLEVEL9K_DIR_BACKGROUND=
typeset -g POWERLEVEL9K_DIR_FOREGROUND=
typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=

# Gitの表示色に関する設定
typeset -g POWERLEVEL9K_VCS_BACKGROUND=
```

設定できる色の一覧は、以下で確認できます。
```zsh
for i in $(seq 0 255); do
  printf "\e[48;5;${i}m%03d\e[0m " $i
  if (( (i+1) % 16 == 0 )); then
    echo
  fi
done
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853295/d85c95e1-2f49-1828-0571-457ca307bb81.png" width=80%>

その他にも変更可能な設定がたくさんあるため、より自分好みにしたい人は色々いじってみると面白いと思います。（カスタマイズの種類や方法については、[Powerlevel10のREAD.me](https://github.com/romkatv/powerlevel10k?tab=readme-ov-file) に詳しく記載されています。）

## 5. エイリアスを設定する
**エイリアスとは**：よく使うコマンドに短い名前を付けて入力を簡素化できる、ショートカットのような機能

**使用例**：`alias gs='git status'`と設定すると、ターミナル上で`gs`とだけ叩けばGitの作業状態が確認できる

```vim
# 構文
alias エイリアス名='コマンド'

# 確認コマンド
alias

# 削除コマンド
unalias エイリアス名
```

`~/.zshrc`に設定したいエイリアスを追加し、`source ~/.zshrc`で反映します。

## 6. ヒストリの表示・設定を変更する
**ヒストリとは**：過去に入力したコマンドの履歴で、`history`というコマンドで履歴を表示できる。

```zsh:⇩通常のhistoryコマンドの結果
$ history
1  echo $SHELL
2  vi ~/.zshrc
3  source ~/.zshrc
:（最新の1,000件の履歴を表示）
```

`~/.zshrc`に設定を追加し、`source ~/.zshrc`で反映します。
```vim:~/.zshrc
# ヒストリの設定
HISTSIZE=10000
SAVEHIST=10000

# エイリアスで表記等を設定
setopt extended_history
alias hi='history -t "%F %T" -50'
alias hig='history -1000|grep'

# 履歴保持の設定変更
setopt hist_ignore_all_dups
setopt hist_save_no_dups
setopt hist_reduce_blanks
```
- `HISTSIZE`：シェルがメモリ内で保持するコマンド履歴の最大数（zshではデフォルト1000）
- `SAVEHIST`：ヒストリファイルに保存するコマンド履歴の最大数（zshではデフォルト0または1000）
- `setopt extended_history`：コマンド履歴の保存形式を変更するためのオプション

```zsh:⇩設定変更後のhistoryコマンドの結果
$ hi
1  2024-10-07 18:35:00  echo $SHELL
2  2024-10-07 18:36:30  vi ~/.zshrc
3  2024-10-07 18:37:15  source ~/.zshrc
:（最新の50件の履歴を表示）
```

*****
以上で、ターミナルで作業をする上での最低限の環境は整ったかな、という感じです。
初期状態よりはちょっといい感じになったかと思います。