💔

個人的に思うWindows環境がけったいなところ

2023/01/17に公開

最初に

  • これはポエムです
  • WindowsのOSだけでなく開発に使うツールも含む

前提

  • Windowsを開発用のOSとして使用する
  • 開発ターゲットはWebアプリであったりPlatformIOであったりはするが、どれも非Windows。

けったいなところ

ファイル名の大文字小文字が区別されない

  • MyLib.h というファイルがあったとして #include "mylib.h" と書いてしまっても通ってしまう。
  • MyLib.h と mylib.h ファイルがあるとどちらが読み込まれるかわからない

ちなみに… fsutil を使うとフォルダ単位で大文字小文字を区別させることができるようになりますが、ドライブまるごと大文字小文字区別して欲しい。というのはできません。

※ これはmacOSも同様です。が、ボリューム単位で大文字小文字を区別させることができます。

powershell/cmd.exe の文字コードがUTF-8ではない

UTF-8にすることも可能らしいですが互換性の問題でデフォルトでは各国の文字コードです。
そのせいでクロスプラットフォームなアプリが文字コードの問題で落ちたりします。
具体例は、PlatformIOは執筆時点ではEncoding Errorを出してコンパイルがコケます。
正直、UTF-8にしても良いような気がします
類似のけったいポイントとして改行コードがCRLFである。というのもあります。
以前はmacOSがCRだったのでまだ意識されていましたが、LFに変更されたので割と意識されにくくなっているような気がします。
git config --global core.autocrlf false を忘れると自動変換されしまうかも)

ファイルの属性が他OSと互換性がない

非WindowsなOSで touch test.sh && chmod +x test.sh したファイルをgit commit / push して、そのリポジトリをWindows環境で git clone すると何もしていないのにファイルに差分がある。と表示されてしまう。(gitは実行可能属性を保持するが、Windowsに該当する属性がないので無視されてしまう)
解決策は git update-index --add --chmod=+x test.sh をcloneするたびにする必要があります。これはgitが対応してくれれば良い気もしますが、大変けったいな仕様だと思います。

なにより、この現象を知らないとgit diff しても差分は一切ない。という表示がされるのでわけがわかりません。

パスの形式が他OSと互換性がない

運用でどうにかこうにかできる部分ではありますし、Windows側もだいぶ歩み寄りをしてくれている部分ではありますが、C:\ のような表記はなかなか
解決策としては / 区切りでパスを書いても通るのでそれを使えば違和感は減りますが、ドライブレターは指定できなそうです。

蛇足

実のところ書いてきた話はすべて、クライアントもサーバーもWindowsだったら全て問題になりません。サーバーはたいていの場合Linuxだろう。と言える時代になってしまったので顕在化しただけ。と言えます。
なので、良いGUIを持ち、Linuxとの親和性も高いmacOSのシェアが(少なくとも開発用途で)増えるのは当然だよねーと思いました。
Linuxデスクトップであれば、完全にターゲットと同じ環境になるので最高なんですが、どうしても動くも八卦動かぬも八卦みたいなところがあり、人には勧めにくいなぁと。
(動いちゃえば結構快適ですよ、そこまでに少し苦労はあるかもですが)

Windows、これからどうするんだろうなぁ… 互換性を維持しながら開発体験をより良くするってかなり難題なように思えますが、そろそろある程度バッサリ行ったほうが良い気がするのですが…

Discussion