JavaScriptに関するお知らせ

SINCE2019
>
【JS】packages.jsonのprivate:trueは不要かも

【JS】packages.jsonのprivate:trueは不要かも



こんにちは!JavaScriptのパッケージ管理の行く末がすごく気になるMizutani(@sirycity)です。どうなるんだろ?

  • npmに回帰する
  • yarn2が覇権を握る
  • pnpmが台頭
  • denoが普及して↑のやつ全部衰退
  • 全く新しい何かが出てくる

今回はそんなJSのパッケージ管理のファイル、packages.jsonに設定するprivate:trueは不要じゃない?って話です。

はじめに結論

確かに不要だけど別に書いときゃいいんじゃないかな

基礎知識

npmとは

JSのパッケージマネージャー。かんたんに言うとライブラリ管理するやつ。みんな使うよね。

packages.jsonとは

npmでどのライブラリを使ってるかがひと目で分かる便利ファイルです。

...いや他にもいろんな機能があるんだけど、メイン機能はライブラリ管理。

npmの他の機能

npmはライブラリを管理するだけじゃなくてライブラリを公開する時にも使います。こっちの機能は使わない人も多いんじゃないかな。

「ライブラリを公開ってどういうこと?」って思うよね。公開してるのはGitHubじゃないの?って思うよね。JSのライブラリはGitHubで開発してnpmで公開みたいにしてる例も多いです。例えばこんな感じ(この辺ちょっと間違ってたらごめん)

ライブラリを作る人はGitHubにコミットして、ライブラリを公開する時にnpmにリリース。んでライブラリを使う人はnpmからインストール。みたいな感じ。

たいていの人はライブラリを作ったりしない?

実際そうだよね。npmをライブラリ管理にだけ使って、ライブラリ公開になんて使わない人がほとんどだと思います。

なので、npmは後者(ライブラリ公開)の機能だけを無効化する設定があります。それがこちら。

{
  "private": true
}

こんだけ。これをpackages.jsonに書くだけ。これでnpm使ってライブラリ公開はできなくなる。

なぜこんな設定があるの?

だって、npmでライブラリ公開するのってコマンド1つなんですよ。npm publishってこんだけ。省略コマンドもあるし。

逆に言うと公開したくないコードがなんかの拍子に押し間違えて公開されちゃったりする可能性も...なくはないわけです。その対策。

このprivate: trueの設定はweb開発の際にはわりと当たり前のように書かれてたりします。例えばこんな感じに。

{
  "private": true,
  "name": "foo",
  "version": "1.0.0",
  "description": "foo",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "foo",
  "license": "MIT",
  "dependencies": {},
  "devDependencies": {}
}

でも、privateは不要じゃない?

ここまで言っといてなんですが、別にprivate:trueは不要じゃない? と思えます。

理由

間違って公開しないようにprivate:trueを書いてるんだから、要は誤公開を防止できれば別の方法でも良いわけです。その方法とは...

nameを書かない。

そう、nameを書かない。nameを書かなければそもそもnpmにライブラリを公開できません

もうちょい詳しく言うと、nameとversionのどっちかが抜けてると公開できません。んで、nameとかversionの欄は正直ライブラリ管理の用途としては不要です

...一応nameとか書いておくとnodeの環境変数として参照できたりするんですが、日本語が使えないので定数としては使い勝手が悪いです。

nameも、versionも、privateも。全部消しちゃいましょ。こんな感じに。

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "dependencies": {},
  "devDependencies": {}
}

scripts、dependencies、devDependencies。この3つだけでもとりあえず動きます。ライブラリによっては警告されるけどね。

さいごに

そこまでしてprivateを消す意味とは...特にないです。まあでも、情報量が少ない方が見やすいよね?(苦し紛れ)

本日は以上です。ご清聴ありがとうございました。



PREV
2021-07-11
Slackに予約投稿機能ができて嬉しいけどそれでもまだ少し不満な理由【追記あり】