Windows出身者がMacでパスを通してみた【zsh】

# 背景
Qiita初投稿です。よろしくお願いします。

学生時代と社会人を通し、ずっとWindowsを使ってきた私が個人開発のためMacを使うことになり、Windowsだと慣れていた「パスを通す」という作業で苦労したためやり方をここに残しておきます。

Macでパスを通す記事は検索したらたくさん出てきますが、Macの知識がバックグラウンドにあることを前提に書かれているように見受けられるものが多く、「初心者向け」と書かれていてもWindows出身の私にはわかりづらく感じるものが多かったです。

そのあたりも踏まえ、WindowsからMacに移行した人にもわかりやすい記事を書こうと思いました。

# シェルを理解する
Macでパスの通し方を調べてみると、「シェル」という言葉が出てきます。Windowsを使っていて私は今までシェルを意識しないといけない状況に遭遇したことがなく（意識する必要がある場面もあるとは思うのですが、私がその経験がないだけです）、そもそも「シェル」が何なのかわかりませんでした。

シェルに関する説明は[こちらの記事](https://recruit.cct-inc.co.jp/tecblog/os/shell/)がわかりやすいと思います。シェルは人間の命令をOSに伝えるために必要なものであり、どの種類のシェルを使用するかでターミナルに入力する内容が微妙に変わってきます。Macの場合コマンドベースでパスを通していくため、ご自身がどの種類のシェルを使用しているのか、認識しておかなければなりません。

# デフォルトシェルの確認
まずはデフォルトシェルを確認しましょう。ターミナルを起動すると、上部にシェルの種類が書かれています。![4_ターミナルスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1643541/e851fbbb-f7cb-0e4e-ab41-ff440e33be4b.png)

もし書かれていない場合は、下記コマンドで確認してみましょう。ちなみに<font color="red">本記事のコマンドはすべてホームディレクトリにて実行しています。</font>

```
% echo $SHELL                                    #コマンド
/bin/zsh　　　　　　　　　　　　　　                #出力結果
```

私はmacOS Montereyなので、上記のようにシェルがzshであることが確認できました。macOS Catalina以降だとデフォルトがzshになっており、それ以前だとbashがメジャーなのではないかと思います。

# 既存のパスを見てみる
本題のパスを通す前に、既存のパスがどうなっているかを事前に見てみることにします。

```
% echo $PATH                                    #コマンド
/usr/local/bin:/usr/bin:/bin:/usr/sbin　　　　　 #出力結果
```
Windowsではパスをセミコロン（`;`）で区切りますが、Macではコロン（`:`）で区切ります。したがって上記の例では、

- `/usr/local/bin`
- `/usr/bin`
- `/bin`
- `/usr/sbin`

という4つのパスが、すでに通っていることが確認できました。

# パスを通す
さて、本題のパスを通す作業です。WindowsではGUIで環境変数を設定するのが一般的（コマンドベースでの設定も可能）だと思いますが、Macの場合はコマンド（CUI）で設定します。今回は一例として、Javaの環境構築で使用するOpenJDKのパスを通すこととします。適宜、ご自身の通したいパスに読み替えていただければと思います。

`export`コマンドを用いて、追加で通したいパス　（今回は　`Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home`）を設定します。

```
% export PATH=$PATH:Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
```

`$PATH`というのは、既存のパス（今回の例では前述した4つのパスのこと）を表す記述です。したがって既存のパスの後に、コロン（`:`）に続けて追加で通したいパスを記述したものを、環境変数`PATH`に代入することを示しています。

ここで改めてパスを確認してみます。

```
% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
```

下記のパスが追加されていることが確認できました。

- `Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home`

ここまではMacにデフォルトで存在しているの環境変数`PATH`に対して、追加でパスを通すという作業でしたが、新規で環境変数を定義する場合も同じ要領で、

`export [環境変数名]=[通したいパス]`

の形式で記述します。同じくJavaの環境構築で必要な`JAVA_HOME`という環境変数を新規で設定してみます。

```
% export JAVA_HOME="Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home"
```

はい。簡単ですね。

これにて設定完了！と思いきや、残念ながらまだ終わりません。ターミナルを一度閉じてしまうと、追加したはずのパスが保存されないのです。実際ターミナルを閉じて再度開き直し、改めてパスを出力してみると、先ほど追加したはずのパスが表示されなくなってしまいます。Windowsの場合GUI上で環境変数を設定すると値が保存されるため、ここは大きな文化の差を感じるところです。

# 追加したパスを保存する
ということで、最後に追加で通したパスの保存をしていきましょう。zshの場合は`.zshrc`（bashの場合は`.bash_profile`）というファイルにパスの値を書き込む必要があります。こうすることで、ターミナルを起動する毎に書き込んだ内容がコンピュータに読み込まれ、パスが通るようになります。

その`.zshrc`ファイルというものの中身が気になるので開いてみましょう。

```
% open .zshrc                                    #コマンド
The file .zshrc does not exist.                  #出力結果
```

おっと。そもそもファイルが存在しないようです（過去に`.zshrc`ファイルを作成済みであれば、このコマンドを実行した時点でファイルが開かれます）。実はMacの初期状態ではこのファイルは存在せず、自分で作る必要があります。`touch`コマンドで作成しましょう。

```
% touch .zshrc
```

（bashの場合は`touch .bash_profile`）

さて再度`open .zshrc`を実行すると、作成した`.zshrc`ファイルを開くことができますが、初めてこのファイルを作成した場合は中身が空になっています。このファイルの中にパスを追加する命令を書き込みましょう。

`export [環境変数名]=[通したいパス]`

の形式でファイルに直接書き込む（テキストエディタで編集）か、

`echo "export [環境変数名]=[通したいパス]" >> .zshrc`

の形式でターミナルからコマンドを使って書き込みましょう。

```
% echo "export PATH=$PATH:Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home" >> .zshrc
% echo "export JAVA_HOME="Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home"" >> .zshrc
```

最後に次のコマンドで、書き込んだパスの設定を有効化します。

```
% source ~/.zshrc
```

（bashの場合は`source ~/.bash_profile`）

以上で作業完了です。ターミナルを閉じて再度開き直し、通したパスが出力されることを`echo [環境変数名]`で確認しておきましょう。お疲れ様でした。

# 最後に
私がMacでパスを通す際に、詰まった部分を順を追って説明しました。コマンドベースでパスを追加するという点はもちろん、シェルという概念や、設定したパスを保存・有効化するという考え方が、WindowsのGUIでパスを通していると馴染みが薄いところだと思います。WindowsからMacへ移行し、環境構築する際の参考になれば幸いです。

## 参考
[Mac環境でのJava開発！環境変数・PATHの通し方を学ぼう！](https://style.potepan.com/articles/18810.html)
[読めばわかるMACでのPATH設定を完全理解](https://reffect.co.jp/windows/full_understanding_mac)
[zshのmacでPATHを通す方法（設定ファイルに環境変数を加える）](https://amateur-engineer.com/mac-path-zsh/)
[MacOSでSpringの開発環境(STS)を構築した手順](https://temlog.net/spring-dev/)