これは何?
Finderのラベル/タグについて調べた。
Finder label / Finder tag
太古の昔からFinderではファイルに色つきのラベルを付けてファイルの整理などに利用することが出来ました。
また、Mavericksからユーザーが独自にタグを設定できる用になりました。
ただし、labelの互換性を重視したため、若干意味不明になっています。
このあたりを調べてみました。
Finder Label
Finder Labelは太古の昔より存在し、今もなお互換性を保とうとしているのかしていないのか謎の存在です。
太古の昔より現在に至るまでFinder LabelはFinder内では数値により管理されています。
この対応表は以下のようになります。
数値 | 色 |
---|---|
0 | なし |
1 | グレイ |
2 | グリーン |
3 | パープル |
4 | ブルー |
5 | イエロー |
6 | レッド |
7 | オレンジ |
この数値はファイルシステム上の拡張属性 com.apple.FinderInfo に保存されます。
ここまではいいのですが、現在の Finder では別の並び順が与えられています。
これは Finder の UserDefaults のキーFavoriteTagNamesに配列として記録されています。
この値はFinderの環境設定より変更可能です。
理由は不明ですが、この順番はラベルの数値とは変わっています。
日本語環境のデフォルトでは以下のようになります。
FavoriteTagNames のindex |
値 |
---|---|
0 | (空文字列) |
1 | レッド |
2 | オレンジ |
3 | イエロー |
4 | グリーン |
5 | ブルー |
6 | パープル |
7 | グレイ |
Finder内での数値、色、FavoriteTagNamesのindexは以下の通りになります。
数値 | 色 | FavoriteTagNames のindex |
---|---|---|
0 | なし | 0 |
1 | グレイ | 7 |
2 | グリーン | 4 |
3 | パープル | 6 |
4 | ブルー | 5 |
5 | イエロー | 3 |
6 | レッド | 1 |
7 | オレンジ | 2 |
Finder Tag
Finder tagはMac OS X Marericsより追加された要素で、一般的なタグ同様に任意の数だけ、任意の文字列のタグを設定出来るようになっています。
値として、文字列と色の番号(Labelに用いられる番号)を\n区切りで連結した文字列が用いられる。
ex) タグ「ほげ」色「レッド」の時の値
"ほげ\n6"
この値はファイルシステム上の拡張属性 com.apple.metadata:_kMDItemUserTags にplistの配列で保存されます。
Finder Label と Finder Tag の魔融合
AppleはFinderにtagを実装するに当たり以下の仕様を要求したと思われます。
- Finder Labelは互換性を保つ
- ユーザーにLabelとTagの違いを認識させない
この2つの相反すると思われる仕様を満たすため、Finderの内部実装は奇妙なものとなっています。
Finder上でLabelを付与する
Finder上でLabelを付与すると以下の2つが行われます。
- com.apple.FinderInfo に数値を設定する
- com.apple.metadata:_kMDItemUserTagsに以下の文字列を追加する。
0. ラベル名とラベルの数値を\nで連結した文字列
Finder上でLabelを削除する
Finder上でLabelを削除すると以下の2つが行われます。
- com.apple.FinderInfo を削除する
- com.apple.metadata:_kMDItemUserTagsから対応する文字列を削除する。
Finderの環境設定でラベル名を変更する
Finderの環境設定でラベル名を変更すると以下のことが行われます。
- com.apple.metadata:_kMDItemUserTagsから対応する文字列を新しい文字列に置換する。
Finder上でTagを付与する
Finder上でTagを付与すると以下のことが行われます。
- com.apple.metadata:_kMDItemUserTagsに以下の文字列を追加する。
0. タグと色の数値を\nで連結した文字列。色が設定されていない場合は数値は0。
Finder上でTagを削除する
Finder上でTagを削除すると以下のことが行われます。
- com.apple.metadata:_kMDItemUserTagsから対応する文字列を削除する。
Finderの環境設定でタグ/タグの色を変更する
Finderの環境設定でタグ/タグの色を変更すると以下のことが行われます。
- com.apple.metadata:_kMDItemUserTagsから対応する文字列を新しい文字列に置換する。
魔融合の問題
Finder上でLabelを操作する上では問題は起きないが、拡張属性はFinderを介することなく操作できるため、齟齬が発生することがあります。
ただし、Finderはこの齟齬を黙って無視しますので、普通は問題ありません。
また、Finderが同期するようです。(タイミング不明)
NSURLによるTagへのアクセス
Finder Tagは上記方法により正しく設定される。
Finder Labelが上記方法により設定された場合、com.apple.FinderInfo は正しく設定されるが、com.apple.metadata:_kMDItemUserTags は変更されない。
すでにLabelが設定されている場合、com.apple.metadata:_kMDItemUserTags が変更されないため、Labelの変更ではなく追加となる。
まとめ
互換性のためと思われるが、かなり危うい方法が用いられている。
ぎりぎりセーフ。