WSL2のUbuntuを使って開発を行っている時には、WSLのホームディレクトリ(~/)にプロジェクトを作って開発をした方がいいよ!という話です。
WSLとは?WindowsとWLSは別々のシステム(OS)
そもそもWSL(Windows Subsystem for Linux)とは、Windows上でLinux環境を使える仕組みです。
なのでWindows上でLinuxが動いているだけで、これらは別々のシステムです。
WSLとWindowsとの壁
そもそも違うシステムなので円滑なやり取りが難しく、パフォーマンスが落ちます。
WSLならWSL同士、WindowsならWindows同士のやり取りの方が早いです。
では実際どのような場合に壁が出てきて、何が壁になっているのか?
ファイルシステムの違い
WSLはLinuxなので、Linuxに適したファイルシステム(ext4など)
Windowsも同様に、Windowsに適したファイルシステム(NTFS)
それぞれに最適化されています。
NTFSとLinuxのファイルシステムでは、それぞれ処理の方法が異なるため、WSLからNTFSにアクセスすると様々な問題が発生することがあります。
パフォーマンスについて
例えば日本語と英語を例にしてみるとわかりやすいかもしれません。
WSLは英語を読み書きできます。
Windowsは日本語を読み書きできます。
お互い相手の言語はわからないので、コミュニケーションや、やり取りをする際には、間に翻訳機能が必要になるイメージです。
この場合には、会話にラグなどが発生したり、ひと手間必要だったりとパフォーマンスが落ちます。
最短距離で目的に到達することはできないので、遠回りしているイメージですね、そのため時間もかかります(I/Oのオーバーヘッド)
ファイル監視について
先ほどの例のように、お互いが理解している言語が違うとすべてを理解できないので、いくら翻訳機能を使っていてもニュアンスの違いやネイティブなものは見逃してしまったり誤った解釈をすることもあるでしょう。
WSLからNTSFを見ている時にも同様に、気づけない事があります。それが変更の検知などです。
例えば、vite
やWebpack
のようなものでwatch
機能(ファイルの更新を検知して処理する)を使いたくても正しく動作しない(検知ができないことがあります。
解決策
ここまででわかったように、WSLとNFTSでのやり取りには、1つ手間がかかりパフォーマンスが悪くなるという事でした。
これを解決するためにいくつかの方法があるので紹介してみます
WSL環境のホームディレクトリで作業をする
Linuxのファイルシステム内で作業をすると、間に無駄がないので余計な処理をする必要がなく早く正確にやり取りをすることができます。
実際にはホームディレクト(~/
)以下で作業ディレクトリを作って開発を行うといいでしょう
WSLと理想の形でやり取りが可能なファイルシステムを導入
具体的にはHDD/SSDの増設です。増設時にNFTSではなく、Linuxのネイティブファイルシステムであるext4でフォーマットします。
これによりWSLからのアクセスなどのパフォーマンスを下げることなく作業ができます。
Microsoftの公式でもやり方があるので、気になる方は参考にしてみてください!
Linux ディスクを WSL 2 にマウントする
終わりに
WSL2で作業するときにはきちんとWSL2の管理下で作業しようねって話ですね!
調べてもなかなかここにたどり着けなかったので、誰かの役に立てればと思います!