Node.js には npm という便利なパッケージ管理ツールがあります。これはプロジェクト内に package.json というファイルを用意し、その中にプロジェクトで利用したいオープンソースライブラリを記述しておくだけで、後は
ただ実行環境を揃えるだけならこのように簡単なのですが、どのようなライブラリがインストールされることになり、そしてそれぞれのライブラリはどのような種類のオープンソースライセンスのもとで配布されているのか、を改めて調べようとするとちと面倒なことになります。まず上述のように導入されるライブラリは package.json に記述されたものだけではなく、それらが必要とするライブラリや、更にそれらが必要とするライブラリ・・・と、再帰的に含まれるので、小さなプロジェクトでも実際に調べる対象となるライブラリの数は膨大になってしまいます。試しに先程ウェブフレームワークとして有名な express(v4.17.1) だけを指定して npm install してみたところ、express 自身も含めて 49 個ものライブラリがインストールされました:
なので express だけを使うプロジェクトであっても、利用するオープンソースライブラリのライセンスを調べるには、これら 49 個のライブラリそれぞれのライセンスを調べる必要がある、ということになります。
これはさすがに面倒・・・ということで、まとめて調べるツールを作ってみました:
https://github.com/dotnsf/licenses
このツールはローカルファイルシステム内のプロジェクトフォルダ(ディレクトリ)を指定して、そのプロジェクトの中で使われるオープンソースライブラリを調べて一覧表示します。ウェブの UI をもたせることも考えたのですが、ローカルファイルシステムを指定するということは対象プロジェクトのソースコード一式をローカルシステム内に(ダウンロードなり git clone なりで)取得しているということになるので、GUI がなくても使える人が大半だろう、、、と思って付けませんでした。GUI でパイチャートとか付けたい人は改造しちゃってください。なおこのツール自体は MIT ライセンスです。
利用するにはまず上記プロジェクトをダウンロードか git clone します。実質的に licences.js だけを使います。そしてこのファイルの3行目あたりにある target_folder 変数の値を調査対象とするプロジェクトのフォルダとなるよう書き換えてください(例: "../myproject" など)。
そして Node.js で実行します:
成功すると target_folder で指定したフォルダ内の node_modules/ サブフォルダの中を調べ、更に導入済みライブラリのサブフォルダを調べて各ライブラリ毎に配布ライセンスを推測します。そして全てのライブラリを調べ終わったら、結果を一覧表示します(下は例、赤字はコメント):
これでいちいちフォルダ毎に調べなくても依存ライブラリのライセンスがわかります。たぶん。
と実行するだけでそれらのオープンソースライブラリをまとめてインストールしてくれる、という機能があるのです。しかもその記述されたライブラリだけでなく、それらのライブラリが必要とするライブラリもまとめて調べ、まだインストールされていないものがあればそれだけを(2重にインストールしたりせずに)選別してインストールしてくれる、というものです。要するに深く考えずに npm install すれば、そのプロジェクトの実行に必要なライブラリがまとめてインストールすることができるようになります。$ npm install
ただ実行環境を揃えるだけならこのように簡単なのですが、どのようなライブラリがインストールされることになり、そしてそれぞれのライブラリはどのような種類のオープンソースライセンスのもとで配布されているのか、を改めて調べようとするとちと面倒なことになります。まず上述のように導入されるライブラリは package.json に記述されたものだけではなく、それらが必要とするライブラリや、更にそれらが必要とするライブラリ・・・と、再帰的に含まれるので、小さなプロジェクトでも実際に調べる対象となるライブラリの数は膨大になってしまいます。試しに先程ウェブフレームワークとして有名な express(v4.17.1) だけを指定して npm install してみたところ、express 自身も含めて 49 個ものライブラリがインストールされました:
なので express だけを使うプロジェクトであっても、利用するオープンソースライブラリのライセンスを調べるには、これら 49 個のライブラリそれぞれのライセンスを調べる必要がある、ということになります。
これはさすがに面倒・・・ということで、まとめて調べるツールを作ってみました:
https://github.com/dotnsf/licenses
このツールはローカルファイルシステム内のプロジェクトフォルダ(ディレクトリ)を指定して、そのプロジェクトの中で使われるオープンソースライブラリを調べて一覧表示します。ウェブの UI をもたせることも考えたのですが、ローカルファイルシステムを指定するということは対象プロジェクトのソースコード一式をローカルシステム内に(ダウンロードなり git clone なりで)取得しているということになるので、GUI がなくても使える人が大半だろう、、、と思って付けませんでした。GUI でパイチャートとか付けたい人は改造しちゃってください。なおこのツール自体は MIT ライセンスです。
利用するにはまず上記プロジェクトをダウンロードか git clone します。実質的に licences.js だけを使います。そしてこのファイルの3行目あたりにある target_folder 変数の値を調査対象とするプロジェクトのフォルダとなるよう書き換えてください(例: "../myproject" など)。
そして Node.js で実行します:
$ node licenses
成功すると target_folder で指定したフォルダ内の node_modules/ サブフォルダの中を調べ、更に導入済みライブラリのサブフォルダを調べて各ライブラリ毎に配布ライセンスを推測します。そして全てのライブラリを調べ終わったら、結果を一覧表示します(下は例、赤字はコメント):
$ node licenses target_folder = '../myproject' 対象フォルダ名 MIT: 73.52% MITライセンスが73.52% [ 'accepts', MIT ライセンスと推測されたライブラリ一覧 'abbrev', 'append-field', : ] ISC: 21.32% ISCライセンスが21.32% [ 'are-we-there-yet', ISCライセンスと推測されたライブラリ一覧 'chownr', 'console-control-strings', : ] Apache: 4.41% Apacheライセンスが4.41% [ 'detect-libc', Apacheライセンスと推測されたライブラリ一覧 'ejs', 'cfenv', : ] BSD: 0.73% BSDライセンスが0.73% [ 'esprima' ] BSDライセンスと推測されたライブラリ一覧
これでいちいちフォルダ毎に調べなくても依存ライブラリのライセンスがわかります。たぶん。