npm(Node Package Manager)はNode.jsプラットフォームの標準パッケージマネージャーであり、Node.jsのインストールに含まれています。npmはJavaScriptおよびTypeScriptプロジェクトの依存関係を管理します:ライブラリをnode_modulesにインストールし、パッケージバージョンを更新し、バージョンの競合を解決します。package.jsonはメタデータと依存関係リストを含む中心的な設定ファイルです。npm Registryは最大のパッケージレジストリです。詳細はnpm Registryをご覧ください。
重要なポイント
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 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 initやnpx create-react-app my-appなど。npxはパッケージを一時キャッシュにダウンロードし、実行し、完了後にクリーンアップします。npxは特定のバージョンのツールを実行するのにも便利です。
npm auditはnpmデータベースから既知の脆弱性について依存関係ツリーをスキャンします。コマンドは重要度レベル(critical、high、moderate)のレポートを出力し、脆弱なパッケージを自動的に更新するためにnpm audit fixを推奨します。npm cacheはダウンロードしたパッケージをローカルに保存します。npm cache clean --forceはインストールの問題がある場合にキャッシュをクリアします。npm outdatedは古いパッケージを表示します。
# npmの基本コマンド
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# グローバルインストールなしで実行
$ npx react-native init MyApp
# セキュリティ監査
$ npm audit --fix
package.jsonはプロジェクトルートにあるJSONファイルで、そのメタデータ、依存関係、設定を記述します。必須フィールド:name(一意のパッケージ名)とversion(SemVerバージョン、例:1.0.0)。ファイルはnpm init -yでクイック初期化するか、手動で作成します。
Semantic Versioning(SemVer)はMAJOR.MINOR.PATCH形式のバージョニング標準です。メジャーバージョンは互換性のないAPI変更時に、マイナーは機能追加時(下位互換性あり)、パッチはバグ修正時に変更されます。バージョン前の^記号はマイナーおよびパッチ更新を許可し、~はパッチ更新のみを許可します。
{
"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"
}
}
| フィールド | 目的 | 値の例 |
|---|---|---|
| scripts | npm runの実行コマンド | "start": "node index.js" |
| dependencies | アプリケーションの本番依存関係 | "react": "^18.3.0" |
| devDependencies | 開発およびテストツール | "jest": "^29.7.0" |
| peerDependencies | ライブラリのホスト依存関係 | "react": ">=17.0.0" |
| engines | Node.jsのバージョン要件 | {"node": ">=18.0.0"} |
React Nativeプロジェクトは依存関係管理にnpmを積極的に使用しています。標準セットにはreact、react-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はNode.jsに同梱されている標準パッケージマネージャーです。主な代替手段:yarn(2016年にFacebookが作成)とpnpm(高速、ハードリンクを使用)。npm 5以降、npmとyarnの速度と機能の差は最小限です。npm 7+はワークスペースを追加し、モノレポで競争力を持つようになりました。
| 特徴 | npm | yarn | pnpm |
|---|---|---|---|
| 作成年 | 2010 | 2016 | 2017 |
| ロックファイル | package-lock.json | yarn.lock | pnpm-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はpackage-lock.jsonを更新し、セマンティック範囲内で新しいマイナーバージョンをインストールする可能性があります。npm ci(Clean Install)はnode_modulesを削除し、package-lock.jsonから厳密にパッケージをインストールして更新しません。npm ciは高速で、CI/CDで使用され、すべてのマシンで同一の環境を保証します。package-lock.jsonがない場合、npm ciはエラーを出力します。
npm 7以降、ピア依存関係の競合はビルドエラーを引き起こします。解決策:npm updateですべてのパッケージを互換性のあるバージョンに更新するか、npm 6モード用の--legacy-peer-depsフラグを使用するか、package.jsonにoverridesセクションを追加して特定のパッケージのバージョンを強制します。最良の選択肢は、依存関係を互換性のあるバージョンに更新することです。
npm auditはnpm Security Advisoryデータベースから既知の脆弱性について依存関係ツリーをスキャンします。コマンドは重要度レベル(critical、high、moderate、low)のレポートを出力し、脆弱なパッケージを安全なバージョンに自動的に更新するためにnpm audit fixを推奨します。定期的にnpm auditを実行することは、JavaScriptプロジェクトの基本的なセキュリティ慣行です。
npm workspacesを使用すると、単一のリポジトリで複数のパッケージを管理できます。ルートのpackage.jsonに"workspaces": ["packages/*"]フィールドを追加します。利点:共有node_modulesへのすべての依存関係の単一インストール、ローカルパッケージ間の自動シンボリックリンク、ルートからすべてのパッケージのスクリプト実行、バージョンの重複排除。
package-lock.jsonは、すべての依存関係とその推移的パッケージの正確なバージョンをロックします。これがないと、異なる開発者やCIサーバーがセマンティック範囲内で異なるバージョンのライブラリを取得し、「自分のマシンでは動く」エラーが発生する可能性があります。ロックファイルをコミットすることで、再現可能なビルドとすべての環境で同一の動作が保証されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。