package.jsonの内容をまとめてみました

# **はじめに**
package.jsonのフィールドについて調べました。やや英語の直訳になっている箇所がありますので、ご指摘等いただけますと幸いです。

# **必須**
- name
- version

この二つのフィールドがないとパッケージをインストールすることはできません。`name`と`version`は共に単一なidを作成するために使われます。

# `name`
~~~json
{
  "name": "my-new-package"
}
~~~
パッケージ名。`name`はURLやコマンドラインの引数、`node_modules`に記述されるディレクトリ名として使われます。

**■規約**

+ 214文字以下(`@scope/`を含む)
+ 一文字目は「.(ドット)」「_(アンダースコア)」以外
+ 大文字は禁止
+ URLで使用可能な文字、記号

**■TIPS**

+ Node.jsのコアモジュール (`/bin`内に置かれているモジュール)と同じ名前は使えない
+ `js`または`node`は使えない
+ `name`が何を意味するかわかるような短い名前をつける
+ レジストリ内に同じ名前が存在しない

# `version`
~~~json
{
  "version": "1.0.0"
}
~~~
現在のパッケージのバージョン。

# `description`
~~~json
{
  "description": "this package is about managing money"
}
~~~
パッケージの目的を示すための文字列。パッケージマネージャ内でパッケージを探す時にも使われる。

# `keywords`
~~~json
{
  "keywords": ["cryptocurrency", "bill", "coin", "mile"]
}
~~~
String型の配列で、`description`と同様にパッケージマネージャ内でパッケージを探す時に役に立つ。

# `license`
~~~json
{
  "license": "MIT",
  "license": "(MIT or GPL-3.0)",
  "license": "SEE LICENSE IN LICENSE_FILENAME.txt",
  "license": "UNLICENSED"
}
~~~
特別な理由がなければ[OSI](https://opensource.org/licenses/alphabetical)に記載されているものを使用すること。
次のうち、当てはまる条件のものを記述しなければならない。

- 標準ライセンスを一つ使用する場合は、[SPDX license identifier](https://spdx.org/licenses/)
- 標準ライセンスを複数使用する場合は、[SPDX license expression syntax 2.0 expression](https://www.npmjs.com/package/spdx)
- 非標準ライセンスを使用する場合は、`SEE LICENSE IN <filename>`
- private、あるいは非公開パッケージを使う権利を与えたくない場合は、`UNLICENSED`

# `homepage`
~~~json
{
  "homepage": "https://your-package.org"
}
~~~
トップページ、あるいはパッケージのドキュメントがあるURLを記述。

# `bugs`
~~~json
{
  "bugs": "https://github.com/user/repo/issues"
}
~~~
ユーザーがパッケージの問題点を発見した際に、その問題点を共有するためのURLを記述。GitHubのパスやメールアドレスなどを指定します。

# `repository`
~~~json
{
  "repository": { "type": "git", "url": "https://github.com/user/repo.git" },
  "repository": "github:user/repo",
  "repository": "gitlab:user/repo",
  "repository": "bitbucket:user/repo",
  "repository": "gist:a1b2c3d4e5f"
}
~~~
パッケージの実際のコードが存在する場所を記述。

# `author`
~~~json
{
  "author": {
    "name": "Your Name",
    "email": "you@example.com",
    "url": "http://your-website.com"
  },
  "author": "Your Name <you@example.com> (http://your-website.com)"
}
~~~
auther情報を記述。autherは一人です。

# `contributors`
~~~json
{
  "contributors": [
    { "name": "Your Friend", "email": "friend@example.com", "url": "http://friends-website.com" }
    { "name": "Other Friend", "email": "other@example.com", "url": "http://other-website.com" }
  ],
  "contributors": [
    "Your Friend <friend@example.com> (http://friends-website.com)",
    "Other Friend <other@example.com> (http://other-website.com)"
  ]
}
~~~
パッケージ作成に関わった人を記述。配列で記述します。

# `files`
~~~json
{
  "files": ["filename.js", "directory/", "glob/*.{js,json}"]
}
~~~
プロジェクトに含まれるファイルを記述。ファイル名、ディレクトリ名、ワイルドカードを使用したファイル名を記述します。

# `main`
~~~json
{
  "main": "filename.js"
}
~~~
プロジェクトの主エントリーを記述。

# `bin`
~~~json
{
  "bin": "bin.js",
  "bin": {
    "command-name": "bin/command-name.js",
    "other-command": "bin/other-command"
  }
}
~~~
実行可能なファイルを記述。

# `man`
~~~json
{
  "man": "./man/doc.1",
  "man": ["./man/doc.1", "./man/doc.2"]
}
~~~
プロジェクトに関するマニュアルページがある場合は記述。

# `directories`
~~~json
{
  "directories": {
    "lib": "path/to/lib/",
    "bin": "path/to/bin/",
    "man": "path/to/man/",
    "doc": "path/to/doc/",
    "example": "path/to/example/"
  }
}
~~~
バイナリファイル、マニュアルページ、ドキュメント、exampleの実際の格納場所を記述。

# `scripts`
~~~json
{
  "scripts": {
    "build-project": "node build-project.js"
  }
}
~~~
パッケージに関連したタスクを自動化するのに役立つ。`yarn run <script>`で実行される様々なスクリプトを定義することが可能。

# `config`
~~~json
{
  "config": {
    "port": "8080"
  }
}
~~~
`scripts`で使用される構成オプションやパラメータなどを記述。

# `dependencies`
~~~json
{
  "dependencies": {
    "package-1": "^3.1.4"
  }
}
~~~
開発や製品に必要な依存関係を記述。正しいバージョン(最も小さいバージョンまで、あるいはバージョンの範囲)を記述します。

# `devDependencies`
~~~json
{
  "devDependencies": {
    "package-2": "^0.4.2"
  }
}
~~~
インストールはされないが、開発する際に必要なものを記述。

# `peerDependencies`
~~~json
{
  "peerDependencies": {
    "package-3": "^2.7.18"
  }
}
~~~
他のパッケージとの互換性を記述。

# `optionalDependencies`
~~~json
{
  "optionalDependencies": {
    "package-5": "^1.6.1"
  }
}
~~~
パッケージとともに使われるが、必要なものではない。記述がなくてもインストール作業に影響はない。

# `bundledDependencies`
~~~json
{
  "bundledDependencies": ["package-4"]
}
~~~
パッケージ公開時に、まとめられるパッケージを配列にして記述。

# `flat`
~~~
~~~

# `resolutions`
~~~
~~~

# `System`
~~~
~~~

# `engines`
~~~
~~~

# `os`
~~~
~~~

# `cpu`
~~~
~~~

# `private`
~~~
~~~

# `publishConfig`
~~~
~~~

# 参考文献
[package.json](https://yarnpkg.com/lang/en/docs/package-json/)