NodeJS開発者が知っておくべき12の便利なパッケージ

NodeJSにはコードの再利用に最適です。そしてコードの再利用の環境はNPMパッケージです。

NPMパッケージは、時間と労力を大幅に節約します。日付ライブラリが必要ですか？そのためのパッケージがあります。ユーティリティライブラリが必要ですか？問題ありません。パッケージをインストールするだけです。コードの問題を解決する必要があるときはいつでも、ニーズに合わせたパッケージがある可能性があります。

これは、すべてのNodeJS開発者が知っておくべきNPMパッケージのリストです。これらのNPMパッケージを時間の節約と魔法の妖精のヘルパーとして扱ってください。

**生産性を向上させるNodeJSパッケージ**

## [husky](https://github.com/typicode/husky) - 20k Stars
Huskyは、Git Hooksの実装を簡単にします（Git Hooksとはスクリプトです。GitがCommitやPushなどの重要なコメントを実行する時に自動的に実行されます）。チームと協力して、チーム全体にコーディング標準を適用したいですか？問題ない！Huskyを使用すると、リポジトリにコミットまたはプッシュする前に、コードを自動的にリント（Lint）してテストするように全員に要求できます。

#### インストール方法
```
yarn add husky
```

#### 使用法
これは、Husky Hooksの実装する方法の例：

```json:package.json
{
  "husky": {
    "hooks": {
      "pre-commit": "npm lint",
      "pre-push": "npm test"
    }
  }
}
```
- `pre-commit` Hooks はリポジトリにコミットする前に実装されます。
- `pre-push` Hooks はリポジトリにプッシュする前に実装されます。

## [dotenv](https://github.com/motdotla/dotenv) - 12k Stars
Dotenv は、環境変数を`.env`ファイルから`process.env`にコードするゼロ依存モジュールです。コードベースと別の環境に構成を保存することは、[The Twelve-FactorApp](http://12factor.net/config)手法に基づいています。

#### インストール方法

```
yarn add dotenv
```

#### 使用法
dotenv構成を要求します。

```javascript:index.js
require('dotenv').config()
```

プロジェクトのルートディレクトリに`.env`ファイルを作成します。 `NAME = VALUE`の形式で新しい行に環境変数を追加します。例えば：

```tex:.env
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
```

`process.env`には、`.env`ファイルで定義したキーと値が含まれて、アクセスできます。

```javascript:sample.js
const db = require('db')
db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
})
```

## [date-fns](https://github.com/date-fns/date-fns) - 24k Stars
Date-fnsはlodashに似ていますが、日付用です。日付の操作を簡単にする多くのユーティリティ関数が含まれています。

Date-fnsは、ブラウザーとNodeJS環境でJavaScriptの日付を操作するための、最も包括的でありながらシンプルで一貫的のあるツールセットを提供します。

#### インストール方法

```
yarn add date-fns
```

#### 使用法
date-fnsライブラリの簡単なサンプルを次に示します。

```javascript:sample.js
import { compareAsc, format } from 'date-fns'

format(new Date(2014, 1, 11), 'yyyy-MM-dd')
//=> '2014-02-11'

const dates = [
  new Date(1995, 6, 2),
  new Date(1987, 1, 11),
  new Date(1989, 6, 10),
]
dates.sort(compareAsc)
//=> [
//   Wed Feb 11 1987 00:00:00,
//   Mon Jul 10 1989 00:00:00,
//   Sun Jul 02 1995 00:00:00
// ]
```

その他の例と使用例については、[ドキュメント](https://date-fns.org/docs/)を参照してください

## [Bunyan](https://github.com/trentm/node-bunyan) - 6.5k Stars
Bynyanは、Node用の把握しやすくパフォーマンスのJSONロギングライブラリです。

#### インストール方法

```
yarn add bunyan
```

**ヒント**：`bunyan CLI`ツールは、すべてのバージョンのBunyanログと（理由の範囲内で）互換性があるように作成されています。従って`yarn add global bunyan`、グローバルbunyanを追加してPATHでBunyan CLIを取得してから、アプリでBunyanをNodeJSライブラリで使用するためにローカルBunyanインストールを使用することをお勧めします。

#### 使用法
Bunyanは、NodeJSサービス用のシンプルで高速なJSONロギングライブラリです。

```javascript:sample.js
const bunyan = require('bunyan');
const log = bunyan.createLogger({name: "myapp"});
log.info("hi");
```

`node sample.js`を実行すると、コンソールに返される内容は次のとおりです。
![1_o_eRezYadrpuOxN8Qm1kRQ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756729/2c425f4a-0900-069a-115f-5590d1a55c0d.png)


## [Ramda](https://github.com/ramda/ramda) - 20k Stars
Rambdaは、JavaScriptプログラマー向けの実用的で機能的なユーティリティライブラリです。Rambdaはより純粋な機能的なスタイルを強調しています。

不変性と副作用の無い機能は、Rambdaの設計の中心です。シンプルとエレガントなコードで仕事を成し遂げるのに役立ちます。

#### インストール方法
```
yarn add ramda
```

#### 使用法

```javascript:sample.js
import * as R from 'ramda'
const greet = R.replace('{name}', R.__, 'Hello, {name}!'); 
greet('Alice'); //=> 'Hello, Alice!'
```
[上記のコード](https://ramdajs.com/repl/?v=0.27.0#?const%20greet%20%3D%20R.replace%28%27%7Bname%7D%27%2C%20R.__%2C%20%27Hello%2C%20%7Bname%7D%21%27%29%3B%0Agreet%28%27Alice%27%29%3B%20%2F%2F%3D%3E%20%27Hello%2C%20Alice%21%27)

## [debug](https://github.com/visionmedia/debug) - 9k Stars
Debugは、NodeJSコアのデバッグ手法をモデルにした小さなJavaScriptデバッグユーティリティです。

debugは関数を曝します。この関数にモジュールの名前を渡すだけで、デバッグステートメントを渡すための装飾バージョンの`console.error`が返されます。

#### インストール方法

```
yarn add debug
```

#### 使用法

```javascript:sample.js
const debug = require('debug');
const log = debug('http:server');
const http = require('http');

const name = 'My App name';

log('booting %o', name);

http.createServer((req, res) => {
  log(req.method + ' ' + req.url);
  res.end('debug examplen');
}).listen(3200, () => {
  log('listening');
});


// run this command in the terminal
// DEBUG=http:server node app.js
```
[上記のコード](https://gist.github.com/indreklasn/8f7cae650757c321882fadb2b3202f26#file-app-debug-example-js)
これにより、モジュールのさまざまな部分でけでなく、モジュール全体のデバッグ出力を切り替えることができます。
![1_d_Nr9t-06_t1d6Nt7ZSWlw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756729/4fae7b41-d53b-f05d-72db-94301bf0d066.png)



## [flat](https://github.com/hughsk/flat) - 1.2k Stars
flatは、ネストされたJavaScriptオブジェクトを受け取り、それをフラット化（平坦化）します。区切られたキーを使用してオブジェクトを平坦化しないこともできます。

#### インストール方法

```
yarn add flat
```

#### 使用法
```javascript:sample.js
const flatten = require('flat')

flatten({
    key1: {
        keyA: 'valueI'
    },
    key2: {
        keyB: 'valueII'
    },
    key3: { a: { b: { c: 2 } } }
})

// {
//   'key1.keyA': 'valueI',
//   'key2.keyB': 'valueII',
//   'key3.a.b.c': 2
// }
```

## [JSON5](https://github.com/json5/json5) - 4k Stars
JSON5 Data Interchange Format（データ交換フォーマット）は[JSON](https://tools.ietf.org/html/rfc7159)のスーパーセットであり、構文を拡大して[ECMAScript 5.1](https://www.ecma-international.org/ecma-262/5.1/)の一部を含めることにより、JSONの制限の一部を軽減することを目的としています。

#### インストール方法

```javascript:index.js
yarn add json5
const JSON5 = require('json5')
```

#### 使用法
ファイル拡張子（.json5）に注意ください。JSON５はJSONの拡張機能およびスーパーセットです。

```javascript:sample.js
{
  // comments
  unquoted: 'and you can quote me on that',
  singleQuotes: 'I can use "double quotes" here',
  lineBreaks: "Look, Mom! \
No \\n's!",
  hexadecimal: 0xdecaf,
  leadingDecimalPoint: .8675309, andTrailing: 8675309.,
  positiveSign: +1,
  trailingComma: 'in objects', andIn: ['arrays',],
  "backwardsCompatible": "with JSON",
}
```
[上記のコード](https://gist.github.com/indreklasn/4c72668bdcf7aea1ee1c75df7fa84389#file-example-json5)


## [ESLint](https://github.com/eslint/eslint) - 17k Stars
ESLintは、開発チームにバグを回避し、コーディング標準を強制するための素晴らしいツールです。ESLintは、ECMAScript/JavaScriptコードで見つかったパターンを識別してレポートするためのツールです。

#### インストール方法 + 使用法
```
yarn add eslint
```

次に、構成ファイルを設定する必要があります。

```
./node_modules/.bin/eslint --init
```

その後、次のような任意のファイルまたはディレクトリでESLintを実行できます。

```
./node_modules/.bin/eslint yourfile.js
```

詳細な説明については、[ドキュメント](https://eslint.org/)を参照してください。開発と構成の例は沢山あります。

## [PM2](https://github.com/Unitech/pm2) - 33k Stars
PM2は、ロードバランサーが組み込まれたNodeJSアプリケーションの本番プロセスマネージャーです。これにより、アプリケーションを永久に存続させ、ダウンタイムなしでリロードし、一般なシステム管理タスクを容易にすることができます。

#### インストール方法

```
yarn add global pm2
```


#### アプリケーション起動
次のように、任意のアプリケーション（Node.js、Python、Ruby、$ PATHのバイナリ…）を起動できます。

```
pm2 start app.js
```

それで、アプリはデーモン化、可視化され、永久に存続します。[プロセス管理の詳細](https://pm2.keymetrics.io/docs/usage/quick-start/)。

#### アプリ管理
アプリケーションが開始されると、それらを簡単に管理できます。実行中の全てアプリを一覧表示する方法は次の通りです。

```
pm2 ls
```

![111111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756729/5bd4a9d5-1ec0-8ec6-a7a3-ca986a94eaa2.png)


機能と可能性の完全なリストについては、[ドキュメント](https://pm2.io/)を参照てください。

## [Helmet](https://github.com/helmetjs/helmet) - 7.5k Stars
Helmetライブラリは、さまざまなHTTPヘッダーを設定することで、Expressアプリを保護するのに役立ちます。「それは特効薬ではありませんが、それは助けになります！」

#### インストール方法

```
yarn add helmet
```

#### 使用法
Helmetは[Connect-style middleware](https://github.com/senchalabs/connect)であり、[Express](https://expressjs.com/)などのフレームワークと互換性があります。（[Koa](https://github.com/koajs/koa)のサポートは [koa-helmet](https://github.com/venables/koa-helmet)です）

```javascript:sample.js
const express = require("express");
const helmet = require("helmet");

const app = express();

app.use(helmet());
```

トップレベルの`helmet`機能は、11個の小さなミドルウェアのラッパーです。言い換えれば、これら2つのことは同等です。

```javascript:sample.js
// これ...
app.use(helmet());

// ...これと同等:
app.use(helmet.contentSecurityPolicy());
app.use(helmet.dnsPrefetchControl());
app.use(helmet.expectCt());
app.use(helmet.frameguard());
app.use(helmet.hidePoweredBy());
app.use(helmet.hsts());
app.use(helmet.ieNoOpen());
app.use(helmet.noSniff());
app.use(helmet.permittedCrossDomainPolicies());
app.use(helmet.referrerPolicy());
app.use(helmet.xssFilter());
```

## [compression](https://github.com/expressjs/compression) - 2.3k Stars
compressionライブラリはNodeJS圧縮ミドルウェアです。

#### インストール方法

```
yarn add compression
```

#### 使用法
このモジュールを[Express](https://github.com/expressjs/express)または[Connect](https://github.com/senchalabs/connect)で使用する場合は、Express Middlewareで圧縮を呼び出すだけです。ミドルウェアを通過するリクエストで圧縮されます。

```javascript:sample.js
const compression = require('compression')
const express = require('express')
const app = express()
// compress all responses
app.use(compression())
// ...
```

## 参考
[12 Useful Packages Every Node.js Developer Should Know](https://medium.com/better-programming/12-useful-packages-every-node-js-developer-should-know-2746db760e)
https://note.com/DevStory