====== 正規化ファイルパスを利用する ======
ファイルパス名の正規化はシステムによって異なる。Windows/Linuxの場合は積極的にUnicode正規化を行わずNFC正規化を利用する。macOSの場合、積極的にNFD正規化を行う。
パス名の正規化方法が異なるため、macOSからパス名を取得した場合、適切な正規化を行わないとWindow/Linux上でファイルで同じファイル名のファイルができてしまう。
例: NFCは濁音・半濁音の文字を一文字で表し、NFDを2文字で表します。このため、NFCとNFD正規化のパス名が利用されると、「ガードレール」などの文字列は見た目は同じだが、NFCとNFの異なる文字列として保存される。
===== 非適合コード例 =====
**NFC変換なしのパス名生成**
// masosのNFSボリュームからのファイル名取得
$files = glob('/macos/nfs/volume/*');
// $filesを利用するとNFDの文字列を利用することになる
===== 適合コード例 =====
**NFDの文字列をNFCに正規化する**
// masosのNFSボリュームからのファイル名取得
$files = glob('/macos/nfs/volume/*');
// NFDをNFCに正規化
$normalized = array_may(function($f) { return Normalizer::normalize($f, Normalizer::FORM_C); }, $files);
// $normalizedを利用する
===== 例外 =====
NFDで正規化されていることが保証されている場合、正規化処理を省略できる。
===== リスク評価 =====
[ルール/推奨事項のリスク評価]
[評価例 - 英語表記に統一]
^ Rule ^ Severity ^ Likelihood ^ Remediation Cost ^ Priority ^ Level ^
| IDS05-J | medium | unlikely | medium | P4 | L3 |
===== 関連ガイドライン =====
===== 参考文献 =====