yasudacloudの日記

札幌に住むソフトウェアエンジニア

pnpmでストレージサイズを節約した例

使ってるPCのストレージサイズが512GBなのですが、これが逼迫してきたのでnpm/yarnで入れていたnode_modulesをpnpmを使って削減することにしました。

各プロジェクトのnode_modulesのサイズを調べる🤔

どのくらい削減できたか調べたいので、まずはNodeJSの各プロジェクトのnode_modulesをそれぞれ調べていきます。プロジェクトが少ない場合はFinderから見ても良いのですが、自分の場合はNodeJS以外のプロジェクトも含め80個以上あったのでコマンドで抽出しました。

抽出コマンド
find ./ -type d -exec du -sh {} \; |grep node_modules$ |grep -v node_modules/

上記のコマンドでnode_modules毎のサイズが一覧表示されるはずです。末尾にスラッシュが入ってるのは含まないようにしてるのがミソです。ファイル/ディレクトリが沢山あると結構重いかもしれないので注意です。

一覧表示されたら極端にサイズが小さいnode_modulesは無視してMB単位のサイズのプロジェクトを集計していきます。

すると、、、プロジェクトの数が46個、サイズは合計で約14.8GBありました。思っていたより多いです。これを全てpnpmでインストールし直してみます。

ちなみに最も大きいnode_modulesのサイズは500MBくらいでした。

pnpmのインストールはこちら

 

最初のストレージのサイズ

各node_modulesを削除した後

pnpmへ移行

地道にインストールコマンドを実行していきます。今回移行するのはプライベートなソースコードなので単に削除→インストールとしますが、本来は個々の依存関係を丁寧に追っていった方が良いかと思います。

結果

こんな感じに。

15GB→10GBということで、npm/yarnでインストールしていた時より5GB削減できました。

期待よりは減らなかったというのが正直なとこですが、中には結構古いプロジェクトも多いのでバージョンが多岐に渡り重複が少なかったのではないかと思います。

一応チャットGPTに聞いてみたところ以下の回答でした。

パッケージのバージョン管理が緩やかな場合: pnpmは、パッケージのバージョンをシンボリックリンクとして共有することでストレージを節約します。しかし、パッケージのバージョン管理が緩やかで、多くのバージョンがインストールされている場合は、ストレージの削減効果が薄い可能性があります。

 

工夫次第でもっと削減できそうですが、46個ものプロジェクトを一個ずつ入れ直すのは大変です( ´△`)

ただ、数GBくらいだと他を消した方が良いですね。自分の場合はDockerやXCode、IntelliJ IDE周りなど。また逼迫してきたら本格的にまとめます。

人によって全然環境が違うと思いますが、まあ一例ということで紹介させて頂きました。