パス周りにおけるターミナルの扱い方

ターミナルを操作してツールを入れるといった環境構築をしている時に、特にパス周りの理解が覚束なかったので色々調べました。後、ターミナルに入力するコマンドとは何かについても一部理解が浅かったので書いています。
使用PCはMacです。 

# 目次
[zshやbashとはなんぞや](#zshやbashとはなんぞや)
[zshの設定ファイルからパスを確認する](#zshの設定ファイルからパスを確認する)
[パスの通し方](#パスの通し方)
[実行したいコマンドのパスを確認する](#実行したいコマンドのパスを確認する)

# zshやbashとはなんぞや

ターミナルに命令を与える為の言語をシェルと呼ぶ。zshやbashなど様々な種類があり、MacOS X Catalina以降でのデフォルトはzsh。

なお、以下のコマンドで自分が使っているシェルの種類を確認することが可能。

```zsh
echo $SHELL
```

ここでは触れないがコマンドを叩くことにより変更も可能。

bashが最も歴史あるシェルで(調べているとよく使っている人を見かける)、zshが万能タイプのシェルらしい。

私が試した限りではbashでコードを叩いてもzshでは動いてくれなかった。ということでコマンド操作について調べる際には、自分の使っているシェルの確認が必要。

この記事ではzshについて述べる。

# zshの設定ファイルからパスを確認する

環境構築をする時にパス(ファイルなどの場所を示したもの)を指定することはよくある。
その設定の仕方については後述することにして、先に確認方法について述べる。

zshにおいて、パスなどの設定をするのに使うのが.zshrcという設定ファイルである(bashだと.bashrcというファイルが該当する)。このファイルはシェル起動時に読み込まれるらしい。

パスの情報を見るだけであれば、以下のコマンドで可能。

```zsh
echo $PATH
```

もしくは以下。こっちの方が少し情報量が多いが、初心者だと使わないような情報が増えているだけに感じたので、それについては割愛。

```zsh
env | grep PATH
```

以下のコマンドでviエディタを起動することにより、他のさまざまな設定も一緒に確認できる(viエディタについては後述)。

```zsh
vi ~/.zshrc
```

viエディタを起動した場合、中身の確認を終了するときは以下のコマンド(他のコマンドについては後述)を入力する。
```zsh
:q!
```

なお.zshrcは不可視ファイルであり、普通にFinderをクリックするのでは確認ができない(設定を変更すれば表示できる)。従って上記のようにターミナルを叩いて確認する必要がある。

## 設定ファイルに書かれた環境変数(特にパス)の見方

この項では.zshrcファイルの中でも特にパス周りの見方について取り上げる。

viエディタを開き.zshrcファイルの中身を除くと以下のような文字列が表示される。
`` echo $PATH ``だと `` = `` よりも右だけが表示される。
`` env | grep PATH `` だと `` PATH `` 以降が表示される。

```zsh
export PATH=/hoge/hogehoge/:/hoogehooge/hgehge
```

- `` export `` は「環境変数を定義しているぞ」と示しているコマンド
- `` PATH `` はPATHという環境変数であることを示している
- `` : `` により複数のパスを区切っている

コマンドを実行する際には、`` : `` で区切られているパスのうち左にあるものが優先される。

以上、この記事では環境変数の中でもパスについて取り上げたが、viエディタを使えば他にも文字コードを指定するといったことができるらしい。

# パスの通し方

## パスを通す意義

パスを通すことにより、簡単なコマンドを叩くだけでその中身が実行できるようになる。逆に通さないと、長ったらしいフルパスをいちいち指定する必要が出てくる。

## ①ターミナルを使ってパスを通す

.zshecファイルにパスの情報が入っているわけだが、実際にパスを通す際にはviエディタを開かずコマンドを叩くのが一般的(viエディタを編集するやり方は後述)。

以下のようなコマンドでpathを通すことが可能。

### a. 既存のパスを上書きしてしまう

``` zsh
export PATH=/hoge/hogehoge
```

### b. 既存のパスに追加する(追加パスの優先度は最も低い)

```zsh
export PATH=$PATH:/hoge/hogehoge
```

`` $PATH `` は既に設定されているパスを示している。

### c. 既存のパスに追加する(追加パスの優先度は最も高い)

```zsh
export PATH=/hoge/hogehoge:$PATH
```

### 通したパスの反映

```zsh
source ~/.zshrc
```
このコマンドの代わりに、ターミナルを再起動しても良いらしい。

## ②viエディタを直接編集してパスを通す

viエディタを使うことにより、ターミナルからプログラムの設定ファイルを開くことができる。

```zsh
vi ファイル名
```

今回の例だと以下のようなコマンドを入力すれば良い。

```zsh
vi ~/.zshrc
```

このままの状態だと編集することはできないが、`i`を押すと(入力モードになる)現在のカーソル位置に文字を挿入することができるようになる。
編集を終える場合には `esc` キーを押せば良い。

入力モードでなくても以下のような操作が可能。

- `x`: 1文字削除
- `yy`: 1行コピー
- `dd`: 1行切り取り、切り取ったものはクリップボードに格納される
- `p`: カーソルの下の行に貼り付け
- `:q!`: viを閉じる、変更は破棄
- `:w`: 保存
- `:wq`: 保存しviを終了

これらを用いパスを追記すれば良い。
viエディタを編集後、それを反映させるには以下のコマンドを実行する。

```zsh
source ~/.zshrc
```
このコマンドの代わりに、ターミナルを再起動しても良い。

# 実行したいコマンドのパスを確認する

`` ls `` というコマンドのパスを確認する場合なら以下。

```zsh
which ls
```

# 参考文献

"bashとzshの違い。bashからの乗り換えで気をつけるべき16の事柄". https://kanasys.com/tech/803 , (2022/11/23).

Shomiyu. "シェルってなに？bashとzsh、自分のMacはどっちを使ってるの？". 2021/11/05. https://mykii.blog/what-is-shell-bash-and-zsh/, (2022/11/23).

"ターミナルのシェル（zsh・bash）を切り替える方法と、シェルの設定ファイルについて". BLOG AND DESTROY. 2021/11/14. https://blog-and-destroy.com/34392, (2022/11/23).

Takuma. ".zshenvと.zshrcの場所・違い・設定方法を解説します！". Suwaru blog. 2020/07/27. https://suwaru.tokyo/zshenv/, (2022/11/23).

Zuishin. "そもそも環境変数って何？pathを通すとは？". teratail. 2020/05/02. https://teratail.com/questions/258252, (2020/11/23).

ユウキ. "【保存版】zshrcって何だろう？中身を見てみましょう。". note. 2021/06/04. https://note.com/standenglish/n/ne9825624fe93, (2022/11/23).

"Mac - Finderで隠しファイル・フォルダを表示する方法". PC設定のカルマ. https://pc-karuma.net/mac-finder-show-all-files/, (2022/11/23).

Terry"Macでpathを通す方法をまとめる". TerryBlog. 2020/01/20. https://terrblog.com/2019-08-08-113422/, (2022/11/23).

Masato Zembutsu."パス(PATH)の確認と設定方法は？". http://pocketstudio.jp/linux/?%A5%D1%A5%B9%28PATH%29%A4%CE%B3%CE%C7%A7%A4%C8%C0%DF%C4%EA%CA%FD%CB%A1%A4%CF%A1%A9, (2022/12/08).

佐々木真. "manpath【コマンド】". 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典. 2022/05/06. https://wa3.i-3-i.info/word13845.html, (2022/12/08).

株式会社インセプト. "InfoPath". IT用語辞典 e-Words. 2019/01/07. https://e-words.jp/w/InfoPath.html, (2022/12/08).

@soarflat. "PATHを通すとは？ (Mac OS X)". Qiita. 2022/11/01. https://qiita.com/soarflat/items/09be6ab9cd91d366bf71, (2022/12/08).

@soarflat. "PATHを通すために環境変数の設定を理解する (Mac OS X)". Qiita. 2022/11/01. https://qiita.com/soarflat/items/d5015bec37f8a8254380, (2022/12/08).

リカレントテクノロジー. "viコマンドについて詳しくまとめました 【Linuxコマンド集】". エンジニアの入り口. 2021/03/01. https://eng-entrance.com/linux-command-vi#wqvi, (2022/11/23).