Macのアプリをアンインストールする3つの方法と、それぞれが残すもの

ゴミ箱にドラッグする。 macOSの標準機能で無料ですし、バンドルは削除されます。ただし、アプリがバンドルの外に書き込んだものは何も削除されません。環境設定、キャッシュ、コンテナ、保存された状態、起動エージェント、インストーラのレシート、そしてシステム設定の「プライバシーとセキュリティ」にある項目です。最後の項目については、macOSに消去するボタンがありません。これを消去するツールtccutilは、LaunchServices経由でアプリを特定するので、バンドルがディスク上に残っている必要があります。アプリがゴミ箱にある間はまだ使えますが、ゴミ箱を空にすると「No such bundle identifier」と返され、許可はアクセス許可のデータベースにずっと残ります。去年削除したアプリが「アクセシビリティ」にまだ表示されているのはそのためです。

ベンダー自身のアンインストーラ。 用意されている場合(Adobe、Microsoft、ほとんどのVPNクライアント)は、それを使うのが正解です。どこに何を置いたかは、ベンダー自身がいちばんよく知っているからです。ただし、ほとんどのアプリには用意されていません。

専用のアンインストーラ。 AppCleanerは何年も前から無料で提供されていて、バンドルとわかりやすい~/Libraryのフォルダだけを消せればよいなら十分です。Pearcleanerはそのオープンソース版といえる選択肢です。Unrootは、もっと絞り込んだ問いを軸に作られています。何を見つけられるかではなく、何を証明できるか、そして何を元に戻せるか、です。以下の内容はすべて、現在配布中のバージョンに含まれています。

どこを探すか、そしてなぜ各行に理由が表示されるのか

スキャンは58か所を読み取ります。予想がつく場所(Application Support、Preferences、Caches、Containers、Saved Application State)と、予想しにくい場所(HTTPStorages、WebKit、Cookies、/var/foldersの下のユーザーごとのツリー、オーディオプラグインのフォルダ、QuickLookジェネレータ)に加えて、ホームフォルダの外にある/Library/LaunchDaemons、/Library/PrivilegedHelperTools、/var/db/receipts、/Users/Sharedです。2か所は特別な方法で読み取ります。Application Supportは1階層深くまで読みます。削除の候補にすべきなのは、その中のフォルダであって、同じベンダーのほかの製品まで巻き込んでしまうベンダーのフォルダではないからです。起動項目のplistはLabelとProgramArgumentsを読みます。ベンダーはファイルにデーモンの名前を付けるからです。

次は照合です。アンインストーラが信頼を得るか、データを壊すかは、ここで決まります。バンドル識別子の完全一致は確実です。その識別子がドット区切りのまとまりとしてそのまま含まれている場合、アプリが自身のコード署名で宣言しているApp Group、このバンドルをインストールしたことをpkgutilで証明できるインストーラのレシートに含まれるパスも、同じく確実です。名前の一致は「可能性がある」にすぎず、そのように格付けされます。

大事なのは、この一覧に含まれていないものです。ベンダーのプレフィックスによるルールと、署名したチームによるルールは、どちらもかつて存在し、どちらも削除しました。この2つは、実際の環境での2回のスキャンで合わせて45回一致しましたが、すべてがほかのアプリのデータで、本当の残りファイルは1つもありませんでした。開発元が同じでも、同じアプリとは限りません。いちばん強いルールは最後に適用されます。インストールされている別のアプリの識別子で保存されたファイルは、そのアプリのもの、というルールです。そして、すべての行に一致した理由が表示されます。信頼できる一覧と、鵜呑みにするしかない一覧の違いは、そこにあります。

3つの段階と、最初からチェックが入るもの

アプリで見つかったすべての痕跡を一覧にしたUnrootの確認画面。「安全に削除可能」の下にまとめられ、各行にパスと一致した理由が表示されている
すべての行に一致した理由が付き、ヘッダーには3つの段階それぞれの件数が表示されます。

見つかったものは「安全に削除可能」「要確認」「要注意」の3段階に格付けされます。この格付けが答えるのは1つの問いだけです。この行にどれだけ注意が必要か、です。安全に削除可能は、元に戻せて、ホームフォルダの中にあり、確実にそのアプリのものです。要確認は、名前だけで一致しているか、まだ使っているアプリと共有されているものです。要注意は、キーチェーン項目、特権ヘルパー、システム拡張、そしてホームフォルダの外にあるものすべてで、誰もが恐れる失敗を起こしうるのは、この段階だけです。

意外なのは、最初からチェックが入っているのが、安全な段階のものではないことです。行にチェックが入るのは、元に戻せるときではなく、一致が確実なときです。以前はこの2つを混同していたため、製品として不誠実な動きになっていました。アプリのライセンスはキーチェーンに保存されているので、その行のチェックを外したままにすると、デフォルトのまま削除してもアプリのアクティベートが気づかないうちに残っていたのです。要注意のキーチェーンの行にはチェックが入り、名前だけの一致にはチェックが入りません。

同じ画面には、もう1つのモードもあります。リセットは、アプリは残したまま、アプリが保存したものをすべて削除します。ただし、インストーラのレシートは除きます。まだインストールされているパッケージをpkgutilが忘れてしまうと、そのアプリ自身のアップデータが動かなくなるからです。キーチェーン項目は、あえて対象に含めています。インストールしたばかりの状態のアプリは、サインアウトしているものだからです。

何も削除されない

ゴミ箱内の日付付きの隔離フォルダのパスと、「取り消す」が読み込むマニフェストを表示するUnrootの削除レポート
ゴミ箱の中に日付付きのフォルダが1つ、その横にマニフェスト。「取り消す」もまだ使えます。

削除した項目は、ゴミ箱の中にある日付付きのフォルダ1つ(Unroot - Spectacle - 2026-08-21 11-01-33)にまとめられ、それぞれが番号付きの専用の場所に入ります。そのため、~/Library/Preferencesのcom.vendor.app.plistが、/Library/Preferencesにある同名のファイルを知らないうちに上書きすることはありません。

400個の項目をばらばらに置くのではなく1つのフォルダにまとめるのは、見やすさのためでもあり、機能上の理由でもあります。Finderの「戻す」は、まとめて捨てた項目の最初の1つしか復元せず、プログラムから復元するための公開APIもありません。それに頼った取り消し機能は、システムが守れない約束になってしまいます。ファイルの横にはunroot-manifest.jsonがあり、すべての項目の元の場所を記録したシンプルなリストになっています。「取り消す」はこのファイルを読み込み、Unroot自体を削除したあとでも中身を読むことができます。

ただし、削除の中で本当に元に戻せない部分が1つあり、サイドパネルではその件数が赤字で表示されます。キーチェーン項目はファイルではないため、フォルダに移せません。削除するとアプリはサインアウトされ、保存されていたライセンスも一緒に失われます。確認シートでは、件数ではなく1つずつ名前を表示します。数字だけでは、同意したことにならないからです。

クラッシュしても使える取り消し

マニフェストには、成功が確認できた操作しか記録できないので、書き込めるのは実行が終わったあとです。その途中でクラッシュすると、移動したファイルが、元の場所の記録がないまま残ってしまいます。これはまさに、マニフェストが守るための約束です。そこで、何かを移動する前に、予定しているすべての項目を記録したジャーナルを同じフォルダに書き込み、実行が完了したら削除します。つまり、マニフェストがなくジャーナルだけがあれば、削除が中断されたしるしです。次に起動したときには、そのジャーナルからマニフェストを作り直し、ファイルが実際にそれぞれの場所にあることを確認できた項目だけを残します。

取り消しは、この記録を逆にたどって実行します。元のパスにすでに何かがある場合(アプリを再インストールした場合など)は、上書きせず、番号を付けた別名で隣に復元します。取り消しを成功させるために何かを壊すことは、決してあってはならないからです。起動ジョブは、ファイルを元の場所に戻すだけでなく、再登録もします。plistだけを戻してデーモンが停止したままでは、ファイルは戻っても、動作は気づかないうちに戻らないからです。削除と取り消しのどちらの方向も、それより前の処理がすべて間違っているという前提で作られたポリシーを通ります。/System、キーチェーンのフォルダ、iCloud Drive、そして書類、デスクトップ、ダウンロード、ピクチャ、ムービー、ミュージックは、何が一致しても、移動元にも移動先にもなりません。

取り消しで元に戻らない手順は1つだけで、それはアクセス許可のリセットです。Unrootはこのことを、脚注ではなく該当する行に表示します。プライバシーの許可は、復元されるのではなくリセットされます。各アプリは、次に必要になったときにあらためて許可を求めます。

取り消しに期限はありません。Unrootがこれまでに行ったすべての削除は、そのフォルダが占めている容量とともに1つの画面に残るので、2か月前の削除も、2分前の削除と同じように取り消せます。まだ取り消せるかどうかは、削除時に書き込んだフラグではなく、ディスクの実際の状態を見て判断します。

すべてを残しておくということは、ゴミ箱が隔離フォルダでいっぱいになるということでもあります。普通はゴミ箱を空にすれば済みます。そうしたくない場合は、削除履歴でフォルダを1つずつ削除するか、すべて削除…で、件数を示す確認のあとにまとめて削除できます。アプリの中で何かを削除するのはここだけなので、厳重に守られています。フォルダごとに3つのチェックで、そのパスが本当にUnroot自身の作ったフォルダかを確かめ、自動の削除はオンにしない限り動きません。削除した起動デーモンのように、root所有のファイルが入っているフォルダでは、管理者パスワードを1回だけ求められます。

手では消せないアクセス許可の記録

何かを削除する前に、Unrootはアクセス許可のデータベースを読み取り、アプリにどんな許可が与えられていたかを表示します。読み取り専用で、~/Libraryを見るのに必要なのと同じフルディスクアクセスを使います。アクセシビリティ、フルディスクアクセス、画面収録、入力監視、オートメーションなど、全部で約30種類の許可が、名前で表示されます。これを見せてくれるツールはほとんどなく、削除の順序がなぜ大切なのかを示す何よりの根拠でもあります。

この一覧は、残しておくアプリにも使えます。アプリ画面でアプリを右クリックしてアクセス許可…を選ぶと、アクセスできるもの(カメラ、マイク、画面収録、フルディスクアクセスなど)がシートに表示され、それぞれの横に解除があります。これは1つのサービスに対してtccutilを実行するだけなので、元に戻す操作は必要ありません。アプリは、次に必要になったときにあらためて許可を求めるだけです。すべてのユーザーに対して付与された許可の解除にはパスワードが必要で、バンドルではなくパスで記録された許可はシステム設定でしか変更できません。シートにもそのように表示されます。

そして、順序は実際に大切です。リセットはバンドルがまだディスク上にある間に実行する必要があるので、バンドルは最後に移動します。起動ジョブを停止し、キーチェーン項目を削除したあとです。先にバンドルを削除してしまうと後戻りできず、アンインストールしたはずのアプリがシステム設定にいつまでも残っているのは、たいていこれが原因です。

削除が終わると、レポートはツールがうまく動いたと決めつけず、データベースを読み直します。macOSは一部のフルディスクアクセスのリセットを受け付けないことが知られているので、許可がすべて消えたことを確認できたと表示するか、残った許可の名前を挙げて手動で消すよう案内します。

実行中のアプリには、いちばん最初に対処します。それぞれに終了を求め、終了しなかった場合は、黙って強制終了するのではなく判断を求めます。強制終了するか、そのアプリをスキップしてファイルにいっさい手を付けないか、です。

何年も前に削除したアプリと、それが動かし続けているもの

識別子ごとにまとめられた孤立したキャッシュとログを一覧にしたUnrootの残りファイルの画面。安全な行にだけチェックが入っている
一覧に表示されるのは識別子の形をした残りファイルだけで、チェックが入るのは、macOSが必要に応じて作り直すキャッシュとログだけです。

照合を厳しく絞り込むと、その裏返しとして、すでに削除されたアプリの残りファイルはどこにも引っかからなくなります。そこで、残りファイル専用の一覧があり、あえて控えめに作っています。表示するのは識別子の形をしたもの(ドット区切りで3つ以上の部分からなり、スペースを含まない名前)だけです。会社名のフォルダは何のものかわからず、推測こそが、アンインストーラが消してはいけないものを消してしまう原因だからです。

最初からチェックが入るのは、キャッシュとログだけです。アプリのデータと設定にはチェックが入らず、その理由も画面に表示されます。一覧の中には、まだ使っているアプリに組み込まれたフレームワークが書き込んだキャッシュもあり、外からは見分けがつかないからです。この一覧は判断の出発点であって、結論ではありません。

残りファイルは何もしません。しかし、残った起動エージェントは動き続けます。何年も前に削除したアプリが、システム設定にバックグラウンド項目を表示させ続け、しかもシステム設定からはそれを削除できないのは、そのためです。そこで、同じ考え方をlaunchdにも当てはめました。頼まなくても起動するもの(起動エージェント、デーモン、アプリがSMAppServiceで登録するログインジョブ)をすべて1つの画面に一覧表示し、それぞれの持ち主を示します。この画面の名前は自動起動です。

まとめて選択できるのは、実行するプログラムがなくなっているものだけで、この慎重さこそが設計の要です。com.docker.vmnetdのようなジョブは、まだ使っているアプリとベンダーのプレフィックスが同じです。これを孤立したジョブではなく「関連あり」として格付けするのは、まさに、動いているものを「安全に削除可能」の一覧に載せないためです。実行するプログラムがまだあるジョブは、名前がどれだけ放置されているように見えても、孤立したものとは見なしません。

動いているジョブには、代わりにオフにするがあります。ジョブを今すぐ停止し、再起動後も起動しないようにします。何も移動せず、オンにするで元に戻ります。アプリが自身のバンドルの中から登録したジョブはシステム設定でしか切り替えられないため、その行でシステム設定を案内します。

あえてやらないこと

フルディスクアクセスが必要で、手動でオンにします。macOSには、アプリからこの許可を求める方法がないからです。許可がなくてもスキャンはできますが、対象はホームフォルダの外の場所だけになります。その場合はそのことを表示し、一覧が短いだけなのに何も残っていないように見せることはしません。ホームフォルダの外にあるものを削除するときは、管理者パスワードを1回だけ求められます。

一部の対象は、はっきり削除を拒否します。Apple自身のソフトウェア、Unroot自身、システム拡張です。これらは「Unrootでは削除できません」という見出しのセクションにまとめられ、自分で削除するための場所が正確に示されます。

メニューバーには常駐しません。初期状態では、アプリがゴミ箱にドラッグされるのを見張るものもありません。Unrootは開いたときにスキャンし、それ以外のときは何もしません。設定 > 一般でゴミ箱に入れられたアプリを検出をオンにすると、これが変わります。アプリがゴミ箱に入るとクリーンアップボタン付きの通知が届き、tccutilが見つけられるようにバンドルがまだある間にクリーンアップが行われます。そのタイミングを逃さないよう、Unrootはログイン時に起動し、ウインドウを開かずに動き続けます。ゴミ箱の中を見るには、フルディスクアクセスが必要です。

もう1つの常駐部分はFinder機能拡張で、システム設定 > 一般 > ログイン項目と機能拡張 > Finderでオンにするまでは動きません。オンにすると、アプリを右クリックしてアンインストールを選べるようになります。どこに表示されるかは知っておくと便利です。macOSの扱いが一定していないからです。~/Applicationsではアプリ名の入った項目としてメニューの最上位に表示され、それ以外の場所(ほとんどのアプリが入っている/Applicationsを含む)では「サービス」サブメニューの中に、もっとシンプルな「Unrootでアンインストール」として表示されます。この操作自体は何も削除しません。上部のバーのアプリをアンインストール…と同じように、選択したアプリをUnrootに渡し、同じ確認画面が開きます。

ディスククリーナーでもありませんが、アプリがどれだけ容量を使っているかは表示します。アプリ画面の最初にはストレージのカード(アプリの容量を、最後に開いた時期ごとに分けたもの)があり、その横に未使用と大きいのフィルタがあります。インストーラには、ダウンロードに残っているディスクイメージとパッケージが一覧表示され、対応するアプリがすでにインストールされているものにはチェックが入ります。対象はアプリとそのインストーラまでで、ほかのユーザーのアカウントには一切触れません。

また、Mac App Store版はありません。~/Libraryの読み取り、アクセス許可の記録のリセット、root所有のファイルの移動は、どれもサンドボックスの中からはできないからです。

価格と、ほかに見ておきたいもの

UnrootにはmacOS 14以降が必要で、Apple SiliconとIntelの両方で動作し、サイズは約10MBです。$3.99の買い切りで、カードもメールアドレスも不要な14日間の無料トライアルがあり、購入したライセンスはずっと使えます。詳しい仕様はUnrootのページにあります。AppCleaner、Pearcleaner、有料のアンインストーラとの比較はMac向けAppCleanerの代替にあります。

アプリとそのインストーラ以外のディスク容量が気になるなら、隣の領域を担うのがSweepです。自分で決めたルールでダウンロードフォルダを整理し、その中の重複ファイルや途中で止まったダウンロードを見つけます。機能ごとの解説はMacでファイルを自動で仕分けるにあります。ほかのツールの概観はMacのユーティリティアプリにまとめています。