最短最速でターミナルカスタマイズをする。

## はじめに

初めまして！DMM WEBCAMPでメンターをしている@yuni0928です。

この記事では、日々プログラムを書いていく中で頻繁に使うターミナルを使いやすく、カッコよくしていく方法を紹介していく記事です。

ターミナルといえば、黒い背景に白い文字。実行された結果も全部白文字。

**正直、ダサくないですか？**
**もっとかっこいいターミナル、欲しくない？**
> https://qiita.com/kinchiki/items/57e9391128d07819c321

この質問に**YES!**と思った人は、ぜひぜひターミナルを自分の思いのままにカスタマイズしていきましょう！

この記事に書かれていること：
・ **Macのターミナルに使えるカスタマイズ知識**
・ **カスタマイズ未経験者向けの簡単な解説**
・ **最低限のカスタマイズの例**
・ **さらに進んだカスタマイズをする場合に便利な記事一覧**

この記事に書かれていないこと：
・windowsのコマンドプロンプトやPowerShellのカスタマイズ
・シェルについての詳しい解説
・zshプラグインなど、外部ツールやインストールが必要なツールを用いたカスタマイズについて



## 1. iTerm2を導入しよう



iTerm2とは、ターミナルと同じコマンドラインツールです。
この記事では、ターミナルのカスタマイズよりもiTerm2を導入し、カスタマイズすることをオススメしています。
###[iTerm2](https://iterm2.com/)
<img width="1440" alt="スクリーンショット 2019-12-19 2.55.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/125d3391-4605-d9a6-3a3a-2931dd286443.png">

iTermは

**ターミナルを素早く&カッコよく開く設定をつけることができる！**
![画面収録 2019-12-18 1.32.16.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/6301d4c1-01e3-8bfa-8b1c-53a3968b8595.gif)

私は、`control`を2回連続で入力するとしたから**ニュッ！**とiTerm2のコマンドラインが表示されるように設定しています。設定を変更すれば上部、右側、左側から**ニュッ！**と表示できるように設定することもできます。

**ね？かっこいいでしょ？**
かっこいい以外にも、ブラウザでサイトをみながらちょっとしたコマンドを実行したい時にも便利に使えます。

また、iTerm2は設定できる項目が多く、ユーザーの好みに合わせてより細かなカスタマイズができます。


iTerm2のインストールに特別な設定は必要ありませんので、外部アプリをダウンロードする手順を素直にこなしていけば問題なくダウンロードできます。サイトのDownloadをクリックし、アプリを起動してみましょう。

もし、細かい手順を知りたい方はこちらの記事を参考にすると良いかもしれません。
>[初心者向け iTerm2のインストール方法 - Qiita](https://qiita.com/iwaseasahi/items/301e1f3b18aa49990763)

####ニュッ! と飛び出るターミナルの設定方法

##### 1. iTerm2 > preferences...をクリックして設定を開きます
<img width="681" alt="スクリーンショット 2019-12-19 3.14.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/5ee184e4-5503-186d-9f12-299818b44052.png">

##### 2. ホットキー用の設定を作ります
メニューからProfileを選び、`+`をクリックして新しいプロファイルを作成。Name:をわかりやすいように`Hotkey window`を作ります。
こうすることで、`window`と`Hotkey window`の二つを同時に使うことができます。
<img width="916" alt="スクリーンショット 2019-12-19 3.17.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/370ed195-a270-a4f1-0c50-15ab76b04dd9.png">

##### 3. keyメニューを開きます
keyメニューに移り、`A hotkey opens a dedicated window with this profile`の項目にチェックを入れ、`configure Hotkey Window`をクリックしてHotkeyの設定画面を開きます。
<img width="1010" alt="スクリーンショット 2019-12-19 3.23.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/41f5cc83-41e3-eb47-4f76-f3a59efba4bd.png">

##### 4. ホットキーを開くためのアクションを自由に設定します。
個人的にオススメは、`^Control`キーのダブルタップで**ニュッ！**と開く設定です。もし同じ設定にするならば、`Double-tap key`の項目にチェックを入れ、`^Control`を選択すると良いでしょう。
<img width="1014" alt="スクリーンショット 2019-12-19 3.28.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/b11ed65e-3f65-9fed-d4aa-5f7c3e2186fb.png">

##### 5. どの場所から開くかを設定します。
メニューから`window`を選択し、`Settings for New Windows`の項目を編集します。
<img width="929" alt="スクリーンショット 2019-12-19 13.46.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/a4dc7a3f-3d36-0cc7-a063-a8f5da6113fd.png">

下から**ニュッ！**と出す設定にしたければ、`Style`の項目の中から`Full-Width Bottom of Screen`を選択します。その他にも、フルスクリーンで開く設定や、ニュッ！と出てくる場所を下部以外に設定する項目がありますので色々と試してみると良いでしょう。
<img width="931" alt="スクリーンショット 2019-12-19 13.46.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/89b021a7-687e-e359-7a92-d6ceae524123.png">


これで、カッコよくターミナルを開く設定は完成です。
もし細かくカスタマイズをしたい場合は設定項目を調べてみると良いかもしれません。
iTermの設定に関しては、Qiitaやその他のサイトで設定例を公開している方がたくさんいらっしゃいますので、そうした記事を参考にしてみるのも良いかもしれません。

記事によってはバージョンが古く、レイアウトが変わっているため設定を読み解く若干の英語力が必要になってきます。まぁ、エラー文を読む労力とそこまで変わらないと思いますのでぜひぜひチャレンジしてみてください。

>これまで私がカスタマイズしていく中で参考にした先駆者様の記事一覧
>[僕がiTerm2を使ってる理由 - Qiita](https://qiita.com/togana/items/2c7b4d8d3e5f5f9bd440)
>[iTerm2のHotkeyを使わないなんてもったいない！！ - Qiita](https://qiita.com/okamu_/items/a5086d2d5ba405f35acb)


---
## 2. .zshrcを見つけよう

では、シェルの設定をしましょう。

設定を始める前に、現在使っているシェルを確認しましょう。

```
hogehoge[~] % echo $0
-zsh

hogehoge[~] %
```

シェルという言葉に聞き馴染みがなかったら、”ターミナルの中で動いているプログラム、パソコンを動かす時に使うプログラムなんだなー”ぐらいのイメージでOKです。

>**(ちょっと知っている人向けの蛇足)**
ここで、少しシェルを齧ったことがある方であれば、なんでbashじゃなくてzshなの？と疑問に思うかもしれません。zshのカスタマイズ方法を書いている理由としては、macOS 10.15 Catalinaからデフォルトシェルがbashからzshに変更されたからです。
おそらく、macを最近買った方や、Catalinaにアプデートしている方のターミナルはzshが動いているハズなので、zshの設定ファイルをカスタマイズすれば問題ないと思います・・・！

>自分は、Catalinaになる前からzshを使っていたため、アップデート後自動的にbashからzshに変わるかどうか定かではありません。もし「`echo $0`って入力したら`-Bash`って表示されたよー！」とか、「`echo $SHELL`と入力したら`/bin/bash`と表示されたよー！」などの現象がありましたら、コメント蘭でMacのバージョンを添えてお知らせいただけると幸いです。


まず、設定ファイルがある場所を確認します。
`cd ~`
でrootディレクトリ へ移動してください。

`ls -a`
で、カレントディレクトリ内にある隠しファイルを探しましょう。
.zshrcというファイルがあれば、それがシェルの設定ファイルです。
もしも.zshrcファイルが存在しなければ、

```
touch .zshrc
```

で.zshrcファイルを作りましょう。

```
hogehoge[~] % ls -a
~(その他いろいろなファイルやディレクトリ)~
.zprofile
.zsh_history
.zshenv
.zshrc

hogehoge[~] %
```

rootディレクトリに.zshrcがあることが確認できましたら、いよいよ.zshrcの編集に移ります。

## 3.  vimの基本的な使い方

設定ファイルの編集にはVimを使うと良いでしょう。.(ピリオド)から始まる設定ファイルは、Sublime TextやVisual Studio Codeのようなスクリプトエディタを使って編集することができないファイルです。
(カスタマイズ次第でできると思いますが、vimと触れ合う良い機会ですのでvimを使ってみましょう。)

Vimを使って設定ファイルを開いてみましょう。

```
hogehoge[~] % vi .zshrc
```
(もしファイルが見つからなければ、cd ~ でディレクトリを変えてから実行してみましょう。もしそれでもファイルが見つからなければ、`touch .zshrc`のコマンドを入力してください。)

すると、Vimのエディタが起動し.zshrcファイルの中身を見る事ができます。

Vimではコマンドを実行して保存などをします。

|コマンド|実行結果|
|:--|:--|
|esc|ノーマルモードにする。(コマンドを入力できる状態にする)  |
|i| 入力モードにする。|
|: w|ファイルの変更を保存する。|
|:wq| 変更点を保存してvimを終了する。|
|:q!| 変更点を保存せずにvimを終了する。|

vimの操作についてさらに詳しく知りたければこちらのサイト( [知識0から始めるVim講座 - Qiita](https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d) )や、vim 入門などのキーワードで調べてみてください。
また、ターミナル上で`vimtutor`のコマンドを実行すると、vimの日本語チュートリアルを見ることができます。

##  4.  簡単におしゃれにしたい人向け(コピー&ペーストでOK!)

##### 1. Simple is the best

```
PROMPT='%*
%F{green}[%~]%f %# '
```
<img width="130" alt="スクリーンショット 2019-12-18 1.50.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/e2aa2fab-0b9d-fa31-7e80-5eec7703ca0f.png">
現在の時刻と、カレントディレクトリを表示するプロンプトです。
作業時間を意識するため、常にプロンプトの脇に時間が表示されるようにしています。
(私はこのスタイルにしています。)


###### さらに改行を入れるとこんな感じ

```
PROMPT='
%*
%F{green}[%~]%f
%# '
```
<img width="129" alt="スクリーンショット 2019-12-19 20.16.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/286a1e04-05db-bf73-02fc-54af2dde8427.png">
カレントディレクトリとコマンドラインを表示する行を分けると、ディレクトリが深くなっても良い感じにみやすく表示してくれます！

##### 2. 見慣れたデフォルトプロンプトをカラフルに！

```
PROMPT='%F{magenta}%B%n%b%f@%F{blue}%U%m%u%f %F{green}[%~]%f %# '
```
<img width="350" alt="スクリーンショット 2019-12-18 2.17.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/9ad8a78d-cdee-2b8e-27a1-57c3b74b84ac.png">

ユーザー名と現在利用しているPCの名前、カレントディレクトリを表示するプロンプトです。

```
User_name@UsernoMacBook-Pro ~ %
```
Zshプロンプトのデフォルトデザインがこんな感じなので、デフォルトデザインに慣れている人にとっては見やすいプロンプトかもしれません。


##### 3. 左右を広く使ったプロンプト

```
PROMPT='%F{green}[%~]%f %# '
RPROMPT='%*'
```
<img width="277" alt="スクリーンショット 2019-12-18 2.27.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/4f8177e8-19c7-4940-c413-0a81b45cd588.png">

```
PROMPT='%F{magenta}%B%n%b%f@%F{blue}%U%m%u%f %# '
RPROMPT='%F{green}[%~]%f'
```

<img width="346" alt="スクリーンショット 2019-12-19 16.47.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/82c4f98c-b6cf-d3a8-c5c1-709ca6c254a2.png">


RPROMPTで右側にもプロンプト の設定をすることができます。

##### 4.コマンド実行結果ごとに、改行を入れたい！

```
PROMPT='
%*
%F{green}[%~]%f %# '
```
<img width="166" alt="スクリーンショット 2019-12-18 2.39.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/553f780c-9cd8-7a08-fc4e-b3af2f738003.png">


プロンプト の頭に改行を入れるとこのようになります。
隙間が空いている方が見やすい！という方は、改行をしてみましょう。


**ここまでカスタマイズができれば、だいぶ使いやすいターミナルになってきたと思います！**

### ! 設定を変更したら実行してください

変更した設定を読み込み、画面に反映させるために

```
hogehoge[~] % source .zshrc
```
を実行してください。
そうすると、プロンプトが設定したデザインに変わります！


## 5. さらに自由なカスタマイズがしたい！(オススメ参考資料)

ここからは、ここまでのカスタマイズでも満足できない！もっとカスタマイズしたい！向けです。

紹介したカスタマイズの例で使用しているコードの意味をまとめていきます。

##### プロンプトの設定
```
PROMPT=''
RPROMPT=''
```
zshのプロンプトは、`PROMPT=`以降に書かれた内容は、コマンドラインの左端に表示。
`RPROMPT=`以降に記述した内容は、コマンドラインの右端に表示されます。

##### 文字に色をつける
```
%F{color}お好きなコマンド%f
```
`%F{color}`と`%f`で挟まれた場所は、`color`で定義した色に文字色を変えます。
ここで使っているコマンド以外にも背景色を設定するやり方もあったりします。
詳しくは、こちらのQiitaを参考にすると良いです。
>[zshでプロンプトをカラー表示する - Qiita](https://qiita.com/mollifier/items/40d57e1da1b325903659)

##### その他のコード



|コード|出力|
|:--|:--|
|%#|プロンプト右端の`%`|
|%~|カレントディレクトリ|
|%n|ユーザー名|
|%m|ホスト名|
|%Bお好きなコード%b|太文字|
|%Uお好きなコード%u|アンダーバー|

その他にも出力できる項目はまだまだありますので、調べてみると面白いかもしれません！
>[zshプロンプトのカスタマイズ - Qiita](https://qiita.com/yamagen0915/items/77fb78d9c73369c784da)
>[zsh 設定 - プロンプト -](http://tegetegekibaru.blogspot.com/2012/08/zsh_2.html)

## 沼に挑戦したい方
**fishシェルを導入してみよう！**
何も、シェルはbashとzshしかないわけではありません。
世の中にはfishシェルというシェルも存在します。
もし、自分が今使っている環境以外のシェルにも興味が湧いたら、導入してみると楽しいですよ・・・！

>[fish shellが結構良かった話 - Qiita](https://qiita.com/hennin/items/33758226a0de8c963ddf)
[シェルにあんまりこだわりのなかった僕がfishを使ってかんじたこと - SlideShare](https://www.slideshare.net/TakuyaTokuyama/ss-48876269?next_slideshow=1)

**shellスクリプトを勉強してみよう！**

こんなサイトがあります。一通り中身に目を通せば、シェルスクリプトの意味がだいたい理解できるようになるかも・・・？
>[UNIX & Linux コマンド・シェルスクリプト リファレンス](https://shellscript.sunone.me/)

もうここからは趣味の領域になってきます。興味がある人はググってみてください！

## [補足]bashをカスタマイズする場合

周りの人に話を聞いてみたところ、「そもそもCatalinaにしてねーよ！」とお声をいただきましたので、bashでのカスタマイズ方法とカスタマイズ例を紹介していこうと思います。

今のターミナルでbashが動いているかを確認したい場合は、先ほどと同じようにターミナルでコマンドを入力すればわかります。

```
hogehoge[~] $ echo $0
-bash
hogehoge[~] $
```

ちなみにですが、

```
hogehoge[~] % ←　プロンプトが`%`表示ならzsh
hogehoge[~] $ ←　プロンプトが`$`表示ならbash
```
とざっくり目星をつけることもできます。(カスタマイズで変更できる部分なので、あてにはできません。)

では、

```
hogehoge[~] $ cd ~
```
でrootディレクトリへ移動しましょう。
移動したら、bashの設定ファイルを探します。

```
hogehoge[~] $ ls -a
~(その他いろいろなファイルやディレクトリ)~
.bashrc
.bash_profile
```
bashの場合は、`.bashrc`と`.bash_profile`が設定ファイルです。
プロンプトカスタマイズするだけなら、`.bashrc`を設定すれば問題ないです！

```
hogehoge[~] $ vi .bashrc
```
でbashの設定ファイルを開きましょう。

### プロンプトの設定例(コピペでOK!)

##### 1. Simple is the best

```
export PS1='\n\t\n\[\e[1;32m[\w]\[\e[0m\] \n$ '
```
<img width="179" alt="スクリーンショット 2019-12-19 16.33.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/2566dced-dc19-a657-a3b1-f0d7774e7304.png">

##### 2. 見慣れたデザインをカラフルに

```
export PS1='\[\e[35m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[0m\] \[\e[32m\][\w]\[\e[0m\] \$ '
```

<img width="278" alt="スクリーンショット 2019-12-19 19.49.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429496/8ce8342b-2ef2-7b67-88ca-9fc2e9b90c60.png">

**編集が終わりましたら、zshと同様に設定を適応する必要があります。**

```
hogehoge[~] $ source .bashrc
```
これで設定したレイアウトが反映されました！

>参考サイト
[【Bash】ターミナルのプロンプトのカスタマイズ方法まとめ - Qiita](https://qiita.com/hmmrjn/items/60d2a64c9e5bf7c0fe60)

## 終わりに

ターミナルのカスタマイズは、ハマると結構楽しいです！oh-my-zshを導入してみたり、zshの補完機能を強化したり、gitのbranch名やcommit状況を表示するなどなど、できることは無限大と言って良いでしょう。
本当にハマってしまうと一日中ターミナルのカスタマイズを永遠とカスタマイズしてしまう・・・なんて状況も発生してしまうかもしれません。

もちろんハマってみるとかなりプログラミングの勉強になります。私も、bashやzshのカスタマイズを通じて、隠しファイルの存在やプログラムファイルの保存場所、ディレクトリの概念や"PATHを通す"という概念に触れることができました。

ポートフォリオ作りに疲れた時、休みの日にターミナル環境弄りに挑戦したいなと感じた時、時間に余裕があって心に余裕がある時。そんなタイミングがありましたら、ぜひターミナル環境弄りにハマってみてください！