世界を動かす技術を、日本語で。

「アルファベット順」と言うとき、私は「アルファベット順」を意味します

概要

  • ファイル名の ソート順 が期待通りにならない現象の体験談。
  • 多くの ファイルマネージャ が「自然順ソート」を採用している事実。
  • ファイル名の 微妙な違い がソート順に影響する理由。
  • 問題の 原因特定 と解決方法の発見。
  • 昔ながらの シンプルな挙動 への懐古。

ファイル名ソート問題の体験談

  • 父親と マルチデイハイク を行い、写真を共有フォルダに集約。
  • 両者とも Androidスマートフォン を使用、ファイル名規則は「IMG_YYYYMMDD_HHmmss...jpg」形式。
  • アルファベット順=日付順になるはずと 期待
  • Windows PCで確認したところ、 自分の写真→父親の写真 の順に並ぶ現象発生。
  • Google DriveやKDE Dolphinなど、 他のファイルマネージャ でも同様の並び順。
  • lsコマンド (Linux/Unix系)では期待通りにソートされる。

ソートアルゴリズムの違い

  • 一般的な ファイルマネージャ は「自然順ソート(natural sort)」を採用。
    • 例:file-9.txtの前にfile-10.txtが来るのを 防ぐ ため。
    • 数字部分を 数値として解釈 して並び替える方式。
  • lsコマンドや一部ツールは 純粋なアルファベット順 でソート。
  • ファイル名の アンダースコア有無 や数字の区切り方が、自然順ソートで大きな影響。

原因の特定

  • 父親のスマホは 秒の直後にミリ秒 を連結、筆者のスマホは アンダースコアで区切り
  • 自然順ソート時、 区切りの違い でミリ秒部分が「大きな数字」として扱われ、順序が崩れる。
  • 例:IMG_20250820_092016029_HDR.jpgとIMG_20250820_092832138_HDR.jpgの並び順。

解決策と感想

  • ファイル名を統一 してリネームすることで根本的に解決可能。
  • Dolphinの設定で 自然順ソートを無効化 できるが、設定は深い場所にあり面倒。
  • 全アプリで毎回設定変更は 現実的でない
  • 昔のコンピュータ の「言われた通りに動く」挙動への懐かしさ。

まとめと教訓

  • 自然順ソート が普及した背景にはユーザビリティ向上の意図。
  • しかし、 ファイル名規則の不統一 があると逆に混乱を招く場合も多い。
  • 共有フォルダでは ファイル名付与ルールの統一 が重要。
  • ソートの仕組みを理解し、 必要に応じて設定変更やリネーム を検討することが推奨。

Hackerたちの意見

“特定の言語では、比較が文脈に依存し、単一の文字を直接比較するだけではないという追加の複雑さがあります。 […] 数字については、数値順にソートするためのカスタマイズが必要かもしれません。数字を含む文字列を単にアルファベット順にソートすると、「A-10」が「A-2」よりも前に来てしまうことが多く、これは望ましくないことがよくあります。この動作はカスタマイズ可能ですが、文字列内の数字を認識する際の曖昧さによって複雑になります(なぜなら、異なる言語の規則に従ってフォーマットされることがあるからです)。各数字が認識されると、それを正しい数値ソートができる形式に変換するための前処理が行われます。たとえば、IEEEの数値フォーマットのテキストバージョンなどです。”* このファイルブラウザは正しい選択をしたと思います。この例のように、必ずしも正しいことをするわけではないにしても。

でも、-10は-2より小さいよね?

この記事で紹介されているバージョンソートがほぼ常に欲しいです。「アルファベット順」のソートよりもね。でも、一方で、これが「アルファベット順」として提示されるのは明らかにバグだと思います。「アルファベット/数値」みたいなラベルが必要です。つまり、ソートの問題ではなく、ラベリングの問題です。

そうそう、まさにその通り。説明されている動作は実際に非常に便利なんだよね。問題は、ユーザーに警告もなくオプションもなしにそれを強制することだよ。

でも、これはアルファベット順のソートとして提示されてるわけじゃないよ。著者は名前順がアルファベット順を意味すると思ってたけど、そういうラベルにはなってないんだ。

記事で言ってるソートのことをレキシカルソートって言うけど、問題は人々がバカだってことだよね。普通のユーザーはレキシカルソートとアルファベットソートの違いなんて知らないから。

注目すべきは、Linuxの「sort」のいくつかのバージョンには、今はバージョンソートがあるってことだね。sort -V。内部でどう動いてるか正確には分からないけど、ちょっと魔法みたいなもので、ファイルを探すときはいつも使ってるよ。ほとんどの場合、ちゃんと動くからね。もちろん、オンオフが簡単にできるのもいいところだね。

わかるけど、もし主要なオペレーティングシステムがこの同じ曖昧な状況を同じように扱っているなら、自分のメンタルモデルや期待を再評価する必要があるかもしれないね。私がズレてるのかな?いや、オペレーティングシステムが間違ってるんだよ。数字はアルファベットの一部じゃないから。

これって結構有名なことだと思ってた。例えば、macOSのFoundationライブラリはNSString.localizedStandardCompare()を公開していて、Finderで使われるソートアルゴリズムを実装してるから、ちゃんとしたmacOSアプリはこれを使うべきなんだ。WindowsはStrCompareLogicalを使ってるよ。

lsと同じように動くと思ってたから、この記事は面白かった。でも今は、こっちの方がいいと思うようになった。純粋にアルファベット順でソートする必要があるケースは思いつかないな。ほとんどの写真閲覧アプリでは、写真はファイル名じゃなくてタイムスタンプでソートされるし。もしファイルエクスプローラーでちゃんとソートしたいなら、作成日でソートするだろうし。それがダメなら、ファイル名を正規化するかも。

Microsoft/Google/KDEの順番に賛成だな。著者の状況は非常に稀で、「10」が「9」より前に来ることを望む人の方がずっと多いと思う。それに、デスクトップはこのソートを「アルファベット順」とはラベル付けしてないし(実際には「辞書順」なんだけど)、それを「名前順」とラベル付けしてるから、技術的には嘘をついてるわけじゃない。> コンピュータが自分の言った通りに動いてくれた時代が懐かしい。今は、こっちの考えを読もうとするばかりだ。あの頃を美化して見てるかもしれないけど、私もコンピュータに嘘をつかれるのは嫌だ。でも、「心を読む」って、オートセーブみたいに当たり前のように役立つこともあるんだよね。デスクトップには本当にアルファベット順にファイルをソートするオプションがあってもいいけど、より一般的なケースが常にデフォルトであるべきだと思う。それが「直感的」の定義だよ。

ファイル9がファイル10の前ってこと?マイクロソフトにはちょっと不満があるんだけど、これをユーザーごとに変更できないのがね(下のレジストリキー参照)。ユーザー向けには「ナチュラルソート」って呼んでるけど、内部では論理ソートって言ってるし。用語を統一してよ! [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer] "NoStrCmpLogical"=dword:00000001

Hacker Newsで議論の続きを見る