3秒でわかる
ファイルをまとめて整理するための入れ物。画面上のフォルダと同じもので、階層構造を作って名前の衝突を防ぎ、パスで場所を指し示します。
もう少し詳しく
どういうものか
ディレクトリは、ファイルや別のディレクトリをまとめて入れておく領域です。画面上でフォルダと呼ばれているものと同じで、コマンド操作や技術文書ではディレクトリという語が使われます。中にディレクトリを入れられるので、全体は木の形をした階層構造になります。
一番上にあたるのがルートディレクトリで、Linux や macOS では /、Windows ではドライブ名が起点です。
/
├── home
│ └── taro
│ └── projects
│ └── app
│ ├── index.html
│ └── src
└── etcなぜ必要か
ファイルを1か所に並べると、数百件になった時点で目的のものを見つけられなくなります。それ以上に重要なのが、同じ名前を使い分けられることです。app/src/index.js と docs/src/index.js は名前が同じでも別のファイルとして共存できます。ディレクトリは分類の道具であると同時に、名前の衝突を防ぐ仕切りでもあります。プログラムの世界では、この仕切りがそのまま設定の探索範囲やモジュールの解決に使われます。
具体例
コマンドラインでの移動と確認は次のコマンドが基本です。
pwd # 今いるディレクトリを表示する
ls -la # 中身を隠しファイルまで含めて一覧にする
<a href="/glossary/cd" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">cd</a> projects/app # 相対パスで下へ移動
cd .. # 1つ上へ戻る
cd ~ # ホームディレクトリへ戻る
mkdir -p src/utils # 途中の階層ごとまとめて作るパスの書き方は2種類あります。/home/taro/projects のようにルートから書くのが絶対パス、projects/app のように今いる場所からの道順を書くのが相対パスです。. が現在地、.. が1つ上を指します。
つまずきやすいところ
コマンドが「そのようなファイルはありません」と返す原因は、多くの場合ファイル名の誤りではなく、いる場所が想定と違うことです。まず pwd で現在地を確認します。
隠しディレクトリの見落としも起きがちです。.git や .github のように名前が点で始まるものは ls に出ません。ls -a を使います。
rm -rf の対象を間違えると、確認も無く階層ごと消えます。ゴミ箱には入りません。実行前に、消す対象を ls で表示して目視するのが確実です。
Windows と Linux で区切り文字が違う点も引っかかりどころです。Windows は円記号やバックスラッシュ、Linux と macOS はスラッシュを使います。プログラムの中で文字列として連結せず、os.path.join や Path を使うと環境差を吸収できます。
似た用語との違い
ディレクトリとフォルダはほぼ同義で、画面上の表現がフォルダ、ファイルシステム上の実体がディレクトリという使い分けが一般的です。パスは、そのディレクトリやファイルの場所を文字列で表したものを指します。