# ツールチェーンを壊さずに Mac から Java を削除する

> システムのスタブには触れず、削除前にインストール済み JDK を洗い出し、これから外すランタイムにまだ依存しているものを確認します

Published: 2026-08-08

「Mac で Java をアンインストールする」という言葉には 2 つの問いが潜んでいます。間違った方に答えると、ツールチェーンが壊れます。1 つ目は、どの Java が入っているかです。2 つ目は、マシン上の何が、その存在を前提にしているかです。

Oracle 自身の手順は短く、その中で最も重要なのは手順ではなく、触れてはいけないディレクトリについての警告です。

## /usr/bin から Java を削除しない

Oracle ははっきり書いています。`/usr/bin` から Java ツールを削除して Java をアンインストールしようとしてはいけない、と。そのディレクトリはシステムソフトウェアの一部であり、変更しても次の macOS アップデートで Apple が元に戻します。

これが、作業が失敗する最もよくあるパターンです。`which java` を打つと `/usr/bin` 配下のパスが返り、アンインストール先のように見えますが、そうではありません。macOS 上では、それらは実際にインストールされているランタイムを指すスタブです。削除しても看板が消えるだけで建物は消えず、あとで macOS が復元します。

## 削除しようとしている Java を把握する

ランタイムと開発キットは別のインストールであり、削除方法も異なります。

ブラウザプラグインと環境設定パネルを含むコンシューマ向けランタイムである Oracle JRE は、Oracle が挙げる 3 か所にあります。

```
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
/Library/PreferencePanes/JavaControlPanel.prefPane
~/Library/Application Support/Oracle/Java
```

JDK は別物で、`/Library/Java/JavaVirtualMachines/` 配下にインストールされ、削除には管理者権限が必要です。複数を並べて入れることができ、それは普通であり、意図的なことも多いです。

<figure class="blog-diagram">
  <img src="https://mole.fit/img/blog/java-runtimes-and-stubs.webp" width="1360" height="454" loading="lazy" alt="システムディレクトリ内のコマンドライン用スタブは Library 配下の Java Virtual Machines に入った JDK を指し、Oracle ランタイムのプラグインと環境設定パネルは別のインストールです。">
  <figcaption>システムディレクトリ内のコマンドはポインタであり、ランタイムそのものではありません。JDK を削除すると実際のインストールが消えます。ポインタだけを消しても看板が壊れるだけで、macOS が元に戻します。</figcaption>
</figure>

削除対象を決める前に、実際に何が入っているかを一覧します。

```
/usr/libexec/java_home -V
```

システムが認識しているすべての JDK が、バージョンとパス付きで表示されます。一覧が 1 件なら選択は単純です。4 件あるなら、次の節が重要になります。

## 間違った JDK を消すと他のソフトが壊れる

Java が入っているのは、Java そのものを直接使うためであることがまれです。Android 向けツール、Elasticsearch、Minecraft ランチャー、JetBrains IDE、Apache ツール、いくつかの企業向け VPN や印刷クライアントは、いずれも JVM を同梱するか依存しています。独自コピーを同梱しているものは影響を受けません。システムが提供する JVM を参照しているものは、それが変わると動かなくなります。

パッケージマネージャで入れた JDK は、入れたときと同じ方法で外します。Homebrew で入れた temurin は `brew uninstall` で外れます。手でファイルを消すと、パッケージデータベース上はまだインストール済みのままになります。

## サポートされている方法で JDK を削除する

`.pkg` から入れた JDK の場合、削除対象は `/Library/Java/JavaVirtualMachines/` 配下で、名前にバージョンが付いたディレクトリです。`sudo` が必要です。一度に 1 バージョンだけ消し、次を消す前に、自分にとって重要なツールを確認してください。

その後、`/usr/libexec/java_home -V` にはもう表示されず、シェルプロファイルで手で設定した `JAVA_HOME` は存在しないパスを指したままになります。この変数は、正しく削除したあとにツールチェーンが失敗する原因として 2 番目に多いものです。

## ターミナルを閉じる前に確認する

```
/usr/libexec/java_home -V
java -version
```

1 つ目は残っているものを示します。2 つ目はバージョンを表示するか、ランタイムがインストールされていないことを示します。意図的に空にしようとしたマシンでは、それはエラーではなく想定どおりの結果です。

## フットプリント表示が役立つ場面

Java の残りものは小さく、あちこちに散らばり、目立ちません。確認すべきなのは一覧であり、ターミナルがすでにそれを表示してくれます。JDK や、JDK を同梱するアプリの全体フットプリントを、サイズ付きの一覧で一度に見たいなら、パスをあらかじめ知らなくても [Mole](https://mole.fit/) で確認できます。

## あとで確認すべき3つの場所

まず1つ目はシェルのプロファイルです。`~/.zshrc` や
`~/.zprofile` に手書きした `JAVA_HOME` は、JDK を消しても残り続けます。存在しないパスを指したままになり、
新しいシェルすべてがその壊れた変数を引き継ぎます。該当行を削除するか、`export JAVA_HOME=$(/usr/libexec/java_home)` に書き換えて、
システムが提供している JDK を追従させるようにしてください。

2つ目は IDE です。JetBrains 系ツールと Android Studio はプロジェクトごとに特定の JDK
パスを記録しており、システムの変更には追従しません。その結果、コマンドラインでは問題ないのに、あるプロジェクトだけ
ビルドに失敗する、という症状として現れます。

3つ目はパッケージマネージャが入れたものです。
`brew list | grep -i -E 'jdk|temurin|zulu|openjdk'` で Homebrew 経由のものが分かります。
これらは `brew uninstall` で削除してください。ディレクトリを手で消すと、
パッケージデータベース上はまだインストールされていると見なされたままになります。

---

Canonical HTML page: https://mole.fit/ja/blog/how-to-uninstall-java-mac
Blog index for agents: https://mole.fit/ja/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
