# .pkg パッケージでインストールした Mac アプリを削除する

> .pkg インストーラは、アプリの外にレシートとファイルを残します。pkgutil でレシートを読み、その製品のものだけを削除して、最後にレシートを消去します。

Published: 2026-09-06 | Updated: 2026-09-26

`.pkg` インストーラで入ったアプリは、ディスクイメージからドラッグしたアプリとは別物です。インストーラは root として動き、パッケージが指示する場所ならどこにでも書き込めて、インストールした内容の記録をインストーラのレシートデータベースに残します。アプリをゴミ箱にドラッグしても、その記録からフォルダが1つ減るだけで、残りは記録そのものも含めてそのままです。この記事で扱うのはこのケースです。パッケージでインストールされたかどうかの見分け方、ディスクに何が置かれたかの読み方、削除するものと残すものを説明します。Finder がそもそも削除を拒否する場合や、削除したアプリが戻ってくる場合は、先に [Mac アプリがアンインストールできないとき](https://mole.fit/ja/blog/mac-app-wont-uninstall) を、自分でドラッグして入れたアプリなら、[完全にアンインストールするためのガイド](https://mole.fit/ja/blog/how-to-completely-uninstall-apps-on-mac) の通常の手順を参照してください。

## ゴミ箱だけでは足りない理由

パッケージは、アプリの中だけでなく、アプリの隣にもファイルを置けます。公式インストーラでアプリを入れ直して削除し直したとき、Zoom の公式パッケージは `zoom.us.app` の外に3つの launchd ジョブと特権ヘルパー `us.zoom.ZoomDaemon` を残しました。Logi Options+ のインストーラは、独自のレシートと独自の LaunchAgent を持つ別製品 LogiRightSight もインストールしていました。DisplayLink Manager は `/Library/LaunchAgents` に LaunchAgent を追加しました。Microsoft Office は、Word、Excel、PowerPoint がすべて読み込む共有フレームワークのパッケージをインストールし、Microsoft AutoUpdate とライセンス用のヘルパーもいっしょに入ります。アプリのバンドルを移動しても、これらはどれも動きません。

レシートも動きません。レシートはインストーラ自身のデータベースにあり、記録しているファイルとは別の場所にあるので、アプリを削除しても `pkgutil` はパッケージがまだインストールされていると報告します。DisplayLink の公式アンインストーラを問題なく最後まで実行したあとも、2つのレシートは残っていました。

Finder でパスワードを求められるのも、パッケージを相手にしているしるしです。インストーラは root として動いたので、残されたバンドルは root の所有になり、移動するには認証が必要です。これは正常な動作で、[アンインストールのトラブルシューティングガイド](https://mole.fit/ja/blog/mac-app-wont-uninstall) で扱っています。

## パッケージでインストールされたか確認する

まず、レシートの一覧とアプリ自身のパスを確認します。

```sh
pkgutil --pkgs | grep -i zoom
pkgutil --file-info /Applications/zoom.us.app
```

`pkgutil --pkgs` は、インストーラが起動ボリュームに記録したすべてのパッケージ ID を一覧表示します。アプリのバンドル識別子だけでなく、ベンダー名と製品名でも検索してください。両者がまったく似ていないことがよくあるからです。Zoom のアプリは `us.zoom.xos` で、レシートは `us.zoom.pkg.videomeeting` です。Cookie.app をインストールするレシートは `app.fantasticthing.Bookkeeping` です。大文字と小文字まで違うこともあります。爱思助手（i4Tools）のバンドル識別子は `cn.i4Tools.mac`、レシートは `cn.i4tools.mac` で、`pkgutil` は ID を完全一致で照合するので、大文字混じりの綴りで問い合わせると、レシートがそこにあるのに「No receipt」と返ってきます。ID は手で打たず、`--pkgs` の出力からコピーしてください。

`pkgutil --file-info` は本来、パスの下の `pkgid:` 行で、そのパスをインストールしたパッケージを示すはずです。答えがないことを「パッケージ由来ではない」と読まないでください。macOS 27 では、ほとんどのパスについて、削除済みか存在するかに関係なく `volume` と `path` しか表示されないことが分かりました。DisplayLink Manager のアプリもこの空の答えになり、そのとき2つのレシートはまだ Mac に残っていました。また、レシートがあるからといって、自分で `.pkg` を実行したとは限りません。Mac App Store も、`com.apple.pkg.TestFlight` のように一部のアプリでレシートを残します。

## レシートに記録されているもの

1つのパッケージが何をどこにインストールしたかは、2つのコマンドで分かります。

```sh
pkgutil --pkg-info us.zoom.pkg.videomeeting
pkgutil --files us.zoom.pkg.videomeeting
```

`--pkg-info` は、パッケージ ID、バージョン、`volume`、`location`、インストール日時を表示します。`--files` が表示するパスはそのボリュームと場所からの相対パスなので、実際のパスはこの3つをつなげたものです。場所が `Applications` のレシートは `Foo.app/Contents/...` と表示し、場所が空のレシートは `Applications/Foo.app/...` と表示します。一覧を読む前に場所を確認しないと、調べるパスがすべてずれてしまいます。

一覧にはファイルだけでなくディレクトリも含まれます。`--only-files` と `--only-dirs` で両者を分けられます。レシートが `Library` や `Library/LaunchAgents` そのものを載せることがあると分かれば、その便利さが分かるはずです。元の記録は `/private/var/db/receipts` に、パッケージごとの `.bom` と `.plist` として置かれていますが、`pkgutil` のマニュアルには、レシートファイルの場所は変わることがあるので必ず `pkgutil` を通して問い合わせるように、と書かれています。

## レシートは地図であって、削除リストではない

`pkgutil --files` の出力をループに流し込んで、すべて削除したくなるかもしれません。パッケージのアンインストールでほかのものを壊すのは、こういうやり方をしたときです。一覧が示すのは、このパッケージが書き込んだものであって、このパッケージだけが使うものではありません。

| 一覧に含まれるもの | そのまま削除できない理由 |
| --- | --- |
| `Applications`、`Library`、`Library/LaunchAgents` などのディレクトリ | パッケージが作成したり触れたりしたが、Mac のほかのアプリもすべて使っている |
| ベンダーが複数のアプリで共有するフレームワークやヘルパー | Word、Excel、PowerPoint はどれも Office の共有フレームワークを読み込み、それがないと起動時にクラッシュする |
| 複数のアプリで共有されるコンテンツ | GarageBand、Logic Pro、MainStage、Final Cut Pro は `/Library/Application Support/GarageBand`、`/Library/Application Support/Logic`、`/Library/Audio/Apple Loops` を共有していて、`com.apple.pkg.MAContent10_*` のレシートに記録されている |
| 同じインストーラが持ち込んだ別製品 | LogiRightSight は Logi Options+ といっしょに入り、単独でも動き続ける |
| LaunchAgent とデーモンの plist | 読み込まれたジョブは plist を移す前に止める必要があり、そうしないと launchd はディスク上に実体のないジョブを抱え続ける |

一覧には漏れもあります。記録されるのは、パッケージのペイロードがディスクに置いたものです。インストーラのスクリプトはそれ以上のことができ、パッケージはそれを含んでいます。たとえば Foxit のパッケージには postinstall スクリプトとアップデートサービスがあります。アプリは動き始めると、ホームのライブラリに自分のデータを書き込みますが、それはどのレシートにも載りません。そちら側については [Mac アプリ削除後の残骸ファイルを片付ける](https://mole.fit/ja/blog/how-to-remove-leftover-files-after-uninstalling-mac-apps) を参照してください。

## まずベンダーのアンインストーラを使う

Apple の[アプリの削除に関する案内](https://support.apple.com/102610)は、この点をはっきり述べています。アプリにアンインストーラが含まれている場合は、「それがアプリと、アプリがほかの場所に保存している可能性のあるログイン項目、機能拡張、その他のデータを削除する最善の方法」だというのです。パッケージでインストールされるソフトウェアには、アンインストーラが付いていることがよくあります。ベンダーは自社のスクリプト、ヘルパー、共有部分を把握しているからです。パッケージが入っていたディスクイメージ、「アプリケーション」にあるそのアプリのフォルダ、`/Applications/Utilities`、アプリ自身のメニュー、ベンダーのサポートサイトを探してください。たとえば Splashtop Personal は、アンインストーラをパッケージと同じディスクイメージに入れています。

すでにアプリをゴミ箱にドラッグしていたら、**ファイル › 戻す** で元に戻し、アプリを開いて、そこからアンインストーラを実行します。セキュリティソフト、VPN クライアント、ドライバでは、ベンダーのツールは省略できません。機能拡張やネットワークフィルタは、それを所有するアプリを通じてしか外せないからです。これについては [Mac でネットワークを壊さずにアンチウイルスをアンインストールする方法](https://mole.fit/ja/blog/how-to-uninstall-antivirus-mac) で扱っています。

## 手作業で削除する

アンインストーラがない場合は、レシートがどこを見ればよいかを教えてくれます。次の順序で進めます。

1. アプリと、それがバックグラウンドで動かしているものをすべて終了します。
2. `--pkg-info` で場所を、`--files` で一覧を確認し、アプリのバンドル外にあるパスを書き留めます。
3. 一覧にある LaunchAgent やデーモンは、plist を移す前に `launchctl bootout` でジョブの読み込みを解除します。順序が大切な理由は、[トラブルシューティングガイドの launchd の節](https://mole.fit/ja/blog/mac-app-wont-uninstall) で説明しています。
4. ゴミ箱に入れるのは、明らかにこの製品のものだけです。アプリのバンドル、バンドル識別子や製品名にちなんだ名前のフォルダと plist、`/Library/PrivilegedHelperTools` にあるそのヘルパーなどです。共有の親フォルダや、ベンダーのほかのアプリがまだ使っているものは残します。`pkgutil --pkgs | grep -i vendorname` で、同じベンダーのほかのパッケージがまだインストールされているか分かります。残っていれば、その共有フレームワークは残してください。
5. 一覧にあるものが何も残っていないことを確かめてから、最後にレシートを消去します。

```sh
sudo pkgutil --forget com.vendor.pkg
```

`--forget` はレシートを破棄するもので、マニュアルの言葉を借りれば「インストールされたファイルには触れない」ものです。先に実行すると、ファイルはすべてそのまま残り、それを指す記録がなくなるので、残りの作業が難しくなります。`/private/var/db/receipts` は root の所有なので `sudo` が必要で、ID は `--pkgs` の綴りとまったく同じでなければなりません。古いレシートにユーザーデータは含まれていないので、一覧にあるものがまだ使われているか分からない場合は、レシートを残しておいても何も困りません。

## 結果を確認する

以下のコマンドは読み取るだけです。`com.vendor.pkg` と `vendorname` は、上で見つけたものに置き換えてください。

```sh
id=com.vendor.pkg
loc=$(pkgutil --pkg-info "$id" | sed -n 's/^location: //p')
pkgutil --files "$id" --only-files | while IFS= read -r f; do
  p="/${loc:+$loc/}$f"
  [ -e "$p" ] && echo "$p"
done
pkgutil --pkgs | grep -i vendorname
ls /Library/LaunchAgents /Library/LaunchDaemons /Library/PrivilegedHelperTools | grep -i vendorname
launchctl list | grep -i vendorname
launchctl print system | grep -i vendorname
```

ループは、レシートにあるファイルのうちまだ存在するものを、完全なパスで表示します。出力がなければペイロードはなくなっていて、レシートを消去しても問題ありません。アプリのバンドル内のパスが出たら、アプリはまだインストールされています。それ以外の場所のパスは、削除で漏れたものか、ほかのアプリと共有しているために残すと決めたものです。`pkgutil` が「No receipt for ... found」と返したら、レシートはすでに消去されているか、ID の綴りが違います。`ls` と `launchctl` の行は、レシートに一度も載らなかったヘルパーを拾うためのものです。`launchctl list` には自分の LaunchAgent が、`launchctl print system` にはデーモンが表示されます。どちらかに行が出れば、そのジョブはまだ読み込まれたままで、最初の列が0以外の数字ならいま動いています。

## Mole でのパッケージ由来アプリの扱い

[Mole](https://mole.fit/ja/) でアプリを削除すると、アプリのバンドル識別子か製品名に一致する名前のレシートを読み、そこに記録されたパスのうちまだ存在するものを一覧に表示します。ただし範囲は限られています。「アプリケーション」にあるアプリのバンドルと、`/Library` の下では、そのバンドル識別子と正確に同じ名前の Application Support、Caches、Logs、PrivilegedHelperTools、WebKit、HTTPStorages の各フォルダ、それに Preferences、LaunchAgents、LaunchDaemons の plist だけです。これらの行はチェックなしで表示されるので、読んだうえで1つずつチェックします。`/Users`、`/opt`、`/usr`、`/private` の下のパスがレシートから行になることはなく、レシートファイル自体も同様です。

アプリがなくなったあと、Mole は、そのバンドル識別子の名前のレシートを、`pkgutil` がディスク上に持っている綴りで消去します。`pkgutil --file-info` で見つけたベンダーのレシートも消去しますが、こちらはそのレシートにあるファイルがどれも存在しない場合に限ります。これを行うのは、その削除のために管理者ヘルパーがすでに認証されている場合だけなので、レシートのために余計なパスワード入力を求めることはありません。ベンダーのレシートを探す際、Apple の `com.apple.*` レシートは対象外です。

限界は上で述べたとおりです。macOS 27 では `pkgutil --file-info` がほとんど答えを返さないため、ID がアプリとまったく関係ないレシートは、Mole がアプリを削除したあとも残ることがあります。DisplayLink の2つと Zoom の1つがそうでした。これらは記録にすぎず、`sudo pkgutil --forget` で消せます。ドライバ、VPN クライアント、セキュリティソフトについては、Mole はベンダーのアンインストーラの代わりにはなりません。

## よくある質問

### pkgutil --forget でアプリはアンインストールされますか？

いいえ。マニュアルによると、パッケージのレシートデータをすべて破棄しますが、インストールされたファイルには触れません。ファイルがなくなってから実行するもので、ファイルを削除する代わりに使うものではありません。

### pkgutil --files に表示されるファイルは全部削除してもいいですか？

いいえ。一覧には `Library` や `Applications` のようなシステムのディレクトリ、ベンダーのほかのアプリが読み込むフレームワーク、まだ動いているかもしれないジョブの plist が含まれます。確認すべきものを見つけるために使い、そのうえでこの製品だけのものを削除してください。

### アプリはもうないのに、pkgutil --pkgs にまだ表示されます。まだインストールされているのですか？

そうとは限りません。ファイルを削除してもレシートは更新されないので、誰かが消去するまで残ります。上の確認用ループを実行して、レシートにあるものが何も残っていなければ、残っているのは記録だけで、`sudo pkgutil --forget` で削除できます。

---

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