Node.jsのインストール　npmの使い方について学んでみた。

## はじめに。。

今回、Node.jsとnpmコマンドについて学習したので、その復習として記事を書きました。
学習するに当たって利用したのは、環境構築を必要とせずに、PCとブラウザさえあれば利用できてしまうというオンライン学習サービス、Envaderを利用しました。

リンクはこちら　[Envader](https://envader.plus/)



## この記事でわかる事

- Envader is 何？
- Node.jsのインストール方法
- npmコマンドの使い方
- package.jsonの意味、意義


### 動作環境

EnvaderはLinux環境なので、コマンドもそれに付随します。
```bash
OS Linux
ディストリビューション　Ubuntu 18.04.6 LTS
```

## Envader is 何？

Envaderとはなんぞや？
全体を紹介すると、以下のコースを学習することができるサービスです。


- Linuxコース (一部無料あり)
- セキュリティ基礎コース(無料)
- ターミナルカスタマイズコース(有料)
- Database基礎コース(有料）
- Python環境構築コース(有料)
- Node.js環境構築コース(有料)


これらの学習が、自分でターミナルなどの環境を用意する事なく、サービスに設置された環境で実際に手を動かして実践することができるサイトです。

コース一覧のリンクです。

[Envader コース一覧](https://envader.plus/course)

## Node.jsとは
Node.jsですが、一体何者？

○○jsってついているって事は、きっとJavaScriptの仲間だなというのは自分でも何となく分かります。
が、実際にどうなのかと言うと。。。。

JavaScriptはブラウザ側（クライアントサイド）で動作する言語です。
ブラウザ側がボタンをクリックしたら何か通信を発生させたりあれやこれやするやつですね。

それと逆の立場。つまり、ブラウザ側ではなくサーバー側で動作するための`実行環境`の事をNode.jsと言います。

気をつけなければいけないなと感じたのは、Node.jsは言語ではなく、あくまで実行環境の事を指しているみたいなので、私も気をつけたいと思います。


### Node.jsをubuntuへインストール 
  
  


```bash
# deb.nodesource.comからnodejsのバージョン16のセットアップをダウンロード
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -

-fオプション
サーバーエラー時に静かに失敗する(全く出力しない)。

sオプション
サイレントモード。プログレスメーターやエラーメッセージを表示しない。

Sオプション
s と一緒に使用すると、curl が失敗した場合にエラーメッセージを表示するようになる。

Lオプション
サーバがリクエストされたページが別の場所にあるとなった場合に、curlで新しい場所での取得を再試行してくれる。便利！
```


たくさんオプションが付いてますが、curlコマンドにてNode.jsのバージョン16をダウンロードしてます。

まだこれでは環境にダウンロードしてきただけなので、次に利用できるようにインストールします。



```bash
sudo apt install -y nodejs

-yオプション
インストールするときに質問された場合、全てyesにする。
色々聞かれるのめんどうな時に便利。
```



ちゃんとインストールできたか確認



```bash
npm -v

8.3.1
```

よし！OK!


## npmコマンド
上でいきなり出てきた`npm`コマンドですが、いったい何か。

NodePackageManagerの略で、Node.jsで使用するあれやこれやのパッケージを管理してくれるツールのこと。
これを使用することによって、パッケージをインストールすることがでます。
これからNode.jsを使ってアプリケーションを作成したり、Reactを使ったアプリケーションを作成したりするときに活躍する事でしょう。
私はReactを学習する時に使用しました。

パッケージをインストールする時の使い方。

```bash
npm install [追加したいパッケージ名]

#バージョンを指定してインストールする場合
npm install [追加したいパッケージ名]@1.14.0
```
こんな感じで使うことができます。

ちなみに

```bash
npm install -D [追加したいパッケージ名]
```
とする事で、テスト用などの開発環境で使いますよ。といった宣言をして、`package.json`に指定することができます。
たった一つのオプションなのに、色々な意味が含まれていて面白いですね。


## package.json

`package.json`とは何なのか。について調べてみたので下記に記載します。

`package.json`とは、作成したプロジェクトの詳細が色々書いてあるファイル。
上記でインストールしたパッケージなどがここに記載されて管理されていきます。
-Dでインストールすると、`devDependencies`へ自動で記載されるわけです。

オプションをつけないと、`dependencies`へ記載されて、開発用ではなく本番環境用として認識される訳なんですね。

拡張子がjsonとなっているので、package.jsonの記載はjson形式で書かれています。

## まとめと感想

### まとめ

- Node.jsとは、サーバー側でJavaScriptを動作させるための実行環境。
- Node.jsをubuntuへインストールする際のコマンドの理解。
- npmコマンドの意味と使い方を理解。
- package.jsonの意味の理解。

### 感想

私は約半年前までは、ターミナルを触ることが大の苦手で、(というか良く分からないので触りたくなかった。）何かやったらデータが消えてしまったりPCの設定が変わって壊してしまうのではないかと思っていました。

ですが、Envaderでは自分のローカルのPCのターミナルを利用するのではなく、サービス側の環境を簡単に使えるので、間違ってバグってしまったとしても`環境の再起動`ボタンを押せば何度でも壊すことなく再起動が可能なのです。

この間違ってもボタン一つで環境を再起動できるというのは、私も含め初心者の方には最強の環境なのではないでしょうか？




今回私が取り組んでみたのは、Node.js環境構築コースの中で11あるシナリオの一つ、`npmの使い方`です。

参考までにコースのシナリオのリンクを貼っておきますので、気になる方はどうぞ。

[Envader Node.js環境構築コース](https://envader.plus/course/9/scenario/1078)


## 参考にさせていただいた記事一覧

[Node.jsとはなにか？なぜみんな使っているのか？](https://qiita.com/non_cal/items/a8fee0b7ad96e67713eb)

[よく使うcurlコマンドのオプション](https://qiita.com/ryuichi1208/items/e4e1b27ff7d54a66dcd9)

[curlコマンドオプション](http://www.mit.edu/afs.new/sipb/user/ssen/src/curl-7.11.1/docs/curl.html)

[Curl - DOS コマンド一覧](https://www.pg-fl.jp/program/dos/doscmd/curl.htm#opt_speed_time)

[重要なのに忘れがちなapt関係のコマンドのメモ](https://qiita.com/karaage0703/items/f01db1cf49b151022b7c)

[【初心者向け】NPMとpackage.jsonを概念的に理解する](https://qiita.com/righteous/items/e5448cb2e7e11ab7d477#dependencies--devdependencies)