Railsの環境構築と補足説明

## プログラミング言語およびフレームワーク：
* Ruby
オープンソースのプログラミング言語の1つ
* Ruby on Rails (Rails)
Rubyで書かれたWebアプリケーションフレームワーク

## JavaScriptランタイム環境:
* Node.js
:::note info
Node.js（ノード・ジェイエス）は、JavaScriptをサーバーサイドで実行するためのランタイム環境です。通常、JavaScriptはWebブラウザで実行されるクライアントサイドのプログラミング言語として使用されますが、Node.jsを使用することで、サーバーサイドのプログラミングにも利用することができます。

Node.jsは、ChromeのV8 JavaScriptエンジンをベースにしたオープンソースのプラットフォームで、JavaScriptをサーバーサイドで実行するために必要な機能やツールが含まれています。Node.jsを使用することで、非同期処理やイベント駆動型プログラミング、マイクロサービスアーキテクチャなど、高度なサーバーサイドのプログラミングが可能になります。

Node.jsは、Webサーバー、APIサーバー、リアルタイムアプリケーション、CLIツールなど、様々なアプリケーション開発に利用されています。また、Node.jsは、豊富なライブラリやフレームワークが存在し、開発効率を高めることができます。
:::
__要は、JavaScriptの実行環境であり、サーバーサイドで実行するためのプラットフォーム__


## バージョン管理ツール：
* rbenv
Rubyのバージョン管理ツールの1つで、複数のRubyのバージョンを切り替えることができます。
* nvm(Node Version Manager)
Node.jsのバージョン管理ツールの1つで、複数のNode.jsのバージョンを切り替えることができます。
* nodebrew
Node.jsのバージョン管理ツールの1つで、複数のNode.jsのバージョンを切り替えることができます。

:::note info
nvmとnodebrewの違いは？ by GPT
nvmは、Node.jsのバージョンを切り替えることができるツールです。複数のNode.jsバージョンをインストールして、必要に応じて切り替えることができます。また、インストールされたNode.jsバージョンの管理や、特定のプロジェクトに必要なバージョンを指定することもできます。nvmは、MacやLinuxといったUnix系のOSに対応しており、簡単にインストールすることができます。

nodebrewは、Node.jsのバージョンを切り替えることができるツールで、nvmと同様の機能を持っています。nodebrewは、MacやLinuxといったUnix系のOSに対応しており、コマンドラインから簡単にインストールすることができます。ただし、nodebrewはnvmよりも機能が少なく、Windowsには対応していません。

簡単に言えば、nvmはより多機能で、Unix系のOSに対応しており、Windowsにも対応しています。一方、nodebrewは、Unix系のOSに対応しており、軽量で使いやすいという特徴があります。どちらを使うかは、個人の好みや環境によって異なるでしょう。

__結論：好きな方を使え__
:::


## パッケージマネージャー：
* yarn
JavaScriptのパッケージマネージャーの1つで、プロジェクトに必要なパッケージを管理することができます。
* npm
JavaScriptのパッケージマネージャーの1つで、プロジェクトに必要なパッケージを管理することができます。
* bundler
JavaScriptのパッケージマネージャーの1つで、モジュールをバンドルして必要なファイルを生成することができます。

:::note info
パッケージマネージャーとは？ by GPT
ソフトウェア開発において、プログラムやライブラリなどのコードやデータをパッケージ化し、インストール、アップデート、削除、依存関係の解決を自動的に行うためのツールのことです。パッケージマネージャーは、開発者が手動でそれらのタスクを行う必要を省き、開発プロセスを効率化することができます。
コンピュータに何のソフトウェアがインストールされたかを記録し、新しいソフトウェアのインストール・新しいバージョンへのソフトウェアの更新・以前インストールしたソフトウェアの削除を容易に行えるようにするプログラムです。
:::
:::note info
yarn/npm/bundlerの違いは？ by GPT
yarn: Facebookによって開発されたパッケージマネージャーで、npmの代替として作られました。npmよりも高速で、セキュリティが向上しています。また、パッケージのインストールやアップデート時に自動的にキャッシュを使用することで、再度インストールする必要がなくなり、作業効率が向上します。

npm: Node.jsの標準のパッケージマネージャーです。npmは、世界中の開発者が作成したオープンソースのパッケージを検索、インストール、管理することができます。npmは、パッケージの公開や配布、ダウンロードなどを簡単に行えるため、JavaScriptコミュニティにおいて非常に重要な存在となっています。

bundler: Rubyのパッケージマネージャーであり、Gemと呼ばれるRubyのライブラリを管理します。bundlerは、依存関係の解決やバージョン管理を行い、プロジェクトに必要なライブラリを簡単にインストールすることができます。

__結論：bundlerは必須、yarnとnpmは好きな方を使え__（個人的にはyarn）
:::

__要は、RubyGemsがgemを管理するように、yarnとnpmはJavascriptのパッケージを管理するってこと。__

## JavaScriptのモジュールバンドラー：
* Webpacker
Railで使用するJavaScriptのモジュールバンドラーの1つです。

:::note info
モジュールバンドラーとは？
モジュールバンドラーは、Webアプリケーション開発において、複数のJavaScriptファイルを一つのファイルにまとめるツールです。

JavaScriptにおいて、1つのアプリケーションには数百から数千のJavaScriptファイルが存在することがあります。これらのファイルは、必要に応じて複数のHTMLページでロードされ、相互に依存関係がある場合もあります。このため、必要なJavaScriptファイルをすべてロードすることが非常に手間であり、アプリケーションの性能にも影響を与えることがあります。

モジュールバンドラーは、このような問題を解決するために開発されたツールで、アプリケーションに必要なJavaScriptファイルを1つのファイルにまとめ、依存関係の解決や最適化を行うことができます。代表的なモジュールバンドラーには、Webpack、Parcel、Rollupなどがあります。

モジュールバンドラーを使用することで、Webアプリケーションのパフォーマンスを向上させ、開発効率を高めることができます。
:::

これはよく見る画像ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324306/0831a672-b2ee-4463-ef6b-51012b21c0ab.png)

モジュールバンドラー以外にも以下のような特徴を持っていて、とにかく開発のために役立つ存在です。
* 便利で豊富なツール(ローダーやプラグイン)
* コード変更と同時に画面に反映するホットリロード
* アロー関数やクラスなどの新しいJavaScript構文(ES6)をブラウザで動くように変換(babel-loader)
* React、Vue.js、PostCSSなどのモダンなフレームワークに対する豊富な実績

最近で、ReactやVue.jsなどにも対応していて、非常にモダンです。
tailwindも使えるようなのでとても心強いですね。

WebpackerはRuby5.1から標準サポートされるようになりました。それまでは、Asset Pipeline(Sprockets)というモジュールバンドラーでしたが、もはや新しいプロジェクトでは使わないものになってきました。

少しややこしいのですが、WebpackとWebpackerは別物です。

:::note 
* Webpack
* CSS、JavaScript、画像などを１つのファイルとしてまとめるためのモジュールバンドラーで、node.jsのモジュールの1つです。
* Webpacker
WebpackをRailsで使うためのgemです。
:::


## データベース管理システム：
* MySQL
オープンソースのリレーショナルデータベース管理システムの1つで、データを効率的に格納・管理することができます。

## ソフトウェアのインストールおよび管理ツール：
* Homebrew
macOS用のソフトウェアのインストールおよび管理ツールの1つで、ターミナルから簡単にソフトウェアをインストールすることができます。

# まとめ
かなりざっくりまとめると、以下の通り。

|分類| 名前 | 説明 | 
|:-:|:-:|:-:|
|パッケージマネージャ|Yarn(npm) |Jacascriptパッケージを管理|   
|モジュールバンドラ|Webpacker |JavaScriptのライブラリをバンドル|
|パッケージ|jQuery/Turbolinks/Stimulus/React/View|Javascriptのパッケージ| 

:::note
* Node.jsでJSの実行環境を提供し、それをnvmやnodebrewでバージョン管理する。
そこに、YarnやnpmでJSライブラリ（パッケージ）のインストール、アップデート、削除、依存関係の解決をする。JSライブラリ（パッケージ）には、jQueryとかReactとかVue.jsがある。

* WebpackerはJSファイルなどをバンドルする（他にもあるけど、これがメインどころ）

* rbenvはrubyのバージョンを管理する。
:::


しっくりこないのが、yarnはパッケージマネージャなのに、ライブラリのjQueryをインストールするのはなぜ？？？
```
yarn add jquery
```
パッケージとライブラリはもや同義だと考えていいの？？疑問が残りました。