シェルを使いこなして Techpit 教材での環境構築をマスターしよう!
本記事では、シェルの基礎から解説し bash と zsh の違いを理解してもらいます。
※)本記事はMacユーザー向けの解説記事となります。
01. シェルとは
ユーザーからの命令をコンピューターに伝えるプログラムのことです。アプリ開発で使用される macOS のターミナル(通称 黒い画面)がその役割を果たします。
ターミナルは、ユーザーが入れた命令コマンドをシェルを通して macOS(カーネル) に伝えます。そして、macOS が操作した結果をシェルを通してユーザーに表示します。
ターミナルを起動して確認してみよう
ターミナルとは、ユーザーが命令コマンドを入力して macOS に指示を出すソフトウェアの事でしたね。
ターミナルの立ち上げ方は以下になります。
command キー + space バー を押下すると Spotlight 検索が表示されます。その後、虫眼鏡マーク横に「ターミナル」と入力すると、ターミナルが表示されるので、そちらをダブルクリックするとターミナルを起動できます。
ターミナルの初期画面
ー bashの場合
① 上部にあるメニューバーに「ホームディレクトリ 起動中のプロセス 画面サイズ」が表示されます。
② 画面上には、以下のような文字が表示されます。
コンピュータ名:~(カレントディレクトリ) ユーザー名 $
これらをプロンプトと言います。
※ 設定によって表示される内容が変わります。
$ があり、その文字の後にユーザーは、命令コマンドを入力します。それでは、実際に以下の命令コマンドを入力してみましょう。
① $の後にpwdと入力してください。
$ pwd
② 入力後、enter キー をクリックします。
③ すると、/Users/ホームディレクトリ がターミナル上に表示されると思います。
解説
pwd コマンド は、現在のディレクトリ階層を表示します。
コンピュータ名:~(カレントディレクトリ) ユーザー名 $ pwd
実行結果)
/Users/ホームディレクトリ
※ターミナル上での一つの命令は、$(bash) や %(zsh) の後に書きます。
$ pwd → 命令結果が表示される(されないこともあります) → 再び $ や % が表示されるまでを一つの命令です。
pwd コマンド ぐらいの命令だとすぐ終わってしまいますが、macOS に 新規で何かしらのツールをインストールするなど処理に負荷がある命令は、二度目の$が表示されるまで時間がかかることもあります。 なので、$ が表示されるまで気長に待つことがあることを忘れないでください。
pwd のような命令コマンドは、都度教材を通して必要なタイミングで学んでいってください。
02. シェルの歴史
シェルについて知っていただく上で、シェルの簡単な歴史をご紹介します。 今回は、たくさんあるシェルの世界その中でも macOS で利用されているシェルについて解説します。
macOS デフォルトシェル の歴史
tcsh
Mac OS X 10.2 (Jaguar)まで使用されていました。
bash
Mac OS X 10.3(Panther)の時に、bash にデフォルトシェルが切り替わりました。macOS 10.14 (Mojave)まで長い期間使用されていましたが、zsh にデフォルトシェルの座を譲りました。しかし、今でも根強い人気があり使用されています。
※ デフォルトシェルは、ターミナルを開いた時に表示されるシェルです。
zsh(ズィーシェル)
macOS 10.15 (Catalina) で利用が開始されたデフォルトシェルです。
この記事の著者である私は bash を利用しています。ここからは、昨今使用されている bash 及び zsh をメインで説明していきたいと思います。
03. bash と zsh の違い
基本的な命令コマンドは同じですが、設定ファイルや制御構文、関数定義、エイリアスにも違いがあります。
また、プロンプト最後の記号が違うことでわかります。
ー bash の場合
コンピュータ名:~(カレントディレクトリ) ユーザー名 $
ー zsh の場合
ユーザー名@コンピュータ名 ~(カレントディレクトリ) %
※ プロンプトの表示は、設定により変わる場合があります。
※ カレントディレクトリとは、現在のディレクトリの位置です。
Techpit の教材で bash と zsh の違いが顕著に出るのは、設定ファイルの違いにあります。 設定ファイルが違う事によって ruby のインストール等に影響が出ますので、そちらは別パートでもう少し詳しく解説します。
Techpit で使うシェル
Techpit では、bash を使った教材が多いです。
bash の教材があったら、この記事を思い出していただけると幸いです。
特に、各教材の設定において bash や zsh の違いに影響がでます。 この後に bash や zsh の変更についても記載がありますので、bash で良い場合は bash に切り替えても良いかもしれません。
04. zsh から bash への切り替え方法
zsh から bash へのデフォルトシェルの切り替え方法について学びます。
① zsh から bash への変更
まずは、以下のコマンドをターミナルで実行して現在利用できるシェルを確認します。
% cat /etc/shells
実行結果)
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
一覧に、/bin/bash があることを確認します。
それでは、以下のコマンドを実行して bash に変更しましょう。
% chsh -s /bin/bash
実行結果)
Changing shell for アカウント名.
Password for アカウント名: と表示されたら、macOS にログインするパスワードを入れます。
ターミナルを再起動します。
すると、以下のように表示され bash に戻ったことがわかります。
コンピュータ名:~(カレントディレクトリ) ユーザー名 $
念のため、確認しましょう。
$ echo $SHELL
実行結果)
/bin/bash
これで zsh から bash への変更は完了です。
② bash から zsh への変更
それでは、同様に bash から zsh に変更するパターンも見てみましょう。
macOS が catalina でデフォルトシェルが bash の場合、以下のメッセージがターミナルに表示されます。
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
翻訳
デフォルトのインタラクティブシェルは zsh になりました。 zsh を使用したい場合は、 chsh -s /bin/zsh を実行してくださいと表示されます。
これに習い、bash から zsh に変更してみましょう。
$ chsh -s /bin/zsh
Password for アカウント名: と表示されたら、macOS にログインするパスワードを入れます。
その後、ターミナルを再起動します。
すると、下記のように表示され zsh となったことがわかります。
ユーザー名@コンピュータ名 ~(カレントディレクトリ) %
さらに、echo $SHELL を実行すると現在のデフォルトシェルが表示されます。
% echo $SHELL
実行結果)
/bin/zsh
以上でbash から zsh への変更は終了となります。
05. rbenv をインストールする際の zsh トラブルシューティング
zsh で rbenv をインストールする際に注意すべきポイントを解説します。
rbenv では、インストールの際に PATH を通す必要があります。 教材内では、基本的に bash で記載されていますが、 zsh をお使いの方は以下の部分に注意して設定してみてください。
ー rbenv に PATH を通す(zsh バージョン)
% echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
% echo 'eval "$(rbenv init -)"' >> ~/.zshrc
ー 設定の更新(zsh バージョン)
% source ~/.zshrc
解説
echo コマンドは、echo コマンドの後にある文字列を出力するコマンドです。 しかし、今回は >>(リダイレクト) によって、コマンドの出力先が ~/.zshrc となっています。
~ は、ログインしているユーザーのホームディレクトリからの path を表しています。
.zshrc ファイルの先頭には、.(ドット)があります。これは、.zshrc ファイルが、隠しファイルであることを意味しています。
次に、echo の引数 `` シングルクォート内について解説します。
`export PATH="$HOME/.rbenv/bin:$PATH" `
export コマンドとは、引数(環境変数)を設定します。実行すると .zshrc ファイル内に、export PATH="$HOME/.rbenv/bin:$PATH" が記載されます。
`eval "$(rbenv init -)"`
eval コマンドは、引数を 1 つにまとめてコマンドとして実行します。
source ~/.zshrc
最後に、sourceというコマンドを使って追加した内容を反映します。~/.zshrc を再読み込みします。
これでrbenvコマンドを利用するのに必要なPATHが通りました。
.zshrc ファイル を実際にみてみよう
それでは、ホームディレクトリにある .zshrc ファイルを見てみましょう。
ターミナルにて、以下のコマンドを実行してください。
% cd ~
cd ~ とは、チェンジディレクトリの略で、現在のディレクトリを変えるコマンドです。~ を指定するとホームディレクトリに移動します。
% cat .zshrc
実行結果)
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
cat .zshrc は、指定したファイル(.zshrc)内を表示するコマンドです。 先ほど設定した echo コマンドの実行結果が入っていることが確認できました。
06. nodebrew をインストールする際の zsh トラブルシューティング
zsh で nodebrew をインストールする際に注意すべきポイントを解説します。
nodebrew とは、Node.js のインストールや Node.js のバージョンを管理する仕組みで、Node.js のバージョン切り替えをコマンド一つで行うことができます。
nodebrew においても path を通す場合に、zsh と bash に違いが出ます
ー シェルの構成ファイルに path を追加する(zsh バージョン)
% echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
ー 設定の更新(zsh バージョン)
% source ~/.zshrc
解説
echo コマンドは、echo コマンドの後にある文字列を出力するコマンドです。 しかし、今回は >>(リダイレクト) によって、コマンドの出力先が ~/.zshrc となっています。
~ は、ログインしているユーザーのホームディレクトリからの path を表しています。
.zshrc ファイルの先頭には、.(ドット)があります。これは、.zshrc ファイルが、隠しファイルであることを意味しています。
次に、echo の引数 `` シングルクォート内について解説します。
'export PATH=$HOME/.nodebrew/current/bin:$PATH'
export コマンドとは、引数(環境変数)を設定します。実行すると .zshrc ファイル内に、export PATH=$HOME/.nodebrew/current/bin:$PATH が記載されます。
source ~/.zshrc
最後に、sourceというコマンドを使って追加した内容を反映します。~/.zshrc を再読み込みします。 これで nodebrew コマンドを利用するのに必要なPATHが通りました。
.zshrc ファイル を実際にみてみよう
それでは、ホームディレクトリにある .zshrc ファイルを見てみましょう。
ターミナルにて、以下のコマンドを実行してください。
% cd ~
cd ~ とは、チェンジディレクトリの略で、現在のディレクトリを変えるコマンドです。~ を指定するとホームディレクトリに移動します。
% cat .zshrc
実行結果)
export PATH=$HOME/.nodebrew/current/bin:$PATH
cat .zshrc は、指定したファイル(.zshrc)内を表示するコマンドです。 先ほど設定した echo コマンドの実行結果が入っていることが確認できました。
07. .bash_profile .zprofile .bashrc .zshrc .zshenv の違いについて
echo コマンドで書き込む主要ファイルには、.bash_profile .zprofile .bashrc .zshrc さらに、Techpit の教材には .zshenv があります。
これらの違いについて記載しておこうと思います。
.bash_profile と .zprofile
ログイン時 (SSH ログインも含む) に実行されます。 ログインシェルの時に必要な環境変数を記述する場合は、このファイルに記述します。
.bashrc と .zshrc
新しいターミナルセッションごとに実行されます。 ログインシェルとインタラクティブシェルの時に必要な場合のみ、このファイルに記述します。
.zshenv
zsh を起動した時に実行されます。 ログインシェル、インタラクティブシェル、シェルスクリプトのどの場合でも必要な環境変数はこちらに記述するのが良いが、影響範囲が大きく特に理由がない場合は、こちらのファイルに記述しない方が良い。
★ 用語解説
ログインシェル
デスクトップ画面や仮想コンソールにログインした時に起動されるシェルをいいます。
インタラクティブシェル
ログインシェルから起動できるシェルでユーザーとの対話が可能なシェルをインタラクティブシェルと言います。
シェルスクリプト
シェルが理解、実行できる一連の処理を記述したスクリプト。スクリプトとは、ソースコードを書き、実行ができるプログラムの事を言います。
以上で本記事は終了となります。お疲れさまでした。
環境構築時にシェルの違いにより困った際は、こちらの記事を振り返っていただけると幸いです。
本記事の執筆者
わた
Techpitのユーザーの一人です。 Techpitを受講することで、みなさんもプログラムを楽しみましょう!
この記事が気に入ったらサポートをしてみませんか?