パスとは何か
パス(path)は、ファイルやディレクトリがどこにあるかを、階層に沿って表す文字列です。開発中に「ファイルが見つからない」と表示されたときは、内容より先にパスと現在地を確認します。
ファイルシステムのパスとURLのパスは似た形をしますが、参照する仕組みが違います。
一文でいうと
パスとは、基準となる場所から目的のファイルやディレクトリまでの道順を表したものです。
Microsoft Learnは、パスをデータの場所を示す文字列表現として説明しています。Node.jsの node:path も、ファイルとディレクトリのパスを扱う機能を提供しています。
個人開発のどこで登場するか
コードの読み込み、画像の表示、設定ファイルの指定、CLIの移動、ビルドの出力先などで登場します。
たとえば src/images/logo.svg は、src の中の images を通って logo.svg へ進むパスです。ただし、どこを基準に読むかが決まらなければ、同じ文字列でも違う場所を指します。
エラーメッセージにパスが出たら、次の三点を見ます。
基準となる現在地
実際に存在する名前と大文字・小文字
実行環境がWindowsか、POSIX系か
絶対パスと相対パスを分ける
絶対パスは、ルートやドライブなど決まった起点から場所を示します。相対パスは、現在の作業ディレクトリや現在のファイルなど、別の場所を基準に示します。
Windowsの絶対パス例:
C:\projects\book-log\src\app.tsPOSIX系の絶対パス例:
/home/user/book-log/src/app.ts相対パス例:
src/app.ts一つ上を経由する相対パス例:
../shared/config.json
相対パスはプロジェクトを別の場所へ移しても使いやすい一方、基準が変わると別の対象になります。エラー調査では、ツールが何を基準に解決するかを確認します。
URLやファイル名と区別する
ファイル名:一つの場所にある対象の名前
ファイルシステムのパス:端末やサーバー内のファイル・ディレクトリの場所
URLのパス:Webサーバー上の資源や処理を識別するURLの一部分
/articles/what-is-a-path/ が、サーバー内の同名ディレクトリをそのまま指すとは限りません。WebアプリはURLを受け取り、データベース検索やプログラムの処理へ対応付けることもできます。
区切り文字も環境で違います。文字列を手作業で連結せず、使っている言語のパス用機能を利用すると差を吸収しやすくなります。
外部入力をそのまま結合しない
利用者が入力したファイル名やURLの一部を、そのまま保存先のパスへ足すと、.. などによって予定したディレクトリの外へ到達する危険があります。
保存を許可する基準ディレクトリを決める
許可する名前や拡張子を検証する
正規化後のパスが基準内にあるか確認する
上書き、削除、実行の権限を必要最小限にする
エラーへ端末内の絶対パスを不用意に公開しない
削除や移動では、解決後の絶対パスを表示してから実行すると対象間違いを減らせます。
次に読む記事
パスが指す対象はファイルとは何かとディレクトリとは何かで確認できます。URL側の構成はURLとは何か、CLIでの現在地はターミナルとは何かへ進みます。