ガイド
MTPのしくみ:「ファイル転送」モードの裏にあるプロトコル
Androidスマホで「ファイル転送」を選ぶたびに、MTPがオンになります。MTPとは何か、なぜあのようにふるまうのか、そしてなぜMacは単独でMTPを理解できたことがないのかを説明します。
MTP(Media Transfer Protocol)は、「このデバイスを USB で充電中」の通知をタップしてファイル転送を選んだとき(Pixelではファイル転送 / Android Auto(File transfer / Android Auto))に、AndroidスマホがUSB越しに話すプロトコルです。ディスクではありません。スマホは自分のストレージの管理を手放さず、ドライブ上のブロックとしてではなく番号付きのオブジェクトとして、リクエストのたびに1つずつファイルをコンピュータに渡します。
Windowsは何年も前からMTPを理解しているので、PCではスマホがエクスプローラーに表示されます。macOSには、MTPのサポートが一度もありませんでした。だからMacでは、Androidスマホのファイルを扱うのにいつもアプリが必要で、そのファイルはたいていFinderではなく、そのアプリのウインドウの中にあります。
MTPの生い立ち
MTPは、デジタルカメラが使うPicture Transfer Protocol、PTP(ISO 15740として標準化)から生まれました。PTPは写真のために作られたものです。Microsoftは2000年代の初めに、音楽プレーヤーなどのメディア機器向けにこれを拡張しました。Microsoftのあるブログ記事は、この名前は「More Than PTP」の略だと冗談を書いたことがあります。Windows Media Player 10がMTPデバイス用のクラスドライバをもたらし、MicrosoftのPlaysForSureの名前で売られる新しいプレーヤーは、MTPへの対応が必須になりました。
2008年5月、USB Implementers ForumがMTPを正式なUSBデバイスクラスとして採用し、MTPは1社のプロトコルではなくなりました。Androidは2011年にMTPを取り入れました。ストレージをUSBディスクとして見せる代わりにMTPを使った最初の機種は、Motorola XoomのようなHoneycombタブレットです。macOSはそのままではこうした機種と通信できなかったので、GoogleはMac用のAndroid File Transferを最初から提供していました。
MTPの動き方
MTPには2つの役割があります。尋ねる側のコンピュータがイニシエーター、答える側のスマホがレスポンダーです。スマホが「ファイルが追加された」のような小さなイベントのメッセージを送ることはありますが、それを除けば、コンピュータが尋ねないかぎり何も起きません。
オブジェクトとハンドル
スマホ上のファイルとフォルダは、すべて番号を持つオブジェクトで、その番号をハンドルと呼びます。フォルダを表示するとき、MTPアプリはまずその中にあるハンドルをスマホに尋ね、次にオブジェクトごとに詳細を尋ねます。名前、サイズ、形式、そして親のハンドルです。フォルダもオブジェクトの一種で、MTPではアソシエーションと呼ばれます。プロトコル自体にはパスがありません。DCIM/Cameraを表示したいアプリは、ハンドルからハンドルへとたどって、そこまで行く必要があります。
一度に1つの操作
やり取りはどれもトランザクションで、リクエスト、必要に応じてデータのブロック、そしてレスポンスからなります。仕様はこれを同期式と定めているので、前の操作が終わるまで次の操作を始められません。Android自身のMTPサーバーは、リクエストを1つ読んで答え、それが終わってから次を読みます。受け付けるセッションも1つだけです。つまり実際には、MTPでスマホと話せるのは一度に1つのプログラムだけで、長いコピーは、次のフォルダの一覧表示も含めて、ほかのすべてを待たせます。
読み込みと書き込み
基本のプロトコルでは、スマホへのファイル送信は2段階です。新しいオブジェクトについて説明し、それからデータをすべて送ります。すでにあるファイルの一部だけを変える標準の方法はありません。読み込みのほうが柔軟で、MTP 1.1には範囲を指定してデータを取り出すGetPartialObjectがありますが、そのオフセットは32ビットの数です。GoogleはAndroidのMTPに独自の拡張を加えていて、GetPartialObject64、SendPartialObject、TruncateObject、そしてオブジェクトをその場で編集するための1組の操作などがあります。その恩恵を受けられるかどうかは、コンピュータ側のアプリしだいです。どの操作を使うかは、アプリごとに決めるからです。
もう1つ、あとで効いてくる細かい点があります。オブジェクトを説明するレコードはサイズを32ビットのフィールドに入れていて、その上限は4.3 GBのわずかに手前です。それより大きなファイルには別の64ビットのプロパティが必要で、それは別のリクエストで取得します。そして、すべてのアプリがそれを尋ねるわけではありません。Android File Transferの4 GBの制限の原因は、おそらくこれです。
Macが単独ではマウントできない理由
Finderのドライブはファイルシステムです。macOSは、パスでファイルを要求し、その任意の範囲を読み、途中に書き込み、その場で名前を変え、日付を設定し、しかもそれを複数のアプリのために同時にこなせることを前提にしています。MTPはもっと狭い用途、つまりデスクトップの音楽ライブラリがメディアプレーヤーに曲を丸ごと渡すために設計されました。オブジェクトを番号で提供し、一度に1つのトランザクションしか扱わず、その場での編集はAndroid独自の拡張を通じてしかできません。
macOSには、この2つのあいだを取り持つものが付属していません。イメージキャプチャは、MTPのもとになったカメラ用のプロトコルPTPを話すので、USB設定でPTPにしたスマホから写真と動画を取り込めます。スマホのストレージのほかの部分は見られず、MTPも話しません。
そのため、Mac用のMTPツールは、どれも独自の変換の仕組みを持っています。ほとんどはスマホを専用のウインドウに表示します。Android File Transferがそうでしたし、無料でオープンソースのOpenMTPも今もそうです。中にはさらに進んで、MTPの上にFinderのボリュームを組み立て、ファイルシステムへのリクエストをMTPの操作に変換するものもあります。無料枠を超えると有料で、adbも使えるMacDroidと、macOS 26向けの新しい無料ツールmtpfsです。一度に1つのオブジェクトしか扱えないプロトコルの上に完全なファイルシステムを作るのは大変な作業で、MTPアプリに比べてそうしたツールがずっと少ないのはそのためです。
ふだんの使い方への影響
| MTP | USBマスストレージ | adb | |
|---|---|---|---|
| コンピュータから見えるもの | 番号付きオブジェクトの一覧 | 生のディスク | シェルと、ファイルをコピーするサービス |
| そのあいだもスマホがストレージを使い続ける | はい | いいえ(手放す必要がある) | はい |
| 現在のAndroidが提供している | はい(「ファイル転送」) | いいえ | はい(USB デバッグで) |
| macOS自体が理解できる | いいえ | はい | いいえ |
| Macのどのアプリからもファイルをその場で開ける | ボリュームを作るアプリを通した場合のみ | はい | ボリュームを作るアプリを通した場合のみ |
MTPアプリのウインドウでは、中を見て回り、ファイルをMacへドラッグで出し、ドラッグで入れられます。できないのは、スマホをファイルの置き場所として扱うことです。
- ほかのアプリは、スマホ上のファイルを開けません。Lightroomで写真を編集したり、VLCで映画を再生したりするには、まずMacにコピーし、結果をコピーして戻します。
- ターミナルやrsyncからは、スマホが見えません。渡せるパスがないからです。
- 一度に使えるプログラムは1つだけです。あるアプリがすでにスマホをつかんでいると、次のアプリは接続できません。これが「Could not connect to device」の原因の1つです。
- 先にスマホのロックを解除します。Google自身のファイル転送の手順も、ロックの解除から始まります。
速度は、よく言われるほどの問題ではありません。USB 3ケーブルでつないだ最近のスマホなら、MTPは大きなファイルを速く移せます。USB 2のスマホやケーブルでは、どの方法でも約20〜40 MB/sが上限です。MTPの限界は、転送速度ではなくその設計にあります。
同じケーブルを通るもう1つの道
Androidには、USBでファイルを移す2つ目の方法があります。Androidの開発者ツールが使うadb、Android Debug Bridgeです。USB デバッグを一度オンにする必要がありますが、その代わりにコンピュータは、オブジェクトの一覧ではなく、ファイルをコピーするサービスとシェルを使えるようになります。2つの違いはadbとMTPの違いでくわしく比べています。
SideMountはこちらの道を使います。ケーブル越しに自分でadbを話し、FSKitを通してスマホをFinderのボリュームとして見せるので、Macのどのアプリからも、スマホ上のファイルをその場で開き、保存し、コピーできます。macOS 26以降とUSB デバッグが必要で、どちらもセットアップガイドで説明しています。
よくある質問
MTPとPTPは同じものですか?
いいえ。ただし、MTPはPTPの上に作られています。PTPはカメラが使うPicture Transfer Protocolで、写真のために作られました。MTPは、それをあらゆる種類のファイルに広げたものです。AndroidスマホのUSB設定では、「PTP」は写真と動画だけを、「ファイル転送」はMTPを提供します。
MTPは遅いですか?
最近のスマホなら遅くありません。USB 3ケーブルなら、MTPは大きなファイルを速く移せます。本当の限界は、Macが単独ではマウントできないこと、一度に1つの操作しかできないこと、一度に1つのプログラムしかスマホを使えないことです。USB 2のスマホやケーブルでは、どの方法でも約20〜40 MB/sが上限です。
スマホをつないでもMacに表示されないのはなぜですか?
macOSにはMTPのサポートがないので、ファイル転送モードのスマホは、MTPかadbを話すアプリが動くまでどこにも表示されません。確認すべきことはAndroidスマホがMacに表示されないときにまとめています。
MTPで、スマホ上のファイルをコピーせずに開けますか?
プロトコルはファイルの一部を読めますし、Androidはその場で編集するための操作も加えています。その場でファイルを開けるかどうかは、Mac側のアプリしだいです。専用のウインドウを持つアプリはファイルをコピーして取り出します。Finderのボリュームを作るアプリなら、ほかのアプリがファイルをその場で開けます。