iTerm2, `oh my zsh!`  `dotbot` でターミナルをカスタマイズしてみた

## Goal

`iTerm2`, `oh my zsh!` と　`dotbot`にてdotファイルの管理を導入してみます。
M1 Macを使用している方向けの記事となります。

iTerm2: https://iterm2.com/
Oh my zsh!: https://ohmyz.sh/
dotbot: https://github.com/anishathalye/dotbot

#### 前提
 `iTerm2` : Mac標準のターミナルの代わりとなるアプリケーション。
`oh my zsh!` : シェルの1つである `zsh` をカスタマイズするためのオープンソースソフトウェア。

### なぜやるのか

**ターミナルやシェルをカスタマイズする理由**

先日読んだ、達人プログラマーに以下のようなことが書かれていました。
達人プログラマーではシェルを、木工職人が使う作業台に例えていました。作業する上で最も基本的なツールであり、生涯使うツールです。

- ターミナル、シェルはエンジニアにとって、最も基本的なツールの1つです。ファイル操作やプログラム実行など様々な作業を実行するベースとなるツールです。
- 最も基本的なツールをカスタマイズすることにより視認性を高めたり、カスタマイズコマンドを追加して効率をあげたり、結果的に愛着が湧いたりと作業環境を自分のスタイルに合わせ、効率的な作業を行うのに欠かせないものとなります。
- また上記のカスタマイズがPCの変更や、PC間での設定共有を楽にするために、バージョン管理も必要となります。

これまでデフォルトのターミナルと `zsh` を使用していましたが、自分もそろそろ自分の作業台が欲しいなと思い、試してみることにしました。

### 事前準備

- `oh my zsh!` をインストールすると、 `.zshrc` が上書きされてしまうため、バックアップをとっておきます。

```zsh
cp ~/.zshrc ~/.zshrc_cp
```

 

### インストール

```zsh
# Intall iTerm2
brew install iTerm2

# Install "oh my zsh!"
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```

### カスタマイズ

- `iTerm2` や `oh my zsh!` の設定方法は探せば色々と出てくるため、今回は割愛します。
- 色はできるだけシンプルなものが良かったため、`iTerm2` の色は `japanesque` を使用し、 `oh my zsh!` は `simple` をテーマとして使用することにしました。
- `oh my zsh!` では pluginとして一旦以下を追加しています。`web-search`はシェルから google 検索をすぐにできるのが便利そうだったため、デフォルトのプラグインから追加しています。
- aliasでカスタムコマンドを追加してみます。一旦、 gitコマンドで試してみることにしました。

```.zshrc
plugins=(
    git
    zsh-autosuggestions
    zsh-syntax-highlighting
    web-search
    )
```

```.zshrc
alias g='git'
alias gs='git status'
alias gl='git log'
alias ga='git add'
alias gc='git commit -m'
alias gagc='git add . && git commit -m'
alias gp='git push'
alias gch='git checkout'
alias gcb='git checkout -b'
```

`iTerm2` を開いて、カスタマイズが反映されていることやカスタム aliasが動くことを確認できたら成功です。はじめにコピーした `zshrc` ファイルの内容も追加することを忘れないようにしましょう。

### dotbotによるバージョン管理

`iTerm2` と `oh my zsh!` がうまく設定できたら、最後は `dotbot`を追加してバージョン管理を行います。

まず 今後、ドットファイルを管理するためのディレクトリを作成します。

```zsh
mkdir .dotfiles
```

今後、自分がバージョン管理したいドットファイル (`.zshrc` など) はこのディレクトリにて管理します。しかし、本来 `.zshrc` はホームディレクトリに置いておく必要があり、移動させると設定が読み込まれなくなります。

その場合、シンボリックリンクを作成することで、対応することができます。

```zsh
# 移動
mv ~/.zshrc ~/.dotfiles/zshrc

# 移動させても読み込みされるようにシンボリックリンクを作成
# dotbotを使用すると不要
ln -sv ~/.dotfiles/zshrc ~/
```

これを、数多くのドットファイル全てで行うと、管理が面倒のため、 `dotbot` を導入します。 
GitHubのREADMEに従って `dotbot` を導入します。
今回は既存のドットファイルを使用するため、以下手順となります。

```zsh
cd ~/.dotfiles # replace with the path to your dotfiles
git init # initialize repository if needed
git submodule add https://github.com/anishathalye/dotbot
git config -f .gitmodules submodule.dotbot.ignore dirty # ignore dirty commits in the submodule
cp dotbot/tools/git-submodule/install .
touch install.conf.yaml
```

そして、 `install.conf.yaml` に設定を記載します。

今回は、 `.zshrc` と `.gitconfig` を管理するために .dotfilesに移動させたため、2つのリンクを設定しています。  

```install.conf.yaml
- clean: ["~"]

# require 4 spaces
# https://github.com/anishathalye/dotbot/issues/8
- link:
    ~/.zshrc: zshrc
    ~/.gitconfig: gitconfig
```

最後に、以下コマンドを実行し成功すれば完了です。

```zsh
~/.dotfiles ./install
```

実際に設定した内容が反映されていることを確認して終わりとなります。(今回は git コマンドが反映されていることを確認）

![スクリーンショット 2024-08-25 17.28.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386347/2137f2c2-391e-ff5f-afef-f802bf42cc6a.png)

新しく作成したファイルは GitHubなどで管理します。 :)

#### 最後に
* 実際に自分でカスタマイズしてみると、愛着が湧いてくるので、今後はよりシェルの使用頻度を増やしていこうと思います。
* 今後、Vimの設定ファイルも追加して、Vimももっと使えるようになっていければと思います。
* せっかくなので、今後ぜひ周りの皆さんにもおすすめ設定を教えてもらいたいと思います。もし良かったらコメントいただけると嬉しいです。
*