ファイルの絶対パスと相対パスとは?意味と違いを徹底解説!【初心者向け】

プログラミング学習

絶対パスと相対パスがわかりません。

何が違うのでしょうか。

そして何につかうのでしょうか。

そんな疑問にお答えします!

パスとは

パスはファイルやディレクトリの場所を表す記法です。

ファイルやディレクトリの場所までの経路(path)で表すためパスと呼ばれます。

ファイルやディレクトリの構成

ファイルやディレクトリは

  • 親ディレクトリは必ず一つ
  • 子ディレクトリ、子ファイルは複数ありえる
  • ファイルは子を持たない

といった構造になっています。

例えば以下のような構成が典型的な構成です。

どのディレクトリ・ファイルを見ても必ず親は一つです。

一方、子は複数ありえます。

このような構成をツリー(木)構造と呼んだりします。

フォルダ

ディレクトリのことをフォルダと呼ぶこともあります。
この記事では「ディレクトリ」という言葉で統一してますが「フォルダ」と言い換えても同じです。

絶対パスとは

絶対パスは自分が今いる位置とは関係なく目的のディレクトリやファイルの位置を表す方法です。

一番上から順にスラッシュ(/)区切りで記述します。

例えば以下の a.txt であれば

/home/foo/a.txt

となります。

スラッシュ区切りといえば home/foo/a.txt となりそうですが、絶対パスの場合はスラッシュ(/)から始めるのがルールです。

最初のスラッシュ(/)のことをルート(root)と言ったりルートディレクトリと言ったりします。

Windows の場合は異なる点があります。

  1. ドライブレター(C:)が冒頭に付く
  2. パスの区切り文字はバックスラッシュもしくは円マーク

となります。

例えば

C:¥Users¥foo¥a.txt

のように記載されますが基本は本記事で解説していることと変わりません。

相対パスとは

相対パスは自分が今いる位置からの経路の記法です。

例えば自分が今いる位置が /home/bar とします。

この状態から a.txt の場所にたどり着くには

  1. 一つ上のディレクトリ(home) に上がる
  2. foo ディレクトリに降りる
  3. a.txt に降りる

という手順になります。

上のディレクトリを表すには特別な記法 .. (ピリオド2つ)を使います。

そのため、bar ディレクトリから a.txt への相対パスは

../foo/a.txt

となります。

補足(特別なパス表記)

.. は一つ上のディレクトリを表すと説明しましたが他にもいくつか特殊な意味を持つ表記があります。

表記意味
. (ピリオド1つ)現在いるディレクトリ
.. (ピリオド2つ)一つ上のディレクトリ
~ (チルダ)ホームディレクトリ
Windowsの場合は C:¥Users¥ユーザ名、
Linux の場合は /home/ユーザ名
Mac の場合は /Users/ユーザ名

絶対パスと相対パスの見分け方

絶対パスと相対パスは記法としては見分けるのはかんたんです。

  • スラッシュから始まっているのが絶対パス
  • スラッシュから始まっていないのが相対パス

です。

なぜ相対パスが必要なのか

絶対パスだけあればよくないですか?

という質問をよくいただきます。

相対パスが必要な理由は2つあります。

  1. タイプ数が減る
  2. 作業ディレクトリの場所が変わっても同じパスが使える

それぞれ解説していきます。

タイプ数が減る

以下のような構成で、現在 /home/foo ディレクトリにいるとします。

このとき、a.txt や b.txt の絶対パスはそれぞれ

/home/foo/bar/a.txt
/home/foo/bar/b.txt

となります。

一方相対パスなら

bar/a.txt
bar/b.txt

となり、/home/foo だけタイプ数が減ります。

これだけかと思うかもしれませんが、開発時は頻繁にコマンドを実行するので、この小さな差が大きな差となって現れてきます。

実際開発者は多くの場合で相対パスを使用します。

作業ディレクトリの場所が変わっても同じパスが使える

以下のような構成を考えます。

2つの a.txt は絶対パスでは

/home/foo/bar/a.txt
/home/baz/bar/a.txt

となります。

一方、/home/foo と /home/baz から見ると両方とも相対パスでは

bar/a.txt

となります。

このように同じ構成の場合は同じパス表記を使い回せることがあります。

これは複数人で開発しているときに便利になることがあります。

同じソースコード一式を各自のパソコンにコピーして開発をするのですが、開発者によってその置き場所は様々です。

しかし、同じソースコード一式なのでディレクトリ構成はみんな同じです。

絶対パスの場合は置き場所によってパス表記が変わってしまいますが、相対パスならみんな同じ表記を使えます。

まとめ

絶対パスと相対パスの違いについて解説しました。

  • 絶対パスは自分が今いる位置とは関係なく目的のディレクトリやファイルの位置までの経路
  • 相対パスは自分が今いる位置からの経路

プログラミングではコマンドをたくさん叩きます。
そしてコマンドではパスを多用します。

開発がはかどりますので是非理解してください。
以上「ファイルの絶対パスと相対パスとは?」でした。

タイトルとURLをコピーしました