bash_profile、zshrcとは

<!-- wp:paragraph -->
<p>この投稿では、bash_profile、zshrcを中心にログインシェルについてまとめます。<br>少しでも参考になったら幸いです。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>bash_profile、zshrcとは</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>bash_profile、zshrcとは、PCにログインをトリガーに動くシェル（ログインシェル）のことです。<br>そのため、bash_profile、zshrc（ログインシェル）を理解するということは、シェルを理解することとほぼ同義になるため、シェルについてまとめます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>シェルとは</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>シェルとは、<span class="marker">ユーザの入力を、OSに翻訳してくれるもの</span>です。<br>OSは簡単に言ってしまうと、ハードウェアやソフトウェアを紐付けてくれるものです。<br>キーボードで入力した文字が画面に表示できるのはOSのおかげとイメージしてもらえると良いと思います。<br><br>ここまでの関係を図解すると以下のような形になります。</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":146,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
<figure class="wp-block-image size-large is-style-default"><img src="https://pay-raikit.online/wp-content/uploads/2021/06/9aeebad0584f7935c861ab2c2a907fe1-1024x604.png" alt="" class="wp-image-146"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>また、シェルには以下の3つの特徴があります。</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol><li><strong>シェルはログイン後に動く</strong></li><li><strong>2つ以上のシェルを同時に使えない</strong></li><li><strong>使うシェルはログイン後も変更可能</strong></li></ol>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>③だけ少しイメージが湧きづらいと思いますので、具体例で補足します。<br>ログインシェルはbash_profileを選択していても、CLI（ターミナルなど）、<br>GUI（システム環境設定など）操作で、zshrcに切り替えることができるということですね。<br>切り替え方は、後述するので、気になった方は続きをお読みください。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>シェルの役割の具体例</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>ユーザがOSに命令を出したい際に、翻訳してくれると言ってもイメージが湧きづらいと思いますので、<br>具体例を用いて、補足します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>例えば、Macで複数バージョンのRubyを使いたいために、rbenvを使うとします。<br>rbenvって何？って方は以下の記事を合わせてお読みください。</p>
<!-- /wp:paragraph -->

<!-- wp:jin-gb-block/blog-card {"url":"https://pay-raikit.online/rbenv/"} -->
https://pay-raikit.online/rbenv/
<!-- /wp:jin-gb-block/blog-card -->

<!-- wp:paragraph -->
<p>実はPC君はそんなに頭良くないので、<span class="marker">ユーザがrbenvをインストールしても自動で使えるようにはしてくれない</span>んですね。<br>そこで、シェルの出番です。<span class="marker">シェルで、「rbenvを使います！」と宣言</span>してあげれば、rbenvを使えるようになるんですね。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>少しMacとRubyの話になってしまうのですが、<span class="marker">実はMacには最初からRubyがインストールされていて、<br>rbenvを使います！と宣言してあげないと、最初から入っているRubyを使おうとする</span>んですね。<br>ここまでを図にまとめると以下のようになります。</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":147,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
<figure class="wp-block-image size-large is-style-default"><img src="https://pay-raikit.online/wp-content/uploads/2021/06/476e238188fea65ce172fa18409c869f-1024x690.png" alt="" class="wp-image-147"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>実際に、シェルの中身と、中身を変えた時にRubyのバージョンが変わることを確認してみましょう。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>zshrcをシェルとして指定しており、zshrcに以下が記述されているとします。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>rbenvを使用するよ！のzshrcへの記述：
eval "$(rbenv init -)"

zshrcの中身確認コマンド：
vi ~/.zshrc   </code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>すると、rbenvなのか最初から入っているRubyのどちらかを確認するコマンドで、rbenvが選択できていることが確認できます。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>確認コマンド：
which ruby

出力結果:
/Users/○○○○（ユーザ名）/.rbenv/shims/ruby</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>また、zshrcから、rbenv使うよ！の宣言を消すと以下のような表示になります。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>zshrcから消去する記述：
eval "$(rbenv init -)"

zshrcの変更をPCに反映するコマンド：
source ~/.zshrc

確認コマンド：
which ruby

出力結果:
/usr/bin/ruby</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>これで、シェルの役割がイメージいただけていると嬉しいです。<br>まだよくわからない！って方はコメントいただければ補足いたします。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>シェル、ログインシェルの切り替え方</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>シェルの切り替えは、一時的なシェルの変更を指しています。(インタラクティブシェルといいます。)<br>一方、ログインシェルの切り替えは、ログイン後に使用するシェルの永続的な切り替えを指しています。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CLI（ターミナル）操作とGUI（システム環境設定）操作の両方で切り替えられるので、<br>それぞれ説明します。<br>また、GUIの設定によっては、CLI操作では切り替えられないことがあります。<br><span class="marker">GUIの設定が優先で反映されますので、切り替えられない場合は、GUI操作での切り替え</span>をお試しください。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>CLI操作でのシェル、ログインシェル切り替え</h4>
<!-- /wp:heading -->

<!-- wp:code -->
<pre class="wp-block-code"><code>シェルをbashに切り替える：
bash
シェルをzshに切り替える：
zsh

ログインシェルをbashに切り替える：
chsh -s bin/bash
ログインシェルがbashであることの確認：
ターミナルの表示が「ユーザ名$」

ログインシェルをzshに切り替える：
chsh -s /bin/zsh
ログインシェルがzshであることの確認：
ターミナルの表示が「ユーザ名%」</code></pre>
<!-- /wp:code -->

<!-- wp:heading {"level":4} -->
<h4>GUIでのログインシェルの切り替え</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>切り替え方法は２種類あり、優先順位もあるので、切り替え方法と優先順位を別々にまとめます。</p>
<!-- /wp:paragraph -->

<!-- wp:jin-gb-block/box-with-headline {"boxStyle":"kaisetsu-box2","boxTitle":"切り替え方法①"} -->
<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box2"><div class="kaisetsu-box2-title">切り替え方法①</div><!-- wp:list {"ordered":true} -->
<ol><li>ターミナルを開く</li><li>ターミナルウィンドウがアクティブな状態で、リンゴマークの右の「ターミナル」をクリック</li><li>「環境設定」をクリック</li><li>「開くシェル」で「コマンド」をクリック</li><li>切り替えたいシェルを入力<ol><li>bashに切り替える場合は、「/bin/bash」</li><li>zshに切り替える場合は、「/bin/zsh」</li></ol></li><li>ターミナルを再起動</li><li>ターミナルの表示が切り替えたいシェル通りになっていれば、切り替え成功<ol><li>bashに切り替える場合は、「ユーザ名$」</li><li>zshに切り替える場合は、「ユーザ名%」</li></ol></li></ol>
<!-- /wp:list --></div>
<!-- /wp:jin-gb-block/box-with-headline -->

<!-- wp:jin-gb-block/box-with-headline {"boxStyle":"kaisetsu-box2","boxTitle":"切り替え方法②"} -->
<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box2"><div class="kaisetsu-box2-title">切り替え方法②</div><!-- wp:list {"ordered":true} -->
<ol><li>リンゴマークをクリック</li><li>左下の鍵を開く</li><li>ログインユーザを２本指でクリック</li><li>「詳細オプション」をクリック</li><li>ログインシェルで切り替えたいシェルを選択<ol><li>bashに切り替えるなら「/bin/bash」を選択</li><li>zshに切り替えるなら「/bin/zsh」を選択</li></ol></li><li>OKをクリック</li><li>ターミナルの表示が切り替えたいシェル通りになっていれば、切り替え成功<ol><li>bashに切り替える場合は、「ユーザ名$」</li><li>zshに切り替える場合は、「ユーザ名%」</li></ol></li></ol>
<!-- /wp:list --></div>
<!-- /wp:jin-gb-block/box-with-headline -->

<!-- wp:jin-gb-block/box-with-headline {"boxStyle":"kaisetsu-box2","boxTitle":"切り替え方法の反映優先順位"} -->
<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box2"><div class="kaisetsu-box2-title">切り替え方法の反映優先順位</div><!-- wp:list -->
<ul><li>切り替え方法が①が優先される<ul><li>②でbashを選択していても、①でzshを選択している場合はzshになる</li></ul></li><li>①を反映させるには、②で「開くシェル」を「デフォルト」選択</li></ul>
<!-- /wp:list --></div>
<!-- /wp:jin-gb-block/box-with-headline -->