仕事でたまたま大文字と小文字を間違っているディレクトリ名を渡されて、それをそのまま使ってcdで移動したらあら不思議、移動できてしまったよという話をメモしておく。検証環境はmacOS(Mojave) 10.14.2。
起きたことの詳細
ある日、僕のmacの中でこんな不思議なことが起こった:
1 2 3 4 5 6 7 8 9 10 11 |
MasyusWork:Desktop masyus-work$ mkdir hoge MasyusWork:Desktop masyus-work$ touch hoge/aaa.txt MasyusWork:Desktop masyus-work$ cd Hoge MasyusWork:Hoge masyus-work$ ls -la total 0 drwxr-xr-x 3 masyus-work staff 96 3 22 13:15 . drwx------+ 17 masyus-work staff 544 3 22 13:15 .. -rw-r--r-- 1 masyus-work staff 0 3 22 13:15 aaa.txt MasyusWork:Hoge masyus-work$ pwd /Users/masyus-work/Desktop/Hoge MasyusWork:Hoge masyus-work$ |
hogeという名前のディレクトリを作ったけど、cdでHogeと指定すると
「むむむ、hogeのディレクトリの中にいる…なぜ?」
という現象。
macOSが大文字・小文字を区別しないのは、どうやらApple File System(APFS)のデフォルト仕様らしい
いろいろ調べた結果、至った結論がこれ。
macOSが大文字・小文字を区別しないのは、どうやらApple File System(APFS)のデフォルト仕様らしい
ということ。たぶんmacを初回起動させた時にストレージのファイルシステムタイプを特に気にせず通常のAPFSで選んでいたから起こった話なのだろうと解釈している。以下に多少なり詳細が書いてあった。
このページを読んでみると、APFSを選択時に
ファイル名およびフォルダ名の大文字/小文字を区別できるAPFSを選択できる
とのこと。ほぉーなるほど。
エンジニアやってる身として、ファイル・フォルダ名の大文字/小文字を区別してくれないことについて
一応エンジニアやってる身としては、大文字小文字の差とはいえど、ファイル名やフォルダ名が間違ってたら何でも良いのでエラー返して欲しい気分ではある。だって厳密には名前間違っているのにちゃんと動いてしまうとか、なかなか心臓に悪い話だ。本番作業時にこの現象に遭遇してしまったらと思うと、胸がざわつく。
なんかいろいろ思い至るものがあったが、一応僕がdockerで立てたweb用のコンテナ(Amazon Linux AMI使用)内でも同じことが起こりうるのか調べてみた:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
bash-4.2# mkdir hoge bash-4.2# touch hoge/aaa.txt bash-4.2# cd Hoge bash-4.2# ls -la total 0 drwxr-xr-x 3 root root 96 Mar 22 04:35 . drwxr-xr-x 6 root root 192 Mar 22 04:35 .. -rw-r--r-- 1 root root 0 Mar 22 04:35 aaa.txt bash-4.2# pwd /tmp/Hoge bash-4.2# cat /etc/issue Amazon Linux AMI release 2018.03 Kernel \r on an \m bash-4.2# |
おぉ、そうきたか。。まぁ仕方ないか、そういうことが起こりうるんだと知っておくことが大事かな。
実際のところ、大文字/小文字は区別できたほうが良いのだろうかね?未だかつてあまり意識したことはないのだけど、最近dockerでmountさせるvolumeに関してちょっと頭を悩ませたりしたことがあったので、ファイルシステム周りに興味を持ち始めている昨今。ベストプラクティスは開発チーム内で議論してみようと思う。