npm:基礎、React NativeとNode.jsのパッケージマネージャー

著者: IT Sectr 公開日: 2026-02-13 読了時間: 10 分

npm(Node Package Manager)はNode.jsプラットフォームの標準パッケージマネージャーであり、Node.jsのインストールに含まれています。npmはJavaScriptおよびTypeScriptプロジェクトの依存関係を管理します:ライブラリをnode_modulesにインストールし、パッケージバージョンを更新し、バージョンの競合を解決します。package.jsonはメタデータと依存関係リストを含む中心的な設定ファイルです。npm Registryは最大のパッケージレジストリです。詳細はnpm Registryをご覧ください。

重要なポイント

  • npm — Node.jsの標準パッケージマネージャー、バージョン0.6.3からNode.jsに同梱
  • package.json — 依存関係、スクリプト、メタデータを含むプロジェクト設定ファイル
  • npm install — package.jsonからnode_modulesフォルダに依存関係をインストールする基本コマンド
  • package-lock.json — すべての環境で再現可能なインストールのための正確なバージョンロックファイル
  • npm ci — ロックファイルを更新せずに厳密にそれに従ってパッケージをインストールするCI/CDコマンド

npmとは — Node.jsパッケージマネージャー

npmは2010年にIsaac SchlueterによってNode.jsの依存関係管理ソリューションとして作成されました。2014年からnpmはnpm, Inc.によって管理されており、2020年にMicrosoft/GitHubに買収されました。このツールは2つの部分で構成されています:パッケージをインストールおよび管理するためのCLI(コマンドライン)と、registry.npmjs.orgにあるすべての公開モジュールの中央リポジトリであるRegistryです。

npm Registryは最大のパッケージレジストリです:200万以上のパッケージと月間100億以上のダウンロードがあります。各パッケージにはSemVerバージョン、説明、依存関係、ライセンス、作者情報があります。独自のパッケージの公開はnpm publishを介して行います。npmは組織向けのスコープ付きパッケージ(@scope/package)、プライベートレジストリ、組み込みのセキュリティ監査をサポートしています。

Node.jsバージョン18+には、パフォーマンスが向上したnpm 9+、モノレポ用のワークスペース、および再設計されたピア依存関係メカニズムが含まれています。npmエコシステムは、サーバーサイドJavaScript、フロントエンド(React、Vue、Angular)、モバイル開発(React Native)、ビルドツール(Webpack、Vite)、CLIユーティリティをカバーしています。npmはJavaScriptライブラリの主要な配布チャネルです。

npmの主な機能

npm install — package.jsonとpackage-lock.jsonを読み取り、すべての依存関係をnode_modulesにインストールするメインコマンドです。初回実行時に、npmは依存関係グラフを計算し、バージョンの競合を解決し、package-lock.jsonを生成します。npm install <package>コマンドは特定のパッケージをインストールし、--save-devフラグはdevDependenciesに追加し、--globalはグローバルにインストールします。

npx — npmバージョン5.2から含まれているパッケージランナーです。npxを使用すると、グローバルインストールなしでCLIユーティリティを実行できます:npx react-native initnpx create-react-app my-appなど。npxはパッケージを一時キャッシュにダウンロードし、実行し、完了後にクリーンアップします。npxは特定のバージョンのツールを実行するのにも便利です。

npm auditはnpmデータベースから既知の脆弱性について依存関係ツリーをスキャンします。コマンドは重要度レベル(critical、high、moderate)のレポートを出力し、脆弱なパッケージを自動的に更新するためにnpm audit fixを推奨します。npm cacheはダウンロードしたパッケージをローカルに保存します。npm cache clean --forceはインストールの問題がある場合にキャッシュをクリアします。npm outdatedは古いパッケージを表示します。

bash
# npmの基本コマンド
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# グローバルインストールなしで実行
$ npx react-native init MyApp
# セキュリティ監査
$ npm audit --fix

package.jsonの構造と依存関係管理

package.jsonはプロジェクトルートにあるJSONファイルで、そのメタデータ、依存関係、設定を記述します。必須フィールド:name(一意のパッケージ名)とversion(SemVerバージョン、例:1.0.0)。ファイルはnpm init -yでクイック初期化するか、手動で作成します。

Semantic Versioning(SemVer)はMAJOR.MINOR.PATCH形式のバージョニング標準です。メジャーバージョンは互換性のないAPI変更時に、マイナーは機能追加時(下位互換性あり)、パッチはバグ修正時に変更されます。バージョン前の^記号はマイナーおよびパッチ更新を許可し、~はパッチ更新のみを許可します。

json
{
  "name": "my-app",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios"
  },
  "dependencies": {
    "react": "^18.3.0",
    "react-native": "^0.76.0"
  },
  "devDependencies": {
    "typescript": "^5.5.0",
    "@types/react": "^18.3.0"
  }
}
フィールド目的値の例
scriptsnpm runの実行コマンド"start": "node index.js"
dependenciesアプリケーションの本番依存関係"react": "^18.3.0"
devDependencies開発およびテストツール"jest": "^29.7.0"
peerDependenciesライブラリのホスト依存関係"react": ">=17.0.0"
enginesNode.jsのバージョン要件{"node": ">=18.0.0"}

React Native開発におけるnpm

React Nativeプロジェクトは依存関係管理にnpmを積極的に使用しています。標準セットにはreactreact-native、ナビゲーションライブラリ(React Navigation)、HTTPライブラリ(axios)、状態管理(Redux、Zustand)、UIコンポーネントが含まれます。npmを使用すると、レジストリから数千の互換性のあるパッケージをインストールできます。

npx pod-install — iOS用のReact Nativeでネイティブモジュールをインストールした後の必須コマンドです。npmはpackage-lock.jsonに基づいてPodfile.lockを自動生成します。Expoプロジェクトでは、npm installの代わりにexpo installが使用されます。これは現在のExpo SDKバージョンと互換性のあるバージョンを選択するためです。

バージョンの競合はReact Nativeで一般的な問題です:react-native-reanimated、react-native-gesture-handler、react-native-safe-area-contextは整合性のあるバージョンを必要とします。解決策は、すべてのパッケージを最新の互換バージョンに更新するか、--legacy-peer-depsを使用することです。package-lock.jsonは、CocoaPodsやGradleを介してコンパイルされるネイティブモジュールにとって重要です。

npmと代替マネージャーの比較

npmはNode.jsに同梱されている標準パッケージマネージャーです。主な代替手段:yarn(2016年にFacebookが作成)とpnpm(高速、ハードリンクを使用)。npm 5以降、npmとyarnの速度と機能の差は最小限です。npm 7+はワークスペースを追加し、モノレポで競争力を持つようになりました。

特徴npmyarnpnpm
作成年201020162017
ロックファイルpackage-lock.jsonyarn.lockpnpm-lock.yaml
インストール順次(npm 5+)並列並列
ディスク容量標準標準最小(リンク)
ワークスペースあり(npm 7+)ありあり
Plug'n'Playなしありなし

State of JS 2025によると:62%の開発者がnpmを使用し、35%がyarn(主に古いプロジェクトとPnP愛好家)、3%がpnpmを使用しています。React Nativeプロジェクトでは、両方のツールが同等に viable ですが、npmはExpo SDK 50+および新しいReact Native初期化を使用するプロジェクトでより一般的です。

yarnは、より成熟したワークスペース実装とPlug'n'Playにより、非常に大規模なモノレポ(100+パッケージ)で優位性を維持しています。pnpmはグローバルストアへのハードリンクによるディスク容量の節約で勝っています。マネージャーの選択はチームの好みとインフラストラクチャに依存します。

よくある質問

npm installとnpm ciの違いは何ですか?

npm installはpackage-lock.jsonを更新し、セマンティック範囲内で新しいマイナーバージョンをインストールする可能性があります。npm ci(Clean Install)はnode_modulesを削除し、package-lock.jsonから厳密にパッケージをインストールして更新しません。npm ciは高速で、CI/CDで使用され、すべてのマシンで同一の環境を保証します。package-lock.jsonがない場合、npm ciはエラーを出力します。

npmでピア依存関係の競合を修正するには?

npm 7以降、ピア依存関係の競合はビルドエラーを引き起こします。解決策:npm updateですべてのパッケージを互換性のあるバージョンに更新するか、npm 6モード用の--legacy-peer-depsフラグを使用するか、package.jsonにoverridesセクションを追加して特定のパッケージのバージョンを強制します。最良の選択肢は、依存関係を互換性のあるバージョンに更新することです。

npm auditとは何ですか?なぜ必要ですか?

npm auditはnpm Security Advisoryデータベースから既知の脆弱性について依存関係ツリーをスキャンします。コマンドは重要度レベル(critical、high、moderate、low)のレポートを出力し、脆弱なパッケージを安全なバージョンに自動的に更新するためにnpm audit fixを推奨します。定期的にnpm auditを実行することは、JavaScriptプロジェクトの基本的なセキュリティ慣行です。

npm workspacesはモノレポをどのように簡素化しますか?

npm workspacesを使用すると、単一のリポジトリで複数のパッケージを管理できます。ルートのpackage.jsonに"workspaces": ["packages/*"]フィールドを追加します。利点:共有node_modulesへのすべての依存関係の単一インストール、ローカルパッケージ間の自動シンボリックリンク、ルートからすべてのパッケージのスクリプト実行、バージョンの重複排除。

なぜpackage-lock.jsonをリポジトリにコミットするのですか?

package-lock.jsonは、すべての依存関係とその推移的パッケージの正確なバージョンをロックします。これがないと、異なる開発者やCIサーバーがセマンティック範囲内で異なるバージョンのライブラリを取得し、「自分のマシンでは動く」エラーが発生する可能性があります。ロックファイルをコミットすることで、再現可能なビルドとすべての環境で同一の動作が保証されます。

まとめ

  • npm — Node.jsの標準パッケージマネージャー、バージョン0.6.3からNode.jsに同梱
  • package.json — 依存関係、スクリプト、メタデータを含むプロジェクト設定ファイル
  • npm install — 依存関係をインストール、npm ci — CI/CD用にpackage-lock.jsonから厳密にインストール
  • package-lock.json — 正確なバージョンロック、再現可能なビルドに必須
  • npm Registry — 200万以上のモジュールを持つ最大のパッケージレジストリ
  • npm audit — 自動脆弱性修正付き依存関係セキュリティチェック
  • npm workspaces — 共有node_modulesを使用したモノレポ管理メカニズム

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください