【npm】 公開設定とライセンスは正しく設定されていますか?

npmのpackage.jsonでは、初期状態では誤って公開してしまったり、フリーソフトウェアとしてのライセンスとなっています。

このままでは特に企業で利用する際にまずいので、設定を変更しましょう。

問題点

初期状態のpackage.jsonは次のようになっています。

{
    "name": "プロジェクト名",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC"
}

問題点は2つあります。

  • ライセンスがISCになっている
  • コマンド1つで公開できる

ライセンス

初期値はISCです。これは、フリーソフトウェアに用いられるライセンスになります。

最も厳しいライセンスとしたい場合、licenseの行自体を削除します。

もし公開する場合、下記に紹介する代表的なものから適切なライセンスに変更しましょう。

UNLICENSED

ほぼパブリックドメインと言えるライセンスになります。コードを利用する際に帰属を表示する必要はありませんし、コピーレフトもありません。

公式文書は下のページです。

Unlicense Yourself: Set Your Code Free

GPL

GPLは、主にフリーソフトの開発配布に用いられるライセンスで、コピーレフトがあります。

GPLなライブラリやコードなどを開発頒布するものに自由に改変し、組み込み、商用利用することができます。

OSSライセンスの1つであるため、ソースコードを誰もが自由に閲覧できるようにする義務があります。

とはいえ、社内利用で使うなど、そもそも開発物を外部に公開しない場合はその限りではないことが一般的です。

ここで、コピーレフトである必要があるということは、そのソフトを (改変を含め) 組み込んだものや、派生物にもGPLライセンスを適用する必要があるということです。

それを組み込んだものをGPLなフリーソフトとして公開する場合は問題ありませんが、商用利用する際には注意を払う必要があります。 (商用利用自体は可能です。)

まとめると、

  • 使用元の著作権表示、ライセンス条文と無保証であることを記載する必要がある
  • 複製、配布、改変が可能
  • 商用利用可能 (許諾書の修正はNG)
  • 再配布の条件を決めることができる
  • 組み込んだソフトウェアもGPLにする必要がある → 第三者に提供する場合はソースコードの開示が必要

ということになります。

実際にはもっと細かいですが、あまりに長過ぎるのでここでは省略します。

過去に、とあるゲームにGPLライセンスのものを組み込んだ結果、製品のソースコードを配布することになった事例があります。

MIT License

MIT Licenseは、GPLと比較してコピーレフトがありません。著作権表示を忘れないようにすればOKです。

  • 使用元の著作権表示、許諾表示を記載する必要がある
  • 商用利用可能
  • ソースは無制限に扱える
  • (MITとして配布する場合は) ソースを開示する必要がある

LGPL

GPLと比較して、コピーレフトが部分的になっています。

ライブラリを動的にリンクして呼び出す (dllなど) 場合、リンク元のソフトウェアにはLGPLを適用する必要はありません。これを準コピーレフトと言います。

しかし、一緒に組み込んでしまう (exeで同梱するなど) 場合、本体側にもLGPLを適用する必要があります。

ただし、改変を行った場合、その改変部分を開示する必要があります。

  • 使用元の著作権表示、ライセンス条文と無保証であることを記載する必要がある
  • 複製、配布、改変が可能だが、改変部分のコードは開示が必要
  • 商用利用可能 (許諾書の修正はNG)
  • 再配布の条件を決めることができる
  • 中に組み込むならそのソフトもLGPLに、外部に置いておいて動的に読み込むならLGPLにする必要はない
  • (LGPLとして配布する場合は) ソースを開示する必要がある

BSD

基本的にMITと似ていますが、著作権者の名前等は許可がない限り表示しない、という違いがあります。

また、3条項BSDライセンスでは、以下の条文があります。

書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織> の名前またはコントリビューターの名前を使用してはならない。

どういうことかというと、こんな製品に使われていますよ、などの形で宣伝することは、その作者等の許可を得ない限りNGということです。

  • 使用元の著作権表示、許諾表示を記載する必要がある
  • 商用利用可能
  • ソースは無制限に扱える
  • 派生物を使って、自分のもの宣伝するのは許可を得ない限りNG (3条項BSDライセンスの場合のみ)
  • (BSDとして配布する場合は) ソースを開示する必要がある

2条項BSDライセンスでは、派生云々の条文が削除されています。

公開設定

そのままでは、npm publish ./などとすると公開できてしまいます。

これを防ぐには、"private": trueを追加します。

{
    "name": "プロジェクト名",
    // ...
    "private": true
  }
  

何ならnameやauthor、descriptionあたりも公開しないなら不要です。nameがなければprivateを設定せずとも公開はできないですが… 削除してしまって問題ありません。

まとめ

特に企業で作成する場合、ライセンスには注意する必要があります。同時に誤って公開しないよう、予め設定を整えておきましょう。

npm ricense thumb

役に立ったらシェアしよう!