npmとcomposerについて調べてみた

# はじめに
composerとnpmについて調べてみたのでメモ

# composerとは
PHPのパッケージ管理システム
https://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94

* composerでインストールしたライブラリ群は一括でvendorというディレクトリに放り込まれているので、このディレクトリだけignoreしてしまえばいいのです

* ライブラリの依存性は別途作成されているcomposer.jsonに記載
* クラスのautoloadクラスも提供
* このcomposer.lockはcomposer.jsonにあるライブラリを取得するのに、実際にどのファイルを落としたのかをひとまとめにしたものです。

* composerを使用してライブラリをインストールすると、vendor/autoload.phpというファイルが生成され、このファイルをrequireすることで、vendor配下のライブラリをオートロードできるように設定してくれるのです。

# pearとは
phpのライブラリ
PHPのライブラリはほとんどComposer経由でインストールできるかと思いますが、稀にComposerに対応していないものもあり、その場合、pearから取得してくる必要があります。

# composer コマンド
https://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94
↑より以下参照

## init

```
composer init
```
composer使ったプロジェクトを自作するときに使うものです
ちゃちゃっとライブラリ書きたい時とかに使います
対話式で幾つか設定を加える事もできますが、全部スキップしてもいいです

## create-project

あるプロジェクトはプロジェクト作成時にテンプレートを用意してくれる場合があります
モダンなフレームワークはこの`create-project`を使用してプロジェクトを生成してくれる場合が多いです。
例えば、laravel, cake3, bearsunday, auraなどです。

laravelの場合は以下のコマンドでプロジェクトを作成できます

```
composer create-project --prefer-dist laravel/laravel blog
```
## require

```
composer require <package>[:<tag>]
```
composerを使ってライブラリやパッケージをインストールします
インストールされたライブラリの情報はcomposer.jsonに記載され、実際に何をインストールしたかの情報がcomposer.lockに記載されます
composerを使っている場合はなるべく`composer require`を使用するようにしましょう

オプションとして`--dev`をつけると、開発環境専用のパッケージとしてインストールすることができます。
これは、composer.jsonの中で、`require-dev`の項目に追加されるということです

## install

```
composer install
```
composer.jsonに記載されている内容、もしくはcomposer.lockに記載されている内容に従って、パッケージをインストールします
プロジェクトのメンバーは、このコマンドを使用することによって、パッケージの依存性を解決することができます。
パッケージが更新されたら、再度このコマンドを打つといいでしょう

## update

```
composer update
```
composer.lockを無視してパッケージをcomposer.jsonを元にインストールします
現在の依存性を全部最新化したい時とかに使いますが、通常余り使う機会はないように思います。

## remove

```
composer remove <package>
```
`require`の逆で、パッケージを取り除きます
一応入れてみたけど、やっぱり使わないライブラリとかが出てきたら、こいつで取り除くといいでしょう。
なんのために使うかわからないライブラリやパッケージがあるのは、あまり気持ちの良いものではないので

## dump-autoload

```
composer dump-autoload
```
先に述べた名前空間を吐き出させるコマンドです。
composer.jsonにautoloadの項目を追加した場合はこのコマンドを使ってオートローダを刷新しておくと良いでしょう


## ファイル
composer.lock は実際にインストールされているライブラリ、バージョンが記載されている。
composer.json には、このアプリケーション（ライブラリ）が一体どのライブラリ、どのバージョンに依存しているかを記載する

## composertコマンド
* プロジェクトを作るのに、composer initかcomposer create-projectを使う。
続いて必要なパッケージを入れるために、composer require

* install
composer.json に基づいて依存関係を解決する
composer.lock というファイルが存在する場合は、それに従う。


https://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94

コマンド
https://qiita.com/YusukeHigaki/items/47dd3ec23544225f7301


https://gomiba.co.in/blog/archives/883



## composerの提供するautoload
Composer の提供するオートローダーとは
https://reffect.co.jp/php/composer-autoload




## 参考
https://qiita.com/hashrock/items/15f4a4961183cfbb2658
https://qiita.com/msakamoto_sf/items/a1ae46979a42d6948ebd

# Node.js 
* JavaScript**実行環境**
* サーバ側でもJavaScriptが使えるようになり、**サーバー側もクライアント側も全部JavaScriptだけで作れる**
* Nodejsライブラリをインストールするための専用のツールとして、npmが用意された

# npmとは
* パッケージ管理ツール
* **Node.jsに組み込まれている**
* npmを使いたければNode.jsが必要

## npm
node.jsのパッケージ管理ツール

# npm 使い方

## npm init
* 実行すると対話形式で項目を入力して、package.jsonを作成します。


## npm install -g
どのプロジェクトでも利用するようにグローバルに
-gオプションを付けずに実行した場合は、node_modulesにインストール

globalの場所の確認

```shell_session
$ sudo npm list -g | head
/home/ユーザー/.npm-global/lib
```

## npm install gなし
package.jsonの内容に従って、カレントディレクトリのnode_modulesというフォルダ下に、ライブラリが保存。node_modules/が存在しない場合は作成される。
プロジェクト固有になる




## npm install パッケージ

```
npm install --global   // 省略記法 npm -i -g
npm install --save     // 省略記法 npm -i -S npmバージョン4からは--saveオプションは省略可
npm isntall --save-dev // 省略記法 npm -i -D
```

### --save-dev
devDependencies

開発時に必要なモジュール

### --save
dependencies

実行時に必要なモジュール

### その他
node_modulesというフォルダ下に、ライブラリが保存。node_modules/が存在しない場合は作成される。
デフォルトだとpackage.jsonに追記されない。
--save は package.json の dependencies(本番) に追記される。
--save-dev は package.json の devDependencies(開発、テスト) に追記される。-D は --save-devの略
--save-optional は package.json の optionalDependencies に追記される。

* **npmバージョン4からは--saveオプションは省略可**
* 他の人が npm install した時に、dependencies に指定したパッケージが全てインストールされる。
* ただし、利用者がpackage.json含めたソースコード全体をgitなどからcloneして開発する = 開発者と同等の立場として、追加パラメータ無しで package.json のあるディレクトリで npm install とだけした場合は、開発者の立場になるわけなので、devDependencies もインストールされる。

* devDependencies に追記したものは開発時にのみ使うパッケージを指定するのに使う。開発者のみが使うため


package.json内に、どのライブラリを取ってきたのか記述
npm install パッケージ名 --save  
package.jsonの内容に従って、packageをインストール


* npm install --productionとすると、devDependenciesはインストールされない
* npm install -g グローバルインストール
* npm install ローカルインストール
* npm install --save パッケージ名　でローカルインストール
* npm install --save-dev パッケージ名　でローカルインストールかつpackage.jsonのdevDependenciesにパッケージ情報が記載される


## npm auditとは
/node_modules配下にインストールしたpackageの脆弱性をチェックしてくれるものです。


## npm audit
npm auditとだけうつとチェックと結果のレポートを表示してくれます。

## ビルド
npm run 

npm scriptsと呼ばれるタスク実行機能を呼び出すコマンド

## フロントエンドのビルド
npm run watch

ビルドコマンドは npm スクリプトにまとめられているので、以下のコマンドで監視モードのコンパイルが走ります。つまり一度コンパイルが走った後に監視モードに入り、ファイルの変更があるたびに自動的に再度コンパイルが実行されます。