In this article
Node.jsのライセンスとセキュリティに関する考慮事項
Node.jsランタイム環境は、動的なサーバーサイドWebアプリケーションの構築を必要とするチームの間で普及が進んでいます。現在はOpenJS Foundationがメンテナンスしており、約2,500人のコントリビューターを擁するNode.jsは、これまでに10億回以上ダウンロードされている、最も急速に成長しているオープンソースプロジェクトです。
2009年のリリース以来、多くの大手組織がエンタープライズアプリケーションの構築やアプリケーションパフォーマンスの向上にNode.jsを活用しています。その一例がPayPalです。Node.jsの導入により、ページの応答時間を約35%短縮しました。ほかにもIBM、NASA、Uber、Netflix、さらにはMicrosoftがNode.jsを利用しています。
Webサーバー開発で好まれる言語になりつつあるNode.jsですが、利用にあたってはライセンスとセキュリティに関する考慮事項を把握しておく必要があります。
Node.jsのライセンスとは?
Node.jsのメインライブラリには、制限の少ないMITライセンスが適用されています。外部でメンテナンスされていないNode.jsモジュールのすべての部分に、MITライセンスが適用されます。
残りのサードパーティライブラリには、Zero Clause BSDライセンスやISCライセンスなどが適用されます。ライセンスファイルの全文はこちらから確認できます。
これらのライセンスでは、コントリビューターを補償する一方で、著作権表示を条件に、誰でもいつでもソフトウェアを使用、変更、再配布できます。GNU GPLと比べて、MITライセンスでは、ソフトウェアを再配布する際に開発者が独自のソースコードを公開する必要はありません。
Node.jsのライセンスとセキュリティには、どのようなリスクがありますか?
Node.jsではパッケージマネージャーのnpmを使用し、100万以上のパッケージを利用できます。Node.jsの開発者コミュニティは非常に活発で、2019年までにnpmプラットフォームは250%成長しました。Node.jsのセキュリティに関する開発者の課題の一つは、本番環境で使用するすべてのパッケージとその依存関係が、定期的に更新・修正されるようにすることです。
開発者は、新たに発見された脆弱性がないか、すべてのパッケージ依存関係を頻繁に監査する必要があります。新機能を開発する際は、安全なパッケージを使用し、コードのリリース前に既知の脆弱性にパッチを適用することが重要です。
Node.jsのライセンスのうち、どの程度がオープンソースですか?
Node.jsのライセンスモデルは、コードベースをフォークして独自のサーバーサイドのコードを構築し、必要に応じて依存パッケージだけを更新できるため、企業に広く支持されています。制限の少ないライセンスを採用すれば、GNU GPLのコピーレフト原則とは異なり、将来的にコードベースをプロプライエタリにする選択肢がチームに与えられます。
ライセンスの観点では、npmにはGPLが適用されるパッケージも多数あるため、開発者は各パッケージがどのソフトウェアライセンスを使用しているかを把握する必要があります。場合によっては、開発者が同じパッケージを商用ライセンスで提供しており、そのライセンスによってGPLv3の互恵条項の適用を回避できます。
Node.jsのライセンスモデルには、どのようなメリットがありますか?
制限の少ないライセンスとコピーレフトライセンスをめぐる議論は続くでしょう。しかしNode.jsは、商業的な利益が必ずしもコラボレーションの妨げにならないことを示しているようです。NASAのような高度な機密環境で業務を行うチームにとって、Node.jsとnpmエコシステムは価値あるリソースであることが実証されています。ソースコードをすべて公開するかどうかを各チームが決められるモデルにより、Node.jsはユーザーに最大限の自由を提供します。
Node.jsを使った開発には、次のようなメリットもあります。
サーバーサイドのJavaScriptプログラミング環境を提供
水平・垂直の両方向で高い拡張性を維持
フロントエンドとバックエンドのアプリケーションで、開発者が単一のプログラミング言語を使用可能
ノンブロッキングI/O処理によりアプリケーションのパフォーマンスを向上
Node.js Foundationの代表者を含む業界リーダーからのサポート
Node.jsのライセンス対象パッケージを商用ソフトウェアで使用できますか?
チームはNode.jsをダウンロードして変更した後、いつでもそのソフトウェアの独自バージョンに著作権を設定し、自らの成果物により制限の厳しいライセンスを適用できます。
Node.jsプロジェクトの大半はオープンソースのままであり、企業はフレームワーク、ライブラリ、ツールにNode.jsを利用しています。npmから取得したパッケージを使用するチームは、意図した場合を除き、いずれのモジュールにも互恵ライセンスが含まれていないことを確認する必要があります。依存するパッケージとモジュールはすべて、MITライセンスまたはISCライセンスを含むBSD系ライセンスのいずれかに準拠している必要があります。
Node.jsのライセンスをどのように利用しますか?
Node.jsライブラリを基盤として構築されたコンポーネントは、配布時に利用可能なソフトウェアライセンスのいずれでも使用できます。コントリビューターは、後続のユーザーが将来、自身のソフトウェアについて自由に判断できるよう、制限の少ないライセンスを選ぶ傾向があります。チームがほかのパッケージに依存するようになったら、それらのモジュールに含まれる制限にも準拠していることを確認する必要があります。
npmには、プロジェクト内のすべてのファイルにライセンステキストを追加する専用コマンドがあります。開発者はライセンス名と著作者名を指定できます。互換性のあるライセンスの一覧はこちらで確認できます。
Node.jsはパッケージのセキュリティリスクにどのように対処しますか?
開発者やセキュリティチームが新たな脆弱性を発見すると、Node.jsはセキュリティアップデートを含むバージョンをリリースします。場合によっては、手動でパッチを適用する必要があります。開発者はauditコマンドを使ってパッケージの脆弱性を頻繁に確認する必要があります。このコマンドを実行すると、セキュリティ上の問題に対する推奨修正が提示されます。
Snykでコードベースの依存関係を管理
本番環境で稼働するすべてのプロジェクトで、すべての依存関係を対象に、脆弱性とライセンスの定期的な監査を実施する必要があります。
Snykを使えば、チームはすべての依存関係をスキャンし、プロジェクト全体を通じてライセンスコンプライアンスを管理できます。Node.jsの開発チームは、すべてのパッケージを明確に把握し、プロジェクトのあらゆる段階でライセンスへの準拠を確認することで、コードベースに重大な問題が入り込むのを防げます。