LinuxとWindowsを行き来して作業していると、パスの書き方の違い で一度はハマると思います。
この記事では
- LinuxとWindowsのパス表記の違い
- よくあるミス
- 両対応するときの考え方
をまとめてみたいと思います。
まずは基本の違い
区切り文字が違う
ここがいちばん有名ですね。
- Linux / macOS
/home/nyan/projects/test.txt - Windows
C:\Users\nyan\projects\test.txt
Linuxは /、Windowsは \(表示上は )です。
プログラムや設定ファイルでここを混ぜると動かなくなったり、不具合の元になるんですよね…。
ルートの考え方が違う
Linuxはルートが1つだけ
Linuxは、すべてが / から始まります。
/
├── home
├── etc
├── var
└── usr
ディスクが増えても、どこかのディレクトリに マウント されるだけです。
Windowsはドライブ単位
Windowsはドライブごとにルートがあります。
C:\D:\E:\
という感じですね。
Linuxに慣れていると、この「ドライブが別世界」感覚が少しややこしいです。
ホームディレクトリの扱い
Linux
/home/ユーザー名/
さらに、
~→ 自分のホーム$HOME→ 環境変数
が使えます。
~/projects
みたいな書き方ができるのは便利です。
Windows
C:\Users\ユーザー名\
ただし、
~は基本使えない- 環境変数は
%USERPROFILE%
という違いがあります。(コマンドラインだとチルダは変換されて使えるんですけどね)
%USERPROFILE%\Documents
みたいな感じですね。
大文字・小文字の違い(重要)
Linuxは区別する
/home/nyan/Test
/home/nyan/test
これは 別物 です。
Windowsは基本区別しない
C:\Test
C:\test
同じ場所として扱われます。
Linux前提のコードをWindowsに持ってくると、ここで事故りがちです。
よくあるハマりポイント
バックスラッシュ問題(エスケープ)
Windowsパスをプログラムに直書きするとき、
C:Usersnyan
は、言語によっては壊れます。
正しくは、
C:\Users\nyan
もしくは、
C:/Users/nyan
Linux式スラッシュを使う方法です。
意外と後者の方が安全だったりします。
相対パスの基準が違う
相対パスは、
- Linux:実行した場所基準
- Windows:実行方法やツール依存
になりやすいです。
特にGUIアプリやIDE経由だと、「どこ基準なのか分からない」問題が起きがちです。
両対応したいときの考え方
絶対パス直書きはなるべく避ける
OS依存になるので、可能なら避けた方が無難です。
環境変数を使う
- Linux:
$HOME - Windows:
%USERPROFILE%
を使えば、多少マシになります。
プログラム側で吸収する
Pythonなら、
from pathlib import Path
Path.home() / "projects" / "test.txt"
こうしておくと、OS差分をほぼ気にしなくて済みます。
個人的な運用指針
- 設定ファイル:相対パス or 環境変数
- コード内:OS依存パスを書かない
- 共有資産:Linux基準で
/を使う
このあたりを意識するだけで、トラブルはかなり減ります。
結構大変なのがHoudiniのようなツールでは相対パスを多用するので、ドライブレターの扱いとかパスの書き方は不具合の温床になるんですよね。Houdiniでも変換や相対パスをうまく使って参照が崩れないようにしますよね。
LinuxとWindowsのパスは、
最初は面倒ですが「思想の違い」を理解すると楽になります。
以上、パスの書き方の違いと注意点でした。


コメント