ファイルシステムでのUnicode正規化
異なるOSとファイルシステムがUnicode正規化をどのように処理するかを学びます。macOSのNFD問題とクロスプラットフォームファイル名互換性を理解します。
Use Cases
詳細な説明
ファイルシステムの正規化
異なるオペレーティングシステムはUnicodeファイル名を異なる方法で処理します。
macOS (APFS / HFS+)
- HFS+: NFD正規化を強制(Appleの修正版NFD)
- APFS: 元の形式を保持するが、比較時にNFDライクな正規化を実行
Windows (NTFS)
NTFSはファイル名をそのまま保存 — 正規化は適用されません。NFCとNFD形式の同じ名前が別のファイルとして共存できます。
Linux (ext4, XFS, Btrfs)
ほとんどのLinuxファイルシステムはNTFSと同様に、正規化なしでファイル名を生バイトとして保存します。
クロスプラットフォームの落とし穴
- macOSの開発者が
résumé.pdfを作成 - macOSは
résumé.pdf(NFD)として保存 - ファイルがGitにコミットされる
- Windowsの開発者がチェックアウト
- NFC形式で検索するスクリプトがファイルを見つけられない
Gitと正規化
Gitのcore.precomposeUnicode設定(macOSではデフォルト:true)がNFDファイル名をインデックスでNFCに変換し、クロスプラットフォームの問題を軽減します。
ユースケース
クロスプラットフォームアプリケーション、ファイル同期ツール(DropboxやRsyncなど)、バックアップシステム、macOS・Windows・Linux間で一貫したファイル名処理が必要なビルドツールを構築する開発者にとって重要です。