ぼくがかんがえたサイキョーの Zsh 環境 [基本ツール編]

# はじめに
この記事は自分が毎日触っている zsh について、どんなプラグインと、開発環境を持っているか紹介する記事になります。

:::note warn
この記事は定期的にメンテナンスするつもりなので、
いきなり内容が変わる場合があります。
その際は、編集履歴から確認してください。
:::

# 基本ツールのインストール
まず、プラグインやパッケージを管理するための基本的な管理ツールをインストールしていきます。

## Homebrew 

全てはここからはじまる。

ということで、Homebrew を入れていきます。

https://brew.sh/ja/

Homebrew は実行ファイルや設定ファイル、ライブラリなどを 1 つのファイルとしてまとめている**パッケージ**と呼ばれるものを一元管理するツールです。

## iTerm2

https://iterm2.com


ここで、Mac 標準搭載のターミナルとはおさらばするために、iTerm2 を入れていきます。
ターミナル App でも良いのですが、こちらの方が拡張や使い勝手が良いので、完璧に好みの問題です。
インストール方法は、ダウンロードでできますが、以下のコマンドで入れていきます。

```zsh
brew install --cask iterm2
```

このコマンドは変更される場合があるので、[homebrew のドキュメント](https://formulae.brew.sh/cask/iterm2
)で確認しましょう。

## git :octocat: 

https://formulae.brew.sh/formula/git#default


git は、Mac では標準で搭載されています。しかし、バージョンを簡単に変更できないなどのデメリットがあるため、Homebrew を使って Install していきます。

```zsh
brew install git
```


## Mint🌱

https://github.com/yonaskolb/Mint

Swift製コマンドラインツールのインストールと実行を管理するツールです。
正直、私はあまり使っていないのですが、今後使っていきたいと思い、インストールします。

使い方に関しては、[Uhooi さんの Qiita 記事](https://qiita.com/uhooi/items/6a41a623b13f6ef4ddf0#操作方法)が詳しいので、そちらか公式 リポのREADME を参照してください。

## node と npm のインストール
node.js はホームページからダウンロードすることもできます。

しかし、バージョン管理をしたいので、nodebrew を入れていきます。

### nodebrew のインストール

https://github.com/hokaccha/nodebrew

```zsh
brew install nodebrew
nodebrew setup
```
nodebrew のPathを反映させます。
```zsh
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
```

### Node のインストール
以下のコマンドで、インストールしたい Node のバージョンをインストールします。
```zsh
% nodebrew install v8.9.4

# or
% nodebrew install latest # latest version
% nodebrew install stable # stable version
% nodebrew install v8.9   # v8.9 latest
% nodebrew install 8.9.4  # without `v`
```

インストールされたバージョンは、以下のコマンドで確認することができます。
```zsh
nodebrew ls
```

node のバージョンを選択する場合は、以下のコマンドを入力します
```zsh
nodebrew use [使いたいnodeのバージョン]
```

### npm のインストール
以下のコマンドを入力して、npm をインストールします。

```zsh
npm install -g npm
```


## Oh my zsh

https://ohmyz.sh/#install

Oh My Zshは、Zsh構成を管理するためのオープンソースのコミュニティ主導のフレームワークです。 何千もの便利な機能、ヘルパー、プラグイン、テーマなどがバンドルされています。

Oh My Zsh は、ターミナルで次のコマンドのいずれかを実行することでインストールされます。 これは、curl または wget のいずれかを使用してコマンドラインからインストールできます。なんとなくですが、私は curl でインストールしてます。


# Powerlevel10k

https://github.com/romkatv/powerlevel10k

Powerlevel10k は、Zsh のテーマを柔軟に設定できるツールです。このツールを使うと、以下のように zsh の見た目を変更でき、わかりやすくできます。

## クローン

先ほど、Oh my zsh をインストールしたので、 oh my zsh 経由でインストールします。
コマンドは、README を参照ください。

https://github.com/romkatv/powerlevel10k#oh-my-zsh

## Config の編集

Powelevel10k を Zsh で使うために、`.zshrc` を編集します。

```zsh
vim ~/.zshrc
```
以下のように編集します。
```diff_shell:~/.zshrc
- ZSH_THEME="robbyrussell"
+ ZSH_THEME="powerlevel10k/powerlevel10k"
```
次コマンドで、`~/.zshrc` を実行し、シェルに反映させます。
```zsh
source ~/.zshrc
```

## configuration wizard

ここから、zsh の見た目を変更していきます。
ここからは好みなので、色々試してみてください。

### Powerlevel10k configuration wizard

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/d78e8cd2-5be8-394a-6031-ea3dce54527c.png" width=80%>


ターミナルのフォント、「Meslo Nerd Font」を導入するか聞いてきます。

私はここで、Yes を選択します。

ダウンロードすると、再起動するよう指示が出るので、`⌘+Q` で再起動します。

### prompt settings
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/a39f5c1f-7ba3-63dd-2756-1a153dd36617.png" width=80%>


これは単純。プロンプトを設定するために、菱形がちゃんと表示されているか確認します。
画像の通り、表示されているので、Yes を選択します。

これ以降、２つほど同様の質問がされます。表示されれば Yes を選択してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/580863a6-94e9-9c6f-1222-63b8e840bf95.png" width=80%>



<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/1b9b4d2c-3572-ebbf-2686-c0815c45addc.png" width=80%>


### Prompt Style
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/d55e30aa-9b35-b9f5-a45f-d1f8d2d90552.png" width=80%>


ターミナルに表示されるプロンプトを選択します。これは好みの問題なので、好きなものを選んでください。
私は、(3)Rainbow が好きなので、３を選びます。

### Character Set
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/6454629a-f7d3-9d5e-eabe-58face7cf30b.png" width=80%>


文字コードを選びます。
私は (1)Unicode を選択します。

### Show current time?
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/873ad243-df3f-15ba-eadf-cf04b91a1847.png" width=80%>


直前に入力したコマンドが何時か表示・非表示できます。
表示する場合は、12時間表記か、24時間表記か選ぶことができます。

私は、24時間表記を選択します。

#### Prompt Separators
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/d2db6b6c-9df7-dd84-47d1-a4032645c5d3.png" width=80%>


`~/src` と `master` の境界線をどうするか選べます。

私は、Angled を選択します。

#### Prompt Head
![スクリーンショット 2023-12-29 1.06.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/fde6c4cd-3726-584f-a94f-484d2db35b32.png)
同じように、先頭の形を選択することができます。
統一感を持たせたいので、Sharp を選択します。

#### Prompt Tails
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/7ba9156e-7ff3-09e2-bd38-6f5fad59c676.png" width=80%>

今度は、尻尾の箇所を選択します。
私は、Flatを選択します。

#### Prompt Height
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/6573c71e-3ffe-2382-7048-723b15656915.png" width=80%>

プロンプトの表示を1行にするか、2行にするか選択します。
私は、2行を選択します。

#### Prompt Connection
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/3cff9767-4c6d-dfe4-2dd6-12b7f4e7b107.png" width=80%>

`master` と `5s` の間を空白にするか、点線にするか、実線で結ぶか選択できます。
私は、Solid を選択します。

#### Prompt Frame
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/d2f9e3a8-01fa-d593-8966-b1594fc9c574.png" width=80%>

Prompt のフレームを選択します。
私は、Full を選択します。

#### Connection & Frame Color
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/7091aeb4-a592-dfc2-52fb-86c71e495735.png" width=80%>

先ほど Prompt Connection 等で選択した実線について、濃さを選択できます。
私は、Lightest を選択します。

#### Prompt Spacing
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/d1dff882-5635-cecf-c33f-2f49d21e9beb.png" width=80%>

プロンプトの幅を選択できます。
私は Sparse を選択します。

#### Icons
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/d2d5ef26-e409-6f3c-3e5f-62186e90bf3c.png" width=80%>

アイコンを表示するかどうかを選択できます。
私は、Many icons を選択します。

#### Prompt Flow
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/a71aad4e-6d71-c8d1-358d-202532b79c4a.png" width=80%>

Flow を選択できます。
私は　Concise を選択します。

### Enable Transient Prompt
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/6e16ba81-522d-959b-cd5b-01dfb804ec37.png" width=80%>

入力のみ `master` などを表示するか選択できます。入力のみにすると履歴がスッキリします。
しかし、私は No. を選択します。

#### Instant Prompt Mode
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/1c67a3e0-2348-dc05-7ea9-c1ebeb62cb56.png" width=80%>

様々なプラグイン等を入れている場合、ターミナル起動に時間がかかるようになります。
そこで、起動ラグを取り除くか選択することができます。
私は、色々入れてしまうので、とりま 1 を選択します。

#### Apply changes to `~/.zshrc`?
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/9a091104-dbb5-6373-f2fa-efec040d9af4.png" width=80%>

~/.zshrc`に変更を適用するか選択できます。
私は一旦、Yes にします。

#### GOAL 
これで、以下の画像のようなターミナルになりました。
おめでとうございます 🥳🎉
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/e192615a-b73e-54fa-0502-4970f2406fd8.png" width=80%>



# プラグインのインストール

## zsh-autosuggestions

https://github.com/zsh-users/zsh-autosuggestions/blob/master

これはターミナルのコマンド履歴に基づいてコマンド候補を表示、入力補完をしてくれるプラグインになっています。
Install 方法は、リポジトリにある `INSTALL.md` を参考にします。
私は `oh-my-zsh` 経由で Install しています。
他にも、Antigen、Homebrew などの方法でインストールできます。


## zsh-syntax-highlighting

https://github.com/zsh-users/zsh-syntax-highlighting

これは、zsh の構文を強調表示してくれるプラグインです。
`cd` や、`ls` などのコマンドを強調し、構文エラーをキャッチするのに役立ちます。

| before | after |
-----|-----
| ![スクリーンショット 2023-12-29 1.39.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/ea2276f3-b2a8-2e3d-640a-03da1682c046.png)| ![スクリーンショット 2023-12-29 1.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/dd729099-5b31-e720-0ca0-8d853470e32c.png) |

## web-search Plugin


[web-search plugin - GitHub README](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/web-search/README.md)



このプラグインは、Google、Wiki、YouTube、GitHub、などの人気サービスをターミナル上で検索することができます。

これは、Oh-my-zsh に元から入っているプラグインなので、
`~/.zshrc` ファイルで、`web-search` を追加するだけです。

## 参考文献
https://youtu.be/CF1tMjvHDRA?si=011mCfxzhIoO354u

https://qiita.com/Oukaria/items/6cd0706beece722cd3db

https://zenn.dev/luvmini511/articles/8d427e1faa089f

https://namileriblog.com/terminal/terminal_setting_powerlevel10k/#i-8