ソフトウェアの操作について

# 目的
ソフトウェアについて理解を深める

# 目次

1. [はじめに](#はじめに)
1. [シェルとは](#シェルとは)
1. [zsh](#zsh)
1. [PATH](#path)
1. [コマンドラインツールとは](#コマンドラインツールとは)
1. [Command Line Tools](#command-line-tools)
1. [パッケージ管理とは](#パッケージ管理とは)
1. [Homebrew](#homebrew)
1. [Node.js](#nodejs)
1. [Yarn](#yarn)
1. [バージョン管理とは](#バージョン管理とは)
1. [rbenv](#rbenv)

# はじめに

今回は、なぜターミナルでコマンドを実行するといろいろな動作が行われるのか、その仕組みについて詳しくまとめたいと思います。

# シェルとは

`シェル`とは、ターミナルとOSを繋ぐ窓口役のようなものです。
ターミナルで実行されたコマンドは`シェル`によって読み込まれ、OSに指示を渡した後、結果をターミナルに返して表示や実行などの動作をさせます。

また、`シェル`にもさまざまな種類があり、それぞれプロンプトやコマンド実行後の出力で、表示と挙動が若干異なります。

# zsh

`zsh`はシェルの1つであり、2019年以降のmacOS標準シェルです。
`zsh`は、.から始まるドットファイルを作成・編集することで、設定を行うことができます。

# PATH

`PATH`とは、「環境変数」と呼ばれるOS用の変数のことです。`PATH`には、複数の絶対パスの情報が保存されており、コマンドが入力されたときに、シェルは`PATH`に記述されたパスのディレクトリ内のファイルを検索します。
つまり、`PATH`に絶対パスを保存してアプリケーションのありかを示せば、どこからコマンドを実行してもアプリケーションのコマンドを打つことができます。

ちなみにPATHにアプリケーションのありかを示して、すべてのディレクトリからコマンドを使用可能にすることを、一般的に`「PATHを通す」`と表現するようです。

# コマンドラインツールとは

`コマンドラインツール`とは、コマンドで操作するアプリケーションのまとまりです。
`コマンドラインツール`を導入することで、OSが初めからコマンドで操作できるアプリケーション以外のアプリケーションをPCにインストールできます。

# Command Line Tools

`Command Line Tools`とはmacOS専用のコマンドラインツールです。
macOSでは、元々Linuxコマンドで操作できるアプリケーションや機能を標準搭載しています。Linuxコマンド以外で操作するアプリケーションの多くは`Command Line Tools`のインストールによって、まとめてPCに導入できます。

# パッケージ管理とは

まず`パッケージ`とは、プログラムや処理、複数のライブラリをひとまとめにしたもののことです。
そして`パッケージ管理`とは、パッケージやパッケージが持つライブラリなどの依存関係を考慮してインストールやバージョンアップを行う管理のことです。
1つのパッケージを利用したい場合、そのパッケージと依存関係にあるパッケージも合わせてインストールしてくれます。

このような管理を自動的に行なってくれるツールのことを、`パッケージ管理ツール`または`パッケージマネージャー`と呼びます。

# Homebrew

`Homebrew`とはmacOSのパッケージ管理ツールです。
macOS上で動作するアプリケーションの多くが`Homebrew`からインストールできます。

`Homebrew`を使うことにより、依存関係のあるパッケージが正しく動作するよう、複数のパッケージのバージョンをコントロールしてインストールすることが可能です。

基本的な`brewコマンド`として下記のようなコマンドがあります。

|  コマンド                       |  説明                              |
| ---------------------------- | --------------------------------- |
|  brew -v                     |  Homebrewのバージョンを表示する         |
|  brew install [パッケージ名]    |  パッケージをインストールする             |
|  brew uninstall [パッケージ名]  |  パッケージをアンインストールする          |
|  brew list                   |  インストールしたパッケージを表示する       |
|  brew search                 |  インストール可能なパッケージを表示する     |
|  brew update                 |  インストールしたパッケージを最新へ更新する  |


# Node.js

`Node.js`は、本来ブラウザ上で動くJavaScriptをサーバーサイドで動作させる「実行環境」です。
`Node.js`がインストールされると、サーバーサイドで利用できるJavaScriptのパッケージを活用できます。
もちろん、パッケージは依存関係を生むため、YarnなどのNode.jsのパッケージ管理ツールもあります。

# Yarn

`Yarn`とはNode.jsの環境上で動作するパッケージを管理する、JavaScriptのパッケージ管理ツールです。つまり、サーバーサイドで動作するJavaScriptのパッケージを管理するツールのことです。

Ruby on Railsでは、バージョン6系からJavaScriptのパッケージをデフォルトで利用するようになったため、プロジェクトの作成にYarnのインストールが必須となっています。

# バージョン管理とは

変更したバージョンを記録あるいは外部から保存して、過去のバージョンや最新のバージョンに切り替えることなどを`バージョン管理`と呼びます。

`バージョン管理`をすることで、パッケージとの依存関係の問題を解消したり、変更して問題が発生したプロジェクトを過去の安定したバージョンに切り替える、などの対応ができます。

# rbenv

`rbenv`はRubyのバージョンを切り替えるためのバージョン管理ツールです。
複数のバージョンのRubyをダウンロードしておいて、使用するRubyのバージョンをディレクトリごとに指定することも可能になります。

基本的な`rbenvコマンド`として以下のようなコマンドがあります（rbenvの拡張機能であるruby-buildという管理ツールが提供するコマンドも含めています）。

|  コマンド                      |  説明                                                 |
| --------------------------- | ----------------------------------------------------- |
|  rbenv -v                   |  rbenvのバージョンを表示する                                  |
|  rbenv install [バージョン]    |  Rubyバージョンを指定してインストールする                     |
|  rbenv uninstall [バージョン]  |  Rubyバージョンを指定してアンインストールする                  |
|  rbenv versions             |  インストールされているRubyバージョンの一覧を表示する            |
|  rbenv global [バージョン]     |  すべてのディレクトリで使用するRubyバージョンを切り替える          |
|  rbenv local [バージョン]      |  カレントディレクトリで使用するRubyバージョンを切り替える           |
|  rbenv rehash               |  RubyやGemに関するコマンドをバージョン変更後も使用できるようにする  |