Mac で iMessage の会話をまるごと書き出す方法
「メッセージ」に書き出しコマンドがない理由、それでも使える無料の方法、Mac に同期されなかった履歴を得る方法、そして何年後でも開けるアルバムにする方法。
· 1 min read
macOS の「メッセージ」に書き出しコマンドはありません。これまで一度もありませんでした。この疑問を検索すると、上位に出てくるのは Apple サポートのスレッドと Reddit の投稿です。標準機能がこの問題をどれだけ解決してきたかが、それでよく分かります。
以下が実際に使える方法です。
会話はどこにあるか
Mac では、「メッセージ」はすべてを ~/Library/Messages/chat.db の SQLite データベースに保存し、添付ファイルは ~/Library/Messages/Attachments/ に置きます。どちらも macOS が保護しており、「システム設定」でフルディスクアクセスを与えられていないアプリは読めません。フォルダも標準では Finder から隠されています。
ここから 2 つのことが導かれ、この話題をめぐる混乱のほとんどはこれで説明できます。
- メッセージを書き出すツールにはフルディスクアクセスが必要です。 それ自体は危険信号ではなく、macOS が許す唯一の方法です。重要なのは、ファイルを読んだあとにそのツールが何をするかです。
- このデータベースは Apple の非公開の内部仕様です。 構造は macOS のバージョン間で予告なく変わります。書き出しツールに更新が必要なのはそのためで、書き出したアルバムを Apple の形式にすべきでないのも同じ理由です。
方法 1: PDF に印刷する(無料・標準機能・制限あり)
- 「メッセージ」を開き、会話を選びます。
- Command + 上矢印 を押し続けてスレッドのいちばん上まで移動し、古いメッセージの読み込みが止まるまで続けます。
- 「ファイル › プリント」、そして「PDF › PDF として保存」。
これで動きますし、短い会話ならこれが正解です。現実的な制限が 2 つあります。スクロールでスレッド全体を読み込む必要があり、何年分もあると苦行であること。そして PDF は再生できるビデオや音声を持てないことです。
方法 2: 自分でデータベースを問い合わせる(無料・技術的)
chat.db は標準的な SQLite ファイルなので、直接問い合わせられます。まずターミナルにフルディスクアクセスを与えてから:
sqlite3 ~/Library/Messages/chat.db
手作業でやる人がはまりがちな落とし穴が 3 つあります。
- タイムスタンプは Unix 時間ではありません。 「メッセージ」は 2001-01-01 からのナノ秒を保存しているので、
datetime(message.date/1000000000 + 978307200, 'unixepoch')が必要です。 textはしばしば NULL です。 最近のメッセージは本文を、単純なtext列ではなくattributedBody(Apple のシリアライズされた typedstream)に保存しています。これを正しくデコードすることが、この問題全体でいちばん難しい部分です。バイナリを安直に UTF-16 として扱うと、ほとんど正しく見える文字化けが生まれます。- 読み取り専用で開いてください。
file:...?mode=roを使えば、うっかりしたクエリが稼働中のメッセージデータベースに書き込むことはありません。
この方法を手作業ではなくきちんとやりたいなら、imessage-exporter が無料・オープンソースで、typedstream のデコードを正しく行います。
方法 3: アルバムとして書き出す(多くの人が本当に求めているもの)
多くの人が求めている結果は、手元に置いておけるフォルダです。会話全体が、特別なソフトなしで読め、写真とビデオもそのまま入っているもの。
つまり、次を満たす書き出しです。
- 双方のすべてのメッセージが、順番どおりに、タイムスタンプ付きで。
- すべての添付ファイルが元の品質のままコピーされていること。文書の中に縮小して埋め込まれていないこと。
- 作ったツールに依存しない形式であること。素の HTML・JSON・Markdown はどれも該当します。独自形式のデータベースは該当しません。
この分類には imessage-exporter、iMazing、Decipher TextMessage、そしてこのサイトを作った Message Album があります。Message Album がとくに重視しているのは最後の点です。書き出しはフレームワークも CDN も外部フォントもサーバーも使わない自己完結型のオフラインサイトで、SHA-256 チェックサムのマニフェストが付きます。保管しているものが、依存先が消えたせいで動かなくなるべきではない、という考えに基づいています。
Mac に同期されなかった履歴を手に入れる
ここは多くの手引きが飛ばす手順で、書き出しが不完全になる理由になりがちです。
Mac にあるのは、その Mac に同期されたメッセージだけです。その Mac を持つ前に始まった会話や、「iCloud のメッセージ」が古い添付ファイルを退避している場合、Mac 自身のライブラリから書き出すと黙って取りこぼします。
対処法は、iPhone のバックアップから書き出すことです。
- iPhone か iPad を接続し、Finder を開きます。
- サイドバーでデバイスを選びます。
- 「今すぐバックアップ」を選びます。暗号化してもしなくてもメッセージは含まれます。ヘルスケアなど保護されたデータも欲しい場合は「ローカルバックアップを暗号化」にチェックを入れてください。
- 書き出しツールを、Mac のライブラリではなくそのバックアップに向けます。
バックアップには iPhone の中身が入っており、それはたいてい Mac に届いた分より多いのです。
書き出しが完全かどうかの見分け方
使うツールに 1 つだけ問いかけてください。何かが欠けていたとき、そのツールはどうするのか?
ローカルにダウンロードされたことのない添付ファイルも、デコードできない Apple 独自のメッセージ内容も、どちらも珍しいことではありません。それらを明示的な警告として報告するツールなら、自分が何を持っているか分かります。黙って落とすツールは、完全に見えて実はそうでないアルバムを残し、特定の写真を探しに行った日まで気づけません。
件数も確認してください。読み取り元から何件読み、出力に何件書いたかをツールが示すなら、その 2 つの数は一致するか、差が説明されているべきです。
書き出したあとにすること
1 か所にしかないアルバムは、保管されているのではなく置かれているだけです。別の場所にもコピーしてください。外付けディスク、別のマシン、好みのクラウドストレージ。良い書き出しは普通のファイルが入った普通のフォルダなので、これはフォルダをコピーするだけの話です。
書き出しにチェックサムが含まれているなら、マニフェストも一緒に保管してください。5 年後に、目の前のコピーが無傷だと確認できる唯一のものです。