11月9日、Denoの公式ブログが「新しい JavaScript パッケージ マネージャー Deno のご紹介(Introducing your new JavaScript package manager: Deno)」と題した記事を公開した。この記事では、Deno 2のリリースに伴う新しいパッケージ管理機能について詳しく解説されている。以下に、その内容を具体的に紹介する。
Deno 2は、依存管理の操作を効率化するために「deno add
」「deno remove
」「deno install
」といったコマンドを提供している。これらのコマンドはNode.jsユーザーにも馴染みがあり、既存のnpmおよびJSRパッケージもスムーズに取り入れることができるため、DenoとNodeの両方を活用する開発者にとって魅力的な選択肢となる。
新しいサブコマンドの詳細
1. deno add
deno addは、プロジェクトに依存関係を追加するためのコマンドである。例えば以下のコマンドでJSRとnpmのパッケージをdeno.jsonに追加できる。
deno add jsr:@std/path npm:chalk
deno.jsonが存在しない場合、Denoが自動的に生成し、@std/pathやchalkといったパッケージをインポートマップに追加する。このインポートマップ機能により、パッケージのバージョン管理や配置がシンプルに行える。package.jsonが存在するプロジェクトでは、npmモジュールはそちらに追加されるため、Node.jsユーザーにとっても馴染みやすい構造になっている。
2. deno remove
deno removeコマンドは、プロジェクトから指定したパッケージを削除するためのものである。deno.jsonやpackage.jsonからパッケージを削除でき、deno uninstallも同じ操作のエイリアスである。例えば以下のように使用する。
deno remove jsr:@std/path npm:chalk
また、--globalオプションを使えば、グローバルにインストールされたバイナリも削除できるため、不要なツールの整理に便利である。
3. deno install
deno installは、依存関係を一括でインストールするコマンドである。Denoは、依存関係をグローバルキャッシュに保存し、node_modulesディレクトリを利用する代わりにハードリンクで効率よくインストールを行う。このため、ディスクの使用量が最小限に抑えられ、インストール速度も向上している。特に大型プロジェクトやモノレポ構成では、複数プロジェクト間で共通の依存関係を効率よく利用することが可能である。
4. 依存キャッシュ
deno installでは、--entrypointフラグを活用することで、特定の依存を事前にキャッシュできる。これはDockerなどのコンテナ環境におけるコールドスタートの短縮に効果的で、運用環境でのパフォーマンス向上にも貢献する。
Nodeおよびnpmとのシームレスな連携
Denoはpackage.jsonを認識するため、Node.jsプロジェクト内でも問題なく動作する。たとえば、以下のようにvite-projectという名前のプロジェクトを作成し、Denoと共に利用することができる。
cd vite-project
deno install
deno run dev
ReactやNext.jsなど、Nodeとnpmのパッケージを活用したアプリケーション開発も可能であり、Denoの柔軟なツールセットと相まって、開発環境の選択肢が広がる。Denoの公式ドキュメントには、ReactアプリやNext.jsアプリのセットアップ方法も詳述されている。
パフォーマンスに対するこだわり
Denoのグローバルキャッシュは、Linuxではハードリンク、macOSではclonefileを利用することで、複数のプロジェクト間で依存関係を効率よく管理できる。この機能により、同一ディレクトリ内で依存が重複してもディスクスペースが無駄に消費されることなく、迅速なインストールが可能である。ベンチマークによると、Denoのキャッシュは、インストール速度やディスク効率において他のパッケージマネージャーと比較して優れた結果を示している。
今後の展望と新機能
Denoの将来のリリースでは、deno updateやdeno outdatedといった新しいコマンドの追加が予定されており、DenoとNodeプロジェクトの依存管理がさらに向上する見込みである。例えば、deno outdatedを使用することで、依存関係の最新バージョンやアップデートの有無を簡単に確認できるようになる。
$ deno outdated
---------------------------------------------
Package | Current | Update | Latest
---------------------------------------------
jsr:@std/http | ^1.0.0 | 1.0.7 | 1.0.7
npm:react | 17.0.2 | 17.0.2 | 18.3.1
Denoは今後も、セキュリティと効率性を両立した新機能の追加に注力していく予定であり、JavaScript開発者にとって、ますます強力なツールセットとなっていくことだろう。詳細は「新しい JavaScript パッケージ マネージャー Deno のご紹介(Introducing your new JavaScript package manager: Deno)」を参照していただきたい。