FAQ:macOS(Finder)のタグ機能と本アプリの実装について
1. macOS のタグ(Finder Tags)とは何ですか?どこに保存されていますか?
Finder のタグはファイルのメタデータであり、ファイル本体には書き込まれず、ファイルの拡張属性(xattr)に格納されます。主なキー名は次のとおりです:
com.apple.metadata:_kMDItemUserTags
この内容はバイナリ形式の plistで、本質的には「タグの配列」です。各タグ要素にはタグ名と色番号が含まれており、色番号の範囲は 0–7 です(0:無色、1:灰色、2:緑、3:紫、4:青、5:黄、6:赤、7:オレンジ)。
したがって:
- 「ファイルにタグを付ける」という行為は、本質的には「タグのメタデータを xattr に書き込む」ことである。
- 一方で、そのタグが Spotlight で検索可能かどうかは別問題である。
2. 古い拡張属性 com.apple.FinderInfo について
com.apple.FinderInfo は、比較的古い macOS/Finder の仕組みの一つです:
- 旧仕組み:これは一つの色しか表現できず、タグ名も含まれない。
- 新システムでも書き込まれることがある:現在では主に
_kMDItemUserTagsが用いられているにもかかわらず、Finder は依然としてcom.apple.FinderInfoを同時に書き込み・更新することがあります(旧システムとの互換性のため)。
より具体的には:
- ファイルのタグ名が Finder のカスタムタグリストに存在する場合のみ、Finder は
com.apple.FinderInfoの色情報を書き込み・更新します。 - 複数の色のタグが付いている場合には、「有効なリストの中で最後に指定された色」が適用されます。
3. 多言語の問題:なぜ同じ色でも異なる言語環境では「異なるタグ」として扱われるのか?
macOS はローカライズされたタグ名の文字列を書き込みます:
- 英語環境では
Red - 中国語環境では
红色
これらはシステム上では異なるタグと見なされます。本アプリはシステム API を使ってデフォルトの色付きタグ名を取得しているため、返される結果はシステムの言語環境に依存します(「システム設定 → 一般 → 言語と地域 / 界面言語」で「自動」を選択すると、現在のシステム言語に従います)。もしシステム言語とアプリの言語が一致しない場合、タグ名に不整合が生じる可能性があります。
4. なぜアプリの設定では Finder のタグ設定と一致させる必要があるのですか?
- macOS の制限により、アプリは通常、Finder の「カスタムタグ名↔色」の設定リストを完全に読み取ることができません。
- タグを読み取る際、システム API は多くの場合「タグ名」しか返さず、直接の色情報は提供されません。そのため、アプリ側でそのタグ名に対応する色を正しく設定していないと、表示される色が誤ってしまうことがあります。
- タグを書き込む際も、システム API は通常「タグ名」しか受け取らず、最終的な色は Finder がそのタグ名に対して定義しているものになります。
5. タグのメタデータは異なるディスクやネットワーク上の場所でどのように保存されるのでしょうか?(APFS / AppleDouble / NTFS ADS)
5.1 APFS(ローカルディスク)——xattr がネイティブに保存される(最も信頼性が高い)
APFS は拡張属性をネイティブにサポートしており、タグのメタデータはファイル自体の xattr に直接保存されます。
5.2 xattr をサポートしていない/不完全にしかサポートしていない場所——AppleDouble(._元ファイル名)
対象のファイルシステムやプロトコルが xattr を確実に保存できない場合(よくあるのは FAT32、exFAT、ネットワークドライブ:SMB/WebDAV/NFS など)、macOS はメタデータを AppleDouble 形式の補助ファイルに保存します:
._元ファイル名(例:photo.jpgに対し._photo.jpg)
表示の可否:
- Finder では一切表示されません(たとえ隠しファイルの表示をオンにしても見えません);
- Terminal の
ls -laでは表示されます; - Windows では隠しファイルの表示をオンにすると表示されます(そのため、たくさんの
._小ファイルが目につきます)。
重要な注意点(タグが「消える」原因として多いケース):
- Windows または一部のツールを使ってファイルを移動/コピーする際に、元のファイルだけを移動して
._ファイルをそのまま残してしまうと、新しい場所ではタグが「消えた」ように見えてしまいます。 - 後から対応する
._ファイルも一緒に移動すれば、多くの場合タグは復活します。
5.3 SMB 接続による NTFS —— ADS(代替データストリーム)が使用される可能性あり
SMB を介して NTFS にアクセスする際、サーバー側やプロトコルの設定条件が整っている場合、macOS は ._ ファイルを作成せず、NTFS のADS(Alternate Data Streams、代替データストリーム)にメタデータを書き込むことがあります:
- ADS は NTFS 特有の機能で、一つのファイルには「メインのデータ」の他に、追加の「目に見えない付加データストリーム」を複数持つことができ、そこに追加のメタデータを格納できます。
- 利点としては、NTFS 内でファイルを移動/コピーしてもこれらのメタデータが一緒に保持されやすく、Windows ユーザーにとっても「._」ファイルが生成されないため比較的スッキリしています。
ただし注意が必要です:
- NTFS からFAT32 や exFAT へファイルを移動/コピーする場合、これらのファイルシステムは ADS/xattr などのメタデータをサポートしていないため、Windows では次のようなメッセージが表示されることがよくあります:
「本当にファイルの属性をコピーせずにファイルをコピーしますか?」 これは、追加のメタデータが破棄されることを意味しており、コピー先ではタグが保持されない可能性があります。
6. ファイルのタグ xattr を確認するにはどうすればよいですか?
コマンドラインの xattr は使いにくい:com.apple.metadata:_kMDItemUserTags といったバイナリ形式の plist属性を処理・表示することができず、正しく出力するには -px オプションを使用する必要があります。
そのため、サードパーティ製のツールを使うのがおすすめです:
- xattred:
_kMDItemUserTagsやcom.apple.FinderInfoなどの xattr を直感的に確認・検証できます。
7. Spotlight とタグの関係は?タグは Spotlight に依存していますか?
- タグ自体は Spotlight に依存しません:タグは付けた瞬間にすでにファイルの xattr に書き込まれており、インデックスに登録されているかどうかはタグの「存在」には影響しません。
- Spotlight はあくまでもインデックスエンジンであり、タグ名などのメタデータをインデックス化して、システム全体での検索を可能にする役割を果たしています。
- macOS では通常、ファイルの移動や名前変更などの操作後にインデックスが自動的に維持されます。しかし、外付けディスクやネットワークドライブ、また「検索プライバシー」に追加されたフォルダなどは Spotlight によってインデックス化されない場合があります。
8. 本アプリの「強化インデックス」は何をする機能ですか?
Spotlight がカバーできない領域(外付けディスクやネットワークドライブ、プライバシー対象のフォルダなど)において、本アプリは強化インデックス機能を提供しています:
- アプリ内でフォルダを閲覧すると、そのフォルダ内のファイルのタグ情報を記録します。
- ディレクトリツリーで特定のタグを持つ全ファイルを表示したい場合、Spotlight の検索結果に加えて、強化インデックスでヒットしたファイルも追加表示します。
- フォルダ上で右クリックし、「スキャンして更新」を選択することで、そのフォルダ内のファイルのタグインデックスを最新の状態に更新できます。