[第9回] Node.js NPM

Node.js

 

はじめに

 

皆さん。こんにちは! DreamHanksのエルムです。

今回はNode.js NPMについて説明していきます。

前回の記事は[第8回] Node.js イベントエミッターです。

 

NPMとは?

 

NPMとは、Node Package Managerの略です。NPMは、完全にJavaScriptで書かれたNode.jsのデフォルトのパッケージ・マネージャーです。2010年にIsaac Z. Schlueterによって開発され、市場にリリースされました。それ以来、Node.jsのすべてのパッケージとモジュールを管理する役割を担っています。完全にフリーでオープンソースの世界最大のソフトウェアレジストリであり、開発者は世界中のソフトウェアを共有するためにこのレジストリを使用しています。

 

NPMの主な機能は以下の2つです。

  1. Node.jsのパッケージ/モジュールのオンラインリポジトリを提供します。
  2. 開発者がシステムをローカルに操作するのに役立つコマンドラインインターフェース(CLI)も提供されています。

 

一つ覚えておいていただきたいのは、Node.jsのプロジェクトで必要なパッケージやモジュールは、NPMを使ってインストールする必要があるということです。これ以外にも、npmが使用されている機能はたくさんあります。このNode.js NPMチュートリアルの次のセクションでは、それらすべてについてお話します。

 

NPMの必要性について

 

既に述べたように、NPMは様々な目的で使用されます。以下に、最も基本的なものを挙げてみました。

  • 構築済みのパッケージをプロジェクトに組み込む際に役立ちます。
  • すぐに使える様々なスタンドアロンツールのダウンロードをサポートします。
  • npxを使えば、パッケージをダウンロードせずに実行することもできます。
  • 開発者は、自分のコードを世界中のNPMユーザーと共有するためにNPMを使用することがよくあります。
  • パッケージのメンテナンス、開発者、コーディングを調整するための様々な組織を作ります。
  • コードを特定の開発者に限定したり、Orgsを使ってバーチャルチームを形成するのにも役立ちます。
  • 様々なバージョンのコードとその依存関係を管理・維持するのに役立ちます。
  • NPMは、基礎となるコードの更新に合わせてアプリケーションを自動的に更新します。
  • これは、同じようなプロジェクトやタスクに取り組んでいる他の開発者を見つけることができるコミュニティのようなものです。

 

Node.jsプロジェクトになぜNPMが必要なのかがわかったところで、NPMの基礎知識を掘り下げていきましょう。まず最初に、npmパッケージやモジュールとは何かを理解しましょう。

 

NPMパッケージ

 

パッケージとは、独立した論理的単位にまとめられたコード群のことです。パッケージは、開発者にとって、複雑さを抽象化し、コードサイズを縮小するのに役立つ便利なツールです。約80万以上の既製のコードパッケージがあり、それぞれが異なる機能を持っています。NPMは、Node.jsアプリケーションの開発をサポートするために、これらすべてのパッケージを保持するライブラリの一種です。

 

NPMのインストール

 

NPMは、Node.jsのデフォルトパッケージとして含まれています。そのため、明示的にインストールする必要はありません。Node.jsをシステムにインストールする方法については、「Node.jsのインストール」の記事を参照してください。

 

NPMがすでにシステムに組み込まれているかどうかを確認するには、以下のコマンドを入力する必要があります。

 

NPMのインストールが終わったところで、NPM CLI(Command Line Interface)を使ってパッケージをインストール、アップデート、削除する方法を紹介します。しかし、パッケージのインストールやダウンロードを始める前に知っておくべきことは、パッケージは2つの方法でインストールできるということです。

 

ローカル&グローバルパッケージ

 

先に述べたように、パッケージはそのインストール方法によって2つのカテゴリーに分類されます。

  1. ローカルパッケージ
  2. グローバルパッケージ

 

ローカルパッケージ

 

これらのパッケージは、install コマンドを実行するディレクトリ内にインストールされ、自分のプロジェクトからのみアクセス可能となります。ローカルパッケージは、プロジェクトのメインディレクトリの下にあるnode_modulesフォルダに格納されます。

 

以下は、パッケージをローカルにインストールするためのコマンドです:

 

グローバルパッケージ

 

これらのパッケージは、runコマンドを実行した場所に関わらず、システムの一箇所にインストールされます。これらのパッケージは、システム内のどのプロジェクトでも使用できるため、グローバルパッケージと呼ばれています。パッケージをグローバルにインストールするには、以下のようなコマンドが必要です。

 

ローカルパッケージとグローバルパッケージの大きな違いは、グローバルパッケージはシェルからのアクセスが必要なものに使われるということです。一方、ローカルパッケージの使用は、通常、自分のアプリケーションやプロジェクトに限られます。しかし、一般的には、パッケージをローカルにインストールするのは良い方法です。これは、システム内に複数のNode.jsプロジェクトがあり、それらで使用されている各パッケージのバージョンが異なる場合があるためです。

 

グローバルパッケージを更新すると、システムで使用されているすべてのプロジェクトで更新されます。これは、これらのパッケージのいくつかが、プロジェクトで使用されている他の依存関係と互換性がないため、大きな災害を引き起こす可能性があります。しかし、ローカルパッケージの場合は、常に自分のバージョンのパッケージを保持し、自分のニーズに合わせてアップデートすることができます。リソースの利用という点では、メモリの無駄遣いのように見えるかもしれませんが、悪影響は比較的少ないと思います。

パッケージのグローバル化は、そのパッケージがCLI実行可能コマンドを持ち、システム内のプロジェクト全体で再利用できる場合にのみ行うべきです。

 

以下のコマンドを入力することで、システム内にあるグローバルパッケージの数を確認することができます。

 

システムからパッケージを削除したい場合は、以下のコマンドを入力してください。

 

パッケージをインストールする際には、必ず「-save」フラグを付けてインストールすることです。

 

これにより、要求されたモジュールがpackage.jsonファイルに追加されていることが確認できます。

 

Package.jsonファイル

 

Node.jsのpackage.jsonファイルは、アプリケーションの心臓部と考えられています。このファイルは、プロジェクトのメタデータを保持するマニフェスト・ファイルに他なりません。Nodeプロジェクトを動かすためには、このファイルを理解することが非常に重要です。package.jsonファイルは、通常、Node.jsアプリケーションのルートフォルダにあり、以下のような形をしています。

 

 

上記のコードでお分かりのように、package.jsonファイルには、プロジェクトで使用される様々なプロパティの定義が含まれています。これらのプロパティを詳しく理解し、Node.jsプロジェクトでなぜ重要なのかを見ていきましょう。

 

  1. Name: ユーザーから提供されたプロジェクトの名前を保持します。
  2. Version: アプリケーションのバージョンを表すもので、セマンティック・バージョニングのルールに従わなければなりません。
  3. Description: アプリケーションの説明や目的、ReactやMongoDBなどの使用されている技術について記載します。
  4. Main: アプリケーションのエントリーポイント/ファイルを指します。
  5. Scripts: アプリケーションが正しく実行されるために必要なスクリプトのリストが含まれています。
  6. Author: プロジェクトの主な開発者の名前を保持します。
  7. License: このキーバリューペアには、アプリケーションが確認するライセンスが記載されています。
  8. Dependencies: NPMを使ってインストールされたサードパーティのパッケージやモジュールの一覧を表示します。
  9. DevDependencies: アプリの開発部分でのみ使用される依存関係をここで指定します。
  10. Repository: アプリケーションのコードが格納されているリポジトリの種類とURLに関する情報が含まれています。
  11. Bugs: アプリケーションのバグを報告するためのURLと電子メールはここに記載されています。

 

以上で、今回のNode.js NPMチュートリアルを終了したいと思います。NPMとは何か、そしてNPMがNode.jsアプリケーションの構築にどのように役立つのか、ご理解いただけましたでしょうか。

 

終わりに

 

今回の記事は以上になります。

ご覧いただきありがとうございます。

 

 

 

コメント