Oh My ZSH!便利ツールがあれば開発しやすい！

## Zshとは？

その数ある中でも最強のshellと言われているのがこのzshというshellみたいです。
sh、bash、csh、tcshの機能をほぼ網羅しているとの事。

## Oh My Zshとは？

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

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

```console:curl
$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```
```console:wget
$ sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
```

それでインストール終了です！これからは楽しみですね！コンソールを再起動したらデフォルトの表示が出ます！
![108254738-764b8700-716c-11eb-9a59-4deb8c8c6193.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/1cfe5c8a-227f-4d04-8af2-3837bc3a8ad1.jpeg)

見てる通り、デフォルトでGitは入ってます！Gitのプラグインはどのブランチにいるかをコンソール場で見えます！毎回`git branch`をしなくてもよい！色もはずっと真っ白のより目に優しい。

```console:色を説明
➜ フォルダー名 git:(ブランチ名）：
```

これがデフォルトの設定です、これから色々説明します。

## カスタマイズ

### テーマ

テーマはコンソール場の文字色、バックグラウンド色、表示仕方などを変更出来る物です。
テーマの設定は`~/.zshrc`ファイルにあります。
```bash:~/.zshrc
# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-zsh is loaded.
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="robbyrussell"
```
名前を変更して、ターミナルを再起動して、終わり！

全部を手動でテーマを作るは意外と大変です！デフォルトのテーマも悪くないけどもっとすごいになれる！ある特別の表示のテーマを紹介します。

- agnoster : 
![108254745-777cb400-716c-11eb-800a-a8cfa612253f.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/948a362b-962d-0652-6741-08b67d5705aa.jpeg)
もっと硬い表示。

- candy
![108254770-7ba8d180-716c-11eb-965f-63b9ce0efe15.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/07715c13-3cec-76ca-1547-f6e924f1d69e.jpeg)
時間を表示して、下の行で書く！

- eastwood
![108254800-81061c00-716c-11eb-858e-aa17d4c5e07e.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/a5bdb21c-4945-8854-f1d9-889d3a359f6c.jpeg)
rbenvの情報を出してくれてます！


- jonathan
![108254860-8c594780-716c-11eb-8f8b-be04d4943216.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/7d528912-e0b1-3a99-c985-8195cf824fa7.jpeg)
デザインがすごい独特。

- pygmalion
![108254921-98450980-716c-11eb-9d27-18562610887f.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/720c6cfc-f91f-7dd8-8d1a-e6775c85b971.jpeg)
シンプルで優しい色です！

- wedisagree
![108255779-bbbc8400-716d-11eb-98e9-3d0993efe2c3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/f12b9e92-af07-89e2-4830-5f4cbce6fe87.jpeg)
シンプル、情報が右にありますのでフォルダ名だけは左です。

テーマは本当に個人の意見なのでもっと見たいならこちらへ：https://github.com/ohmyzsh/ohmyzsh/wiki/Themes


## プラグイン

Oh My Zshには、利用できるプラグインがたくさん付属しています。 [プラグインディレクトリ](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins)や[wiki](https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins)を調べて、現在利用できるものを確認できます。
このリストはデフォルでインストールされてるプラグイン、設定すればそのままで使えます！設定の方はこちらで説明します。

### インストールと設定

もうインストールされてるプラグインなら設定ファイルを変更すればそのままで使えます！もちろん、変更するファイルは`~/.zshrc`です。

```bash:~/.zshrc
....

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
  git rails aws
)
....
```
* 注：zsh配列の要素は、空白（スペース、タブ、改行など）で区切られます。 カンマは使用しないでください。

インストールされてない場合は`.oh-my-zsh/custom/plugins`にコピーしなきゃ、基本はgitで管理されてますので一発でいけます：

```console:ターミナル
➜  ~ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-autosuggestions
```
フォルダを見ると
```console:ターミナル
~/.oh-my-zsh/custom/plugins
➜  plugins git:(master) ll
total 8.0K
drwxr-xr-x 2 oukaria oukaria 4.0K Jul 31  2018 example
drwxrwxr-x 7 oukaria oukaria 4.0K May 13 09:25 zsh-autosuggestions
```
インストール出来たら、さっきと一緒で設定ファイルを書くだけで終わります！
```bash:~/.zshrc
plugins=(
  git zsh-autosuggestions
)
```
　再起動すると：

![Screen Shot 2022-06-24 at 16.32.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878226/e04269cc-caea-98f3-f6a6-1c5da6d9d7cb.png)

今回インストールしたプラグインが自動完成してます！zshのコマンド履歴からオススメされてます、意外と便利ですし、オススメです！

## Functions

functionsはbashのコマンドです、Oh My Zshはデフォルトでいくつのフォンクションありますし、カスタムでも作れます！
### デフォルト

デフォルトでいくつのものが準備されてます、Gitで確認したら見えます：https://github.com/ohmyzsh/ohmyzsh/blob/master/lib/functions.zsh

例えばzsh_statsは打ったコマンドの率を出してます：

```console:ターミナル
➜  ~ zsh_stats
     1	1613  16.0354%     cd
     2	755   7.50572%     ll
     3	536   5.32856%     aws
     4	497   4.94085%     git
     5	402   3.99642%     RAILS_ENV=production
     6	325   3.23094%     ssh
     7	238   2.36604%     tailf
     8	235   2.33622%     rm
     9	232   2.30639%     ei
    10	219   2.17715%     vim
    11	184   1.82921%     sudo
    12	164   1.63038%     cat
    13	133   1.3222%      mkdir
    14	122   1.21284%     bundle
    15	102   1.01402%     rails
    16	79    0.785366%    echo
    17	76    0.755542%    mv
    18	69    0.685953%    ps
    19	65    0.646187%    for
    20	53    0.526891%    ls
```
### カスタム

カスタムを作るコマンドはわりと簡単です！`.zshrc`のファイルの中でfunctionを作成することです。例えばAWS S3のファイルがあるかどうかを確認したい！ですが毎回`aws s3 ls s3://my-bucket/file.txt`を打つがちょっと長いのでカスタムでやります。

```bash:~/.zshrcの下
function s3check(){
  letter=$1 | tr "." "\."
  aws s3 ls s3://my-bucket/ 2>/dev/null | grep -m1 "PRE $letter.*"
}
```
パラメータが`$1`から始まって（\\$2,\\$3など）、aws s3のlsがワイルドカード使えませんので`grep`で探して、一件見つかったらgrepの`-m1`パラメータのおかげでプロセスを切りますが、aws s3 lsがそれをエラーに出してますのでエラーも消してます。

それでターミナル場を見たら：

```bash:ターミナル
➜  ~ s3check file
     file.txt
```
もちろんこれは簡単のファンクションですが、わりと簡単です。