記事
· 2026年1月5日 1m read

クロスプラットフォームで開発する際のちょっとした落とし穴

MacOS(Linux)とWindows両方で動作するObjectScriptプログラムを開発する際に、よくやらかしてしまうミスを共有します。

WindowsとUNIX系のファイルシステムの1つの違いは、ディレクトリのセパレータです。

UNIX系は、/(スラッシュ)

Windows系は、\(バックスラッシュ)

です。

ファイルを読み書きするプログラムでセパレータをOS別に選択するという以下のようなコードをよく書くのですが、

if ($system.Version.GetOS() = "UNIX") {
    set sep = "/"
}
else {
    set sep = "\"
}

 

ここでこのバックスラッシュをキーボードで入力すると、日本語キーボードの場合、バックスラッシュの代わりに¥(円マーク)が入力されてしまいます。

ソースコードがSJISの場合は、これでも問題ないのですが、クロスプラットフォームで開発する場合は、UTF8で通常作成するので、Macで動かすと問題ないのにWindowsで動かすとエラーになるということがちょくちょく起こります。

そして、これは意外に間違いに気づきにくいです。

ちなみにPythonでは、どちらでも/を使っておけば問題ないので、こんな問題は起こることはないと思います。

ディスカッション (3)1
続けるにはログインするか新規登録を行ってください

@Hiroshi Sato さん、ありがとうございます。最近の Windows だと、以下画像のようにパスを / と書いても問題ありません。Pythonに限らず、ObjectScriptでも大丈夫です! 

そのため記事で書かれているように、当たり前になっているクロスプラットフォーム開発でも、パスを / に統一しておくと便利かもですね。

@Hiroshi Sato  さん
「いつからか」は正確には分かりませんが、少なくとも、18年前発売の「Windows 7 + Cache 2008.2」の組み合わせで上記コードでファイルが作成されるのが確認できます。だいぶ昔から、ですね。