カレントディレクトリに src/constants/ というディレクトリがまだ存在しない状態で、touch src/constants/main.ts を実行すると touch: src/constants/main.ts: No such file or directory というエラーが出ました。このエラーの原因として最も正しい説明はどれですか?
解説
正解は「親ディレクトリが存在しないためファイルを作成できない」です。touchは存在しないファイルを新規作成できる便利なコマンドですが、その対象となる親ディレクトリは事前に存在している必要があります。今回のケースではsrc/constants/というディレクトリ自体がまだ無いため、その中にmain.tsを置こうとしても「置き場所がない」状態でNo such file or directoryと怒られます。touchがタイムスタンプ更新専用というのは誤りで(むしろファイル作成は副次的な機能ですが日常的に使われます)、拡張子も無関係、macOS固有の制限でもありません。なぜtouchは親ディレクトリを作ってくれないのかUNIX系コマンドの設計思想として「1つのコマンドは1つのことだけをうまくやる」という原則があります。touchの責務は「ファイルのタイムスタンプを更新すること(ファイルが無ければ空ファイルを作る)」であって、ディレクトリ構造を整えることではありません。だからこそ、ディレクトリ作成はmkdirの仕事として明確に分離されています。「親ディレクトリも勝手に作ってくれればいいのに」と感じるかもしれませんが、もしそうなっていたら、タイプミスで意図しないディレクトリが量産される事故が起きやすくなります。「途中のディレクトリごと作りたい」ときの定番パターン新しいファイルを深い階層に作りたいときは、次の2ステップが定石です。mkdir -p src/constants
touch src/constants/main.tsmkdirの-pオプションは「parents」の意味で、途中のディレクトリが無ければまとめて作ってくれます。-pを付けないと、src/が存在しない場合に同じくエラーになります。1行で済ませたいならコマンドを&&でつなぐのが定番です。mkdir -p src/constants && touch src/constants/main.ts