PC上でファイルを探すときやプログラミングを学ぶときに、絶対パスや相対パスという言葉を使うことがある。絶対パスや相対パスとはどのようなもので、どのような違いがあるのだろうか。この記事では、絶対パスと相対パスの違いとはどのようなものなのか、詳しく解説する。
そもそも「パス」とは?
プログラミングやWeb開発をしていると、「パス」という言葉を目にすることがある。また、「絶対パス」や「相対パス」という言葉も目にする。絶対パスや相対パスとはどのような意味なのだろうか。この記事では、絶対パスや相対パスの意味や調べ方などについて詳しく見ていこう。
まずは、そもそもパスという言葉の意味はどういったものなのか解説する。
・目的のファイルがどこのフォルダに保存されているかを示す道順のこと
パスとは英語の「path(道)」のことである。パスとは、どの階層のどこのフォルダに目的のファイルが保存されているのかを表すための道順のことである。
PCにはさまざまなファイルが保存されている。そのファイルはフォルダごとに分類されて整理されている。PCのプログラムやシステム、ドキュメントなどのファイルは膨大な数になるので、フォルダもわかりやすく整理するために階層化されている。
目的のファイルにたどり着くための道順を表すための表記がパスなのである。
絶対パスと相対パスとの違い
パスには絶対パスと相対パスがある。絶対パスと相対パスにはどのような違いがあるのだろうか。この2つの違いとはなにか、詳しく見ていこう。
・絶対パスとは
絶対パスとは、フォルダの最上部であるルートからファイルが保存されている場所までの経路をすべて記述したものである。ユーザーがどのフォルダで作業していても、絶対パスで表記されている場合には、常に誰が見ても同じパスになる。
・相対パスとは
相対パスとは、ユーザーが現在作業している場所を基準として目指す場所へのルートを記述する方法である。相対パスで書くときには、ひとつ上の階層を「..」と書く。URLでは階層を「/」で区切るが、相対パスでは上の階層を省略して「../」と記述できる。
相対パスの書き方ではユーザーの現在地によって書き方が異なる。誰が見ても同じ記述方法となる絶対パスとの違いは、相対パスではその時によって記述方法が変わる可能性があるという点である。
パスの書き方に、絶対パスと相対パスの2通りの書き方があるのはどうしてなのだろうか。絶対パスの書き方であれば、誰が見ても同じ場所にたどり着くので、相対パスは必要ないのではないかと考える人もいる。しかし、開発の現場では相対パスが使われることも多い。
パスの書き方に絶対パスと相対パスの2通りの書き方があるのは、それぞれにメリットがあるためである。絶対パスと相対パスにどのようなメリットがあるのか、それぞれのメリットについて見ていこう。
・絶対パスのメリット
絶対パスのメリットとは、誰が見てもファイルやフォルダのある正しい場所へ簡単にたどり着くことができるという点である。絶対パスには、ルートからファイルやフォルダのある場所までが完璧に記述されている。そのパスをたどっていけば、必ず目的の場所へたどり着くことができる。
・相対パスのメリット
一方の相対パスでは、階層を正しく理解していないと、自分がどこの部分を扱っているのかがわからなくなってしまいやすいというデメリットがある。しかし、それでも相対パスが使われているのは、相対パスにもメリットがあるためである。
相対パスのメリットとは、上の階層に変更があったときでも、すべてのパスを変更しなくてもいいというメリットである。
例えばWebのURLでドメインを変更したとする。すべてのページを絶対パスで記載していたら、すべてのページのパスをドメインから変更しなければいけない。ページ数が数ページなら対応可能だが、Webサイトのページ数が多い場合には、1ページずつ手動で変更するのには膨大な手間がかかる。
このような場合に、相対パスで記述していれば、相対パスで省略された場所から上の階層に変更があっても、下の階層のフォルダやファイルのパスを変更しなくてもいい。
サイト内の内部リンクを絶対パスで記述していた場合には、ドメインを変更した場合にすべての内部リンクの書き換えが必要になる。書き換えにミスがあれば、リンク切れを起こしてしまう可能性もある。
しかし、相対パスで記述している場合には、ページ内の内部リンクを書き換える必要がない。ページごとにURLを変更したり、リンク切れを起こしたりする必要がない。
ただし、相対パスで記述するときには、常に全体像の中のどこの部分を扱っているのかを把握する必要がある。大規模なサイトや大掛かりなプロジェクトに参加する場合に、メンバーそれぞれに全体像の把握を期待するのは難しいだろう。
結果として、どのファイルがどこに保存されているのかわかりにくくなったり、離れた場所にあるファイルをリンクさせるのが困難になったりすることがある。階層構造にちょっとした変更があった場合に、リンク切れを起こしやすいというデメリットもある。
絶対パスと相対パスの調べ方と表し方
フォルダの階層が絶対パスと相対パスで記述されている場合の調べ方と、フォルダやファイルの階層の表し方について見ていこう。
絶対パスで記載されている場合には、同じフォルダやファイルのある場所は必ず同じ場所になる。例えばフォルダの階層が次のようになっている場合を見ていこう。
ルート→Aフォルダ→Bフォルダ→C.txt
Windowsでの表し方は次のとおりである。
ルート:\\Aフォルダ\Bフォルダ\C.txt
UNIX系での表し方は次のとおりである。
/ルート/Aフォルダ/Bフォルダ/C.txt
Webでの表し方は次のとおりである。
http://ルート/Aフォルダ/Bフォルダ/C.txt
絶対パスでの表し方は必ず一通りしかないので調べ方もルートまでのパスをたどることで調べることができる。
相対パスでの表し方では、現在地から目的地までの相対的な経路が表されている。相対パスでの表し方での調べ方は、現在地から目的地までの階層を一つずつたどっていくことが大切である。
フォルダの階層を上の階層にたどっていくと、目的地に向かうための分岐となる階層が出てくる。相対パスでの調べ方では、目的地へたどり着く階層まで一つずつさかのぼって移動していき、正しい分岐となる階層を見つけて移動する。この調べ方で一つずつ移動していくことが、相対パスの調べ方となる。
ファイルやプログラムを格納している場所のパスを書くときには、OSやプログラミング言語などの環境によってパスの書き方が異なる。環境ごとのパスの書き方について見ておこう。
【環境①】Windows
WindowsではコマンドプロンプトやPowerShellでパスを書くことがある。Windows環境でのパスの書き方「/」もしくは「\」で階層を区切って書く。
例:C:\xxx\yyy\zzz.txt
【環境②】UNIX・Linux
Linuxを含むUNIXの互換環境では、パスの階層の区切りの書き方は「/」のみ利用できる。MacもUNIX系OSなのでパスの書き方では「/」を利用する。なお、Windowsとは違い、UNIXではルートディレクトリは「/」のみで記載する。
例:/xxx/yyy/zzz.txt
【環境③】HTML
HTMLで記載するパスというのは、Web上のアドレス、つまりURLのことである。URLの階層の書き方は「/」で区切る。
例:http://aaa.com/bbb/ccc/ddd.html
【環境④】Java
Javaのプログラムを書くときのパスの書き方では、階層の区切りは「\\」と書く。「\」を2つ重ねる点に注意しよう。
例:C:\\xxx\\yyy\\zzz.java
【環境⑤】PHP
PHPのプログラムを書くときのパスの書き方では、階層の区切りは「/」と書く。
例:http://aaa.com/bbb/ccc/ddd.php
【環境⑥】Elcel・VBA
ExcelでVBAのマクロを作成するときのパスの書き方は、基本的に同じMicrosoftから発売されているWindowsと同じだ。パスの階層の区切りの書き方は「\」である。
例:C:\xxx\yyy\zzz.txt