結論:16GBは軽量構成の出発点、迷うなら実測する

ブラウザー、エディター、数個のコンテナを動かす軽量なWeb開発なら、16GBで足りる場合があります。 一方、複数サービス、データベース、IDE、オンライン会議、ローカルKubernetesを同時に動かすなら、32GBの余裕が効きやすくなります。

ただし、コンテナの個数だけで必要量は決まりません。小さなWebサーバー10個より、大きなデータベースやJavaプロセス1個の方が多く使うこともあります。 購入前に、現在のPCで最も重い普段の作業を再現して測るのが確実です。

測定結果判断の目安
作業中も十分なavailableメモリが残り、スワップが増えない同じ使い方なら16GBを選びやすい
availableが少なく、操作中にスワップが継続して増える32GBを優先して検討する
ローカルKubernetes、VM、エミュレーターも常用する現在の実測値に将来分を加え、32GB以上を検討する
この記事の「十分な余裕」の目安:ピーク時にも搭載量の20〜25%程度がavailableとして残り、通常操作でスワップの使用量が増え続けない状態を、購入判断用の目安とします。これは仕様上の必須値ではなく、急な負荷や今後のツール追加を吸収するための余裕です。

測定前:普段の作業を再現する

PCを起動した直後の数字ではなく、負荷が高くなる日の状態を再現します。

  1. 普段使うブラウザーのタブ、チャット、IDEを開く
  2. docker compose up -dなどで開発用サービスをすべて起動する
  3. データベースへ実際に近いデータを読み込む
  4. ビルド、テスト、コード解析など重い処理を実行する
  5. 必要ならオンライン会議や画面共有も同時に開始する

起動しただけでは、遅延ロードされる処理やキャッシュが反映されません。10〜20分ほど普段どおり操作し、最も重い場面を測ります。 機密情報を含む業務環境では、コマンド出力を外部へ公開しないよう注意してください。

手順1:ホスト全体のメモリを確認する

Linuxでは、まず次のコマンドを実行します。

free -h

主に見るのはusedだけではなく、availableSwapです。 Linuxは空きメモリをファイルキャッシュにも使うため、freeが小さいという理由だけでメモリ不足とは判断しません。

項目見る理由
available新しいアプリケーションが利用できる見込みのメモリを確認する
Swap usedRAMからディスクへ退避が発生しているか確認する
buff/cache単純な「使用済み」とアプリケーションの消費量を混同しないために見る

作業中の変化を見る場合は、2秒おきに表示します。

watch -n 2 free -h

一度スワップされたデータは負荷が下がっても残ることがあります。そのため「Swap usedがゼロでない」だけで判断せず、重い操作中に増え続けるか、操作の引っかかりが同時に起きるかを見ます。

手順2:コンテナごとの使用量を確認する

実行中のコンテナを1回だけ一覧にするには、次のコマンドを使います。

docker stats --no-stream

MEM USAGE / LIMITでコンテナごとの使用量と上限を確認できます。Docker公式ドキュメントによると、Linux上のCLI表示ではキャッシュ分を差し引いた値が使われます。 そのため、ホストのfree -hとコンテナの数値を単純に合計して一致させるものではありません。

名前、CPU、メモリだけに絞ると比較しやすくなります。

docker stats --no-stream \
  --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

特定のコンテナだけが大きい場合は、PCを買い替える前に設定も確認します。 Javaヒープ、データベースのバッファ、開発時に不要なサービスなどを調整できる可能性があります。

Dockerは、指定しなければコンテナがホストで利用可能な範囲のメモリを使えます。開発環境の暴走を防ぐ目的なら、Composeの設定やdocker run --memoryによる上限も検討できます。 ただし、必要量より低い上限はコンテナの異常終了や性能低下につながるため、測定後に設定します。

手順3:Docker以外の大きなプロセスを探す

Dockerだけを見ていると、ブラウザー、IDE、言語サーバー、会議アプリの負荷を見落とします。Linuxでは次の例で、メモリ使用率の高いプロセスを確認できます。

ps -eo pid,comm,%mem,rss --sort=-rss | head -20

rssは常駐している物理メモリ量の目安で、通常はKiB単位です。ブラウザーなどは複数プロセスに分かれるため、1行だけでなく関連する行をまとめて見ます。 共有メモリなどの影響もあるので、ここでも全行の単純合計をホスト全体の値として扱わないでください。

WSL2・Docker Desktopではホスト側も見る

Windows+WSL2やDocker Desktopでは、Linux環境が仮想化層の中で動きます。WSL内のfree -hだけでなく、WindowsのタスクマネージャーでもPC全体のメモリを確認してください。 %UserProfile%\.wslconfigでWSL2に割り当てるメモリを制限している場合、その上限も判断に影響します。

macOSのDocker Desktopも同様に、コンテナの合計だけではなく、アクティビティモニタとDocker Desktopのリソース設定を確認します。 「PCには32GBあるがDockerへ割り当てた上限が小さい」という状態では、増設しても設定を変えなければ効果を得られません。

測定結果を記録する

最低でもアイドル時、通常作業時、最大負荷時の3回を記録します。別の日にも測ると、一時的な処理に左右されにくくなります。

場面availableSwap used最大のコンテナ操作感
起動後・アイドル GB GB
通常の開発中 GB GB GB問題なし/遅い
ビルド・テスト・会議中 GB GB GB問題なし/遅い

現在16GBのPCで、最大負荷時にも余裕が残り、スワップ増加や操作遅延がなければ、同じ使い方では16GBが候補になります。 反対に、IDEとコンテナを起動するたびに余裕がなくなり、スワップと待ち時間が増えるなら、32GBへ予算を配分する根拠になります。

16GBと32GBの最終判断

16GBを選びやすい条件

32GBを選びやすい条件

32GBにすれば、CPU不足、遅いSSD、コンテナの設定不良まですべて解決するわけではありません。 実測でメモリが原因と確認してから優先順位を決めることが、過不足のないPC選びにつながります。

参考資料と次に読む記事

Amazon.co.jpで32GBメモリ搭載PCを確認する

著者について

intrajp。Linux、クラウドインフラ、Kubernetesなどの技術情報を発信しています。 この記事では特定製品を一律に推奨せず、現在の環境を測って必要量を判断する方法をまとめました。

運営者情報と記事の方針を見る