Appleが何年も放置してきたMacの取り出し問題

Macユーザーは、PowerPC時代から曖昧な取り出しエラーメッセージに不満を訴えてきました。Appleはそれを一度も修正していません。この困った問題の歴史をご紹介します。

Macで外付けドライブを取り出そうとすると、ときどきこのメッセージが表示されます。「1つ以上のプログラムがこのディスクを使用している可能性があるため、ディスクを取り出せませんでした。」

「1つ以上のプログラム」。「使用している可能性がある」。「使用しています」ではありません。どのプログラムなのかも分かりません。ただ、どこかで何かがファイルを開いているかもしれない、という漠然とした言いがかりだけです。

このエラーメッセージは、実質的に同じ形のまま15年以上も存在し続けています。Macユーザーは、少なくともSnow Leopardの時代から、Appleのサポートフォーラムで修正を求め続けてきました。不満の声は、あらゆるmacOSのバージョンを通じて続いています。Mountain Lion、Mavericks、Catalina、Monterey、Ventura、Sonoma、Sequoia。メッセージは決して変わりません。Appleは決して直しません。

問題は明白

ディスクを取り出せないとき、必要な情報は2つです。どのプロセスがそれを塞いでいるのか、そしてそのプロセスをどう止めればよいのか。macOSはそのどちらも教えてくれません。

オペレーティングシステムは、どのプロセスがドライブ上でファイルを開いているのかを正確に把握しています。把握していなければ、取り出しを許可してよいかどうか判断できないのですから、当然です。ところがmacOSは、その情報を共有する代わりに、肩をすくめる絵文字を文章にしたようなものを返してくるのです。

これを、指定したパス上でファイルを開いているすべてのプロセスを一覧表示するターミナルコマンド lsof と比べてみてください。情報は存在します。アクセスも可能です。Appleはただ、それをエラーダイアログに載せないことを選んだだけなのです。

ユーザーが実際にやっていること

この役に立たないエラーメッセージに直面したMacユーザーたちは、フォーラムの投稿やブログのコメントを通じて受け継がれてきた、回避策の民間伝承のようなものを編み出してきました。

楽観的な人は、しばらく待ってもう一度試し、その謎のプロセスが自然に終わるのを期待します。うまくいくこともあります。いかないことも多々あります。

技術に明るい人はターミナルを開いて lsof /Volumes/DriveName を実行し、その出力を読み解いて犯人を特定します。これには、そのコマンドの存在を知っていること、出力の読み方を理解していること、そしてプロセスを終了させることに抵抗がないことが求められます。

せっかちな人は強制的に取り出して、うまくいくことを祈ります。問題ないこともあります。データが壊れることもあります。実際に何がドライブを使っているのかを知らなければ、そのリスクを評価する術はありません。

うんざりした人は、ただMacを再起動します。これは確実にうまくいきますが、ドライブを取り外すためにコンピューターを再起動しなければならないというのは馬鹿げています。

なぜAppleはこれを直さないのか

確かなことはAppleにしか分かりませんが、いくつかの推測はできます。

エラーダイアログを変更する必要があり、Appleは歴史的に、ユーザーに見えるメッセージを複雑にすることを避けてきました。しかし「Safariがこのディスクを使用しています」は、「1つ以上のプログラムが使用している可能性があります」よりも複雑ではありません。むしろ役に立ちます。

ブロックしているプロセスの一覧が、特殊なケースでは長く、あるいは分かりにくくなることもあるでしょう。確かにそうですが、最も可能性の高い犯人を1つ表示するだけでも、何も表示しないよりは無限にましです。そして特殊なケースには、「詳細を表示」ボタンを設けるのが一般的なやり方です。

ほとんどのユーザーは、この問題にそう頻繁には遭遇しないので、大きな声で文句を言うほどではないのかもしれません。たぶんそうでしょう。しかしAppleサポートコミュニティやMacRumorsのフォーラムには、何年も前から続くスレッドがあふれています。問題はしっかりと記録されています。

本当の答えは、おそらく優先順位の問題です。Appleのエンジニアリングリソースには限りがあり、この問題は厄介ではあるものの、人々がMacを使うこと自体を妨げるわけではありません。ただ、数週間に一度、画面に向かって悪態をつかせるだけなのです。

問題は悪化している

外付けストレージがますます一般的になるにつれて(高速なUSB-C SSD、ビデオ編集用のポータブルドライブ、Time Machine用のバックアップドライブなど)、ユーザーがこのエラーに遭遇する頻度は高まっています。

macOS自体も、外付けドライブにアクセスするバックグラウンドプロセスをより多く実行するようになっています。Spotlightのインデックス作成、Time Machineの監視、iCloudの同期、さまざまなデーモンプロセス。ブロックする可能性のあるものの数は増えているのに、エラーメッセージは相変わらず曖昧なままです。

古いMacから移行したユーザーは、Apple Siliconのマシンでこの問題がより頻繁に起こると報告しています。これがソフトウェアの変更によるものなのか、単なる体感なのかは定かではありませんが、M1への移行以降、不満の声は強まっています。

サードパーティ製の解決策は存在する

サードパーティの開発者たちがこの問題を中心に据えたアプリケーションを丸ごと作り上げてきたという事実が、何かを物語っています。

What’s Keeping Me は、どのプロセスがドライブを塞いでいるかを表示する人気のユーティリティでした。数年前に開発が止まり、現在のmacOSでは動作しなくなっていますが、その存在は、この機能に対する需要があったことを証明しています。

このギャップを埋めるために、さまざまなメニューバーユーティリティやスクリプトが登場してきました。ドライブを監視し、取り出しの問題が起こる前に警告してくれるものもあります。lsof のワークフローを自動化して、ターミナルコマンドを打たなくて済むようにしてくれるものもあります。

こうしたツールは、本来存在する必要がないものです。それらが提供している機能は、Appleが公開しないことを選んだだけの、基本的なオペレーティングシステムの能力なのです。

修正されたら、こうなるはず

最低限の実現可能な修正は単純です。エラーダイアログを、どのプロセスが取り出しを妨げているかを示すように変えるだけです。「Spotlightがインデックス作成中のため、ディスクを取り出せません」と表示されれば、何が起きているかが正確に分かります。インデックス作成が終わるのを待つこともできますし、Spotlightを終了させることもできますし、リスクを承知のうえで強制的に取り出すと決めることもできます。

さらに優れた修正は、ブロックしているプロセスをダイアログから直接終了させる選択肢を加えることです。「Safariがこのディスク上でファイルを開いています。[Safariを終了して取り出す] [キャンセル]」とすれば、アクティビティモニタを探し回らなくても、ワンクリックで問題が解決します。

理想的な修正は、先回りするものです。外付けドライブに未保存の変更があるとき、あるいはバックグラウンドプロセスがそれを活発に使用しているときに、ユーザーに警告するのです。取り出そうとして苛立つ前に、人々に知らせてあげればよいのです。

これらのどれも技術的に難しいものではありません。最も難しいのは、おそらくその変更をそもそも実行するという製品上の判断でしょう。

さしあたり

Appleはいずれこれを直すかもしれません。星回りが揃えば、長年の悩みの種に対処することもあると知られています。それまでは、回避策は今までどおりです。ターミナルコマンド、アクティビティモニタを使った調査、あるいはEjecta のような、その調査を代わりにやってくれるツールです。

ドライブを取り外すのに、これほど手間がかかるべきではありません。しかし実際には手間がかかり、それが何年も続いていて、しかもAppleは気にも留めていないように見えるのです。

毎回ターミナルを使いたくないなら、Ejectaがどのプロセスがドライブをブロックしているかを正確に表示します。しかもメニューバーから、ワンクリックでそのプロセスを終了できます。

今すぐ購入 — $9.99