- 相対パスっていうのは、今自分がいる場所を基準にしてファイルの場所を示す書き方のことだよ。住所で言えば「この角を曲がって2軒目」みたいなイメージ。
- Webサイト開発やシェルスクリプト作成など、チームで共有するコードを書くときに特に重宝される。環境ごとに絶対パスが変わる問題を回避できるから。
- 「絶対パスを書いたら自分のPCでしか動かなかった」という経験がある人は、相対パスに切り替えた瞬間にその悩みが消える。
【深掘り】これだけ知ってればOK!
相対パスは、プログラムやシェルが現在作業しているディレクトリ(カレントディレクトリ)を起点として、目的のファイルやフォルダへの経路を記述する方式です。たとえば、カレントディレクトリが /home/user/project であるとき、同じproject内のsrcフォルダにあるmain.pyを指すには ./src/main.py と書きます。また、ひとつ上の階層にある設定ファイルを参照するなら ../config/settings.json のように「../」を使います。この「現在地からの相対的な記述」という特性が、開発環境・本番環境・CI/CD環境など場所を問わずコードを動かす上で決定的なアドバンテージをもたらします。
絶対パスは /Users/yamada/project/src/main.py のようにルートから完全に記述するため、環境が変わると即座にパスが壊れます。Gitでソースコードを共有するチーム開発では、メンバー全員がまったく同じディレクトリ構成を持つことは稀で、絶対パスをハードコードすると「自分のPCでは動くのに他のメンバーのPCで動かない」という典型的なトラブルを生みます。相対パスを徹底するだけで、このクラスの問題の大半は予防できます。さらにDockerコンテナやサーバー移行の際にもパスを書き直す手間が大幅に削減され、インフラコストの観点からも合理的な選択です。
ビルドツールを使ったフロントエンド開発では、開発時と本番ビルド後でディレクトリ構造が異なるケースがよく発生します。vite.config.js の base オプションや webpack の publicPath 設定を正しく理解しておくと、相対パス起因のアセット読み込みエラーを未然に防げます。環境変数でベースパスを切り替える設計にしておくと、デプロイ先が変わってもコードを変更せずに対応できます。
よくある誤解
「./」を省けば相対パスにならない?
「./」を省いてファイル名だけ書いても、多くの場合カレントディレクトリを基準とした相対パスとして解釈されます。ただしシェルスクリプトでは「./script.sh」と「script.sh」は挙動が異なり、後者はPATH上のコマンドを探します。省略形に安易に頼ると予期しない動作を招くため、意図を明示するために ./を付けることが推奨されます。
相対パスさえ使えば移植性は完璧?
相対パスはパスのハードコード問題を大きく緩和しますが、それだけで移植性が完璧になるわけではありません。ディレクトリ構成そのものが環境間で違えば相対パスも壊れます。本当に移植性を高めたいなら、パス定義を設定ファイルや環境変数に集約し、コードの中でパスを組み立てる設計にすることが必要です。
会話での使われ方

この画像ファイルのパスって ../images/logo.png でいいですか?
新人フロントエンドエンジニアがコードレビュー中に先輩に確認している場面。




CIが失敗してるんですが、ローカルでは動くんです。パスが絶対パスになってないか確認してみてください。
テックリードがリモートのチームメンバーに向けて、CI/CDパイプラインのエラー原因を指摘している場面。




Dockerに移行したらパスが全部壊れました。相対パスで書き直したら一発で動きました。
インフラエンジニアがレトロスペクティブで移行時のトラブルと解決策を共有している場面。
【まとめ】3つのポイント
- 現在地基準で記述するのが相対パスの本質:相対パスは「今どこにいるか」を出発点にしてファイルの場所を示す。カレントディレクトリが変わればパスの意味も変わるため、スクリプト実行時の作業ディレクトリに常に注意が必要。
- チーム開発・CI/CDでは相対パスが原則:絶対パスをソースコードに書くと、環境ごとにパスが異なるチーム開発では確実にトラブルになる。相対パスを使うか、設定ファイルにパスを外出しする設計が鉄則。
- ビルドツール使用時は基準ディレクトリに注意:ViteやWebpackなどのビルドツールは、ビルド後のディレクトリ構造が開発時と異なる場合がある。publicPath・baseオプションを正しく設定しないと、相対パスを正しく書いていてもアセットが見つからないエラーが発生する。
よくある質問
-
Q相対パスと絶対パスはどちらを使うべきですか?
-
A
共有・移植を前提とするコードには相対パスが基本です。一方、ログローテーションなどシステムの特定の絶対的な場所を指す必要がある設定ファイルでは絶対パスが適切です。用途で使い分けるのが正解です。
-
Q「../」を複数重ねることはできますか?
-
A
できます。../../config/ のように重ねることで、複数階層上のディレクトリを指定できます。ただし深くなるほど可読性が落ちるため、3つ以上重ねる場合はディレクトリ構成の見直しを検討してください。
-
QPythonで相対パスを扱うベストプラクティスは?
-
A
Pythonではos.path.joinやpathlibモジュールを使い、__file__を基点に相対パスを動的に組み立てる方法が推奨されます。文字列リテラルでパスをハードコードするのは避けましょう。
-
Q相対パスと絶対パスの違いは何ですか?
-
A
相対パスは現在のディレクトリを起点にした経路表記で、環境をまたいで動作しやすいのが特徴です。絶対パスはルート(/やC:\)から始まる完全な経路で、どこから参照しても同じ場所を指しますが、環境が変わるとパスが壊れやすいという違いがあります。
この用語と一緒に知っておきたい用語
| 用語 | この記事との関連 |
|---|---|
| 絶対パス | 次のステップとして絶対パスを学ぶと知識が広がります。絶対パスの主要な特徴と用途を理解することで、関連する技術・制度・概念を正確に把握できるようになる |
| CI/CD | CI/CDとの関係を知ると全体像がつかみやすくなります。Continuous Integration(継続的インテグレーション)と Continuous Delivery/Deployment(継続的デリバリー/デプロイメント)の略。コードのコミットをトリガーに自動でビルド・テスト・デプロイを実行するパイプラインだ |
| アイコン | アイコンを押さえると本記事の理解がさらに深まります。アプリやファイル、操作ボタンなどをひと目でわかる小さな絵で表したもの、それがアイコンだ |
| アセット | 本記事のテーマと実務上セットで使われることが多い用語です。文脈によって意味が変わる言葉で、ビジネスでは「企業の強み・資産」、ITでは「管理すべきシステム資源」、ゲーム開発では「画像・音声などの制作素材」を指す |
| サーバー | サーバーを押さえると本記事の理解がさらに深まります。ネットワークを通じて情報やサービスを提供する側のコンピューターのこと。レストランで料理を運んでくれる給仕係(server)をイメージするとわかりやすいよ |
【出典】参考URL
https://developer.mozilla.org/ja/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL:MDN Web Docs「URLとは何か」パスの概念を丁寧に解説
https://www.gnu.org/software/bash/manual/bash.html:GNU Bashマニュアル・シェルにおけるパス解決の動作仕様


コメント