JS初学者がNode.jsをインストールするまで

JSを学び始め色々と触っていると、npmをよく使う。よくわからないまま使っているので理解を深めてみる。


##Node.jsとは
* ChromeのJavaScriptエンジンV8からスクリプトの実行環境を取り出したもの。
* それに加えて、ファイルの読み書きや圧縮、HTTPサーバーなどのAPIを追加ている。

ChromeのJS実行エンジンの処理速度がとても速かったことから、ブラウザだけに留めておくのは勿体無いといった流れから作成されている。



###Node.jsの構成

* Nodeコアライブラリ
* Node.jsバインディング
* V８エンジン
* 非同期　I/O（インプットアウトプット）


###Node.jsの特徴

* 非同期処理を標準APIとして提供しているため実行効率がいい。また**ノンブロッキングI/O**なのでチャットアプリなどで高いパフォーマンスを発揮する。
* サーバー側もクライアント側も同じ言語でかける
* 便利なライブラリを簡単に利用できる。これはnode.jsのためのパッケージマネージャ**「npm」**で利用できる。

<br>
##JSでI/O処理とは

Ajaxのように非同期通信を行う。ファイルの読み込む処理は、requreを利用する。



**ファイルの読み込み**

```js
var fs = require('fs');  
```

**他のファイルへ関数を渡す**

```js:index.js
function oge(){
    // 処理

}
exports.hoge = hoge;
```

**取り込みたいファイルの読み込み**

```js:js
var foo = require('./index.js');  
foo.hoge();  
```



###requireとは
commonJSで定められた構文。この構文を利用できる環境でないと利用できない。Node.jsはその環境の一つ。

###commonJSとは
サーバーサイドJSがで始めた時に、サーバーサイドの標準仕様を決めよう！ということで定められた仕様のこと。悪魔でルールのことである。


<br>
##npm とは

* node.jsのパッケージを管理するツール

* パッケージはnpmの公式HPに掲載されている 

* Ex) Express,promise,React,async,など



##npm コマンド

* `npm --v`  :   バージョンチェック

* `npm list -g` :   npmでインストールされたパッケージを表示。-gで使用して居留守全てのコンピュータから検索。

* `npm list` :       現在のディレクトリから検索。

* `npm -i  <package>` :     ローカルインストール

* `npm i -g <package>` :   グローバルインストール

* `npm un <package>`  :   アンインストール

* `npm up`  :   パッケージのアップデート

* `npm ls`  :  インストールしたモジュール一覧

*  `npm  --v  :  npm install -g npm : npm rebuild`  :  npmを最新の状態にする


***


npm自体はnodebrewでnode.jsをインストールすると一緒にインストールされる。
つまり、**node.jsとnpmはセット**。nodebrewでバージョン管理する際、nodeのバージョンを変更するとnpmのバージョンも自動で変更される。
もし変更してしまって戻したい場合は、npm uninstall <package_name>で削除したのちにinstallをし直す。


それを踏まえた上でnpm自体のversionを変える方法


`npm install npm@latest -g`:最新版にアップデート
`npm install npm@5.0.0 -g`:特定のバージョンをインストール



##Node.jsのインストール

1. **Homebrewのインストール**
2. **nodebrewのインストール**
3. **Node.jsのインストール**



* Homebrew はMac用のパッケージマネージャ

* nodebrewはnode.jsのバージョン管理ツール。任意のバージョンのnode.jsを簡単にインストールすることができる、またバージョンの切り替えが簡単にできる。

* nodebrewのインストールにはパスを通す必要がある

##nodebrewのインストール方法
homebrewをインストールしてから

```
brew install nodebrew
```

その後、パスを通す必要がある。


##パスを通すとは何か？

以下の記事を見れば完璧にわかります。何も言わず呼んでください。
[PATHを通すとは？ (Mac OS X)](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)


<br>


結論としては`コマンド検索パス(コマンドサーチパス)を追加すること。`
つまりシェルがコマンド実行ファイルを探しに行くパスのこと


lsコマンドが実行できるのは、binディレクトリに実行ファイルが存在し、そこにpathを通しているから。「bin/ls」でも実行できる。

コマンド検索パスの確認方法


```
echo $PATH
```

```
/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```


セミコロンで区切られているので

```
/.nodebrew/current/bin:

 /usr/local/bin:

 /usr/bin:/bin:

 /usr/sbin:/sbin
```

4つが存在することがわかる。



whichコマンドを利用することで実行ファイルがどこにあるのかを教えてくれる。

```
$ which nodebrew
$ .nodebrew/current/bin/nodebrew
```


pathには優先度がある

```
 /usr/local/bin:が最優先される。
```






<br>
##そもそもshellとは何か？
以下の記事を読む。しっかりとまとめられている。
[初心者が調べた。shellとは](https://qiita.com/ycoda/items/87d23b818cb06ba1c348)


<br>
shellは、OSのLinuxを操作するためのもの。

- コマンドを受け付け
- シェルスクリプトの実行


shellの種類として、bashがある。
ファイルの操作やプロセスの操作などを行う。



###コマンド種類

* `cat ファイル名`　: ファイルを確認する。　`-n`で行番号をつける。

* `vi ファイル名` :　ファイルを編集する。 `i`で編集モード。`esc`で終了。`:wq`で保存して終了。

* `vi 新規ファイル名`　: ファイルを作成できる。

* `cat ファイル名　>> sample.txt` : 　表示されたファイルをsample.txt　の最後に連結する。　> は標準出力の意味。





##環境パスを通す

以下をそのまま書けば良い。

```
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
```


echoは画面に文字列や数値、変数を表示するコマンド。
\>\> は.bash_profileの最後に連結するコマンド。つまり.bash_profileの末尾に、PATH=$HOME/.nodebrew/current/binを記述している。




##.bash_profileと、.bashsr
以下の記事を読む。
[.bash_profileと.bashrcについて](https://qiita.com/shyamahira/items/260862743e4c9794b5d2)



**簡単にまとめると**
* Linuxにログインすると、ホームディレクトリにある.bash_profileが実行され、そのあとに.bashrcが実行される。これらのファイアルの中にある環境変数やコマンドのエイリアスの設定を自由にできる。


```
- ログイン時に一回だけ実行したい時

.bash_profileに記載

- シェルを起動する度に実行したい時(一般的な設定)

.bashrcに記載
```


どちらかに通したいPATHを記載。

**Pathを通すには**

```
$ export PATH=$PATH:追加したいコマンド検索パス
```


**Pathを通した後**

```
sorce ~/.bashrc
```


「source」コマンドは、ファイルに書かれたコマンドを現在のシェルで実行する、というコマンドです。主にシェルの設定ファイルを反映させる際に使用します。



**追加するパスの優先度を高めたい場合**

```
export PATH=追加したいコマンド検索パス:$PATH
```

以上でnodebrewのインストールが完了。




##Node.jsのインストール

```
//インストールできるバージョンの確認
nodebrew ls-remote

//インストール
nodebrew install <package_name>
```


以上でインストールまで完了する。


nodeのバージョンはパラレル上で存在する（ブランチを切っているのと同じ）。そのため、あるバージョンでnpmでファイルを追加しても、他のバージョンに作用はしないということに注意する。