概要
このブログの開発環境であるGitHub Codespacesで、パッケージマネージャをデフォルトで設定されているnpmからpnpmに移行したので、具体的な変更箇所についてメモを残しておきます。
前提条件
GitHub Codespacesをデフォルトで使用している前提で解説します。
DevContainerとGitHub Codespacesの基本的な仕組みについては、別記事「DevContainerの基礎知識:開発環境をコードで定義する」を参照してください。
pnpmとは
pnpm(performant npm)は、npmやYarnの代替となる高速で効率的なパッケージマネージャです。
pnpmの特徴
- 高速なインストール速度
- ディスク容量の効率的な使用
- 厳格な依存関係管理
- monorepo対応のワークスペース機能
移行手順
npmからpnpmへの移行では、以下の作業を行います。
package.jsonにパッケージマネージャのバージョンを明示- Codespaces用の
devcontainer.json設定ファイル作成 - npm関連ファイルの削除と依存関係の再インストール
- 動作確認とエラー対応
- 新しいCodespacesをビルド
それぞれの手順を詳しく見ていきます。
1. package.jsonの設定
packageManagerフィールドを追加して、使用するpnpmのバージョンを明示します。
このフィールドにより、Node.jsのCorepackが自動的に指定バージョンのpnpmを使用します。
2. devcontainer.jsonの設定
GitHub Codespacesでは、.devcontainer/devcontainer.jsonを設定してpnpmを自動セットアップします。
package.jsonのpackageManagerフィールドが設定されていれば、Node.jsが自動的に指定バージョンのpnpmを使用します。
Corepackは、Node.js 14.19以降にバンドルされているパッケージマネージャマネージャーです。package.jsonのpackageManagerフィールドを読み取り、指定されたバージョンのpnpmやYarnを自動的にダウンロード・使用します。明示的にcorepack enableを実行しなくても、Node.jsが自動的にCorepackを使用してpnpmを実行します。
3. npm関連ファイルの削除と依存関係の再インストール
既存のnode_modulesとpackage-lock.jsonを削除し、pnpmで依存関係を再インストールします。
インストールが完了すると、pnpm-lock.yamlが生成されます。
4. 動作確認とエラー対応
開発サーバーを起動して、移行が正しく完了したことを確認します。
問題なく起動したら、型チェックとビルドを実行します。
もし型定義に関するエラーが発生した場合は、pnpmの厳格な依存管理により、npmでは暗黙的に利用できていたパッケージが明示的なインストールが必要になっている可能性があります。エラーメッセージに従って必要なパッケージを追加インストールしてください。
5. 新しいCodespacesをビルド
動作確認が完了したら、変更した設定ファイルをコミットします。Codespacesの管理画面から新しいCodespacesを作成し、問題なく動作するか確認しましょう。
問題なくビルドが完了し、開発サーバーが起動すれば、移行は成功です。
