概要
Windowsで開発やちょっとしたコマンドを実行したいときにWindows Subsystem Linux (WSL)はとても便利です。
この記事を執筆している現在、WSL2というWSLのバージョン2が最新となりますが、WSL2は、Windows上のファイルの扱いに少々難があります。
ここでは、私がそのファイルの扱いの難をくぐりぬけて利用している方法について紹介します。
ちなみに、WSL1についてはこのような問題があるのか確認していませんので、WSL1を利用している方は、参考にならない可能性が高いです。
なぜ遅いのか
WSL2は、Hyper-Vと呼ばれる仮想化ソフトの上でLinuxを動かし、それを経由してLinuxを利用しています。いわゆる仮想マシンを使っているのと似ているのですが、Windows TerminalでLinux上のシェルを扱うように利用でき、通常の仮想マシンと比べて使い勝手が良いです。また、Windows上のファイルにアクセスできるという利点があります。
しかし、Windows上のファイルの操作はとても重いです。この原因は、別のファイルシステムのファイルとしてWindowsのファイルシステムをマウントしているため、そのマウントが原因といわれています。
通常の少ないファイルにだけアクセスするような使い方では問題はあまり発生しませんが、GitやNode.jsのnode_modulesなど、大量のファイルにアクセスするような場面では、レスポンスが悪くなりストレスを感じます。
この問題の解決方法はないとされていますが、使い方次第でこの問題に遭遇しないようにできます。
解決方法
ここでは、いくつかの解決方法を紹介します。
Linux上のファイルシステムを利用
そもそもの原因として、Windows上のファイルにアクセスするから遅いのです。Linuxのファイルシステムにファイルを置けば、このような遅い問題には遭遇しません。
私の利用しているUbuntuのWSL2では、/mnt/
以下にWindowsのCドライブやDドライブなどのファイルがマウントされています。つまり、ここよりも下にファイルを置かないようにします。
Linuxでは、cd
コマンドを実行することで、ホームディレクトリに移動できるので、そこに適当なディレクトリを作成してそこでファイルを管理するようにすれば、問題は解決します。私の場合は、workspaces
という名前のディレクトリを作成して、その中で色々なプロジェクトのファイルなどを管理しています。
Windowsを利用する
もうひとつ考えられる方法として、大量のファイルにアクセスするような処理はWindowsで行うという方法があります。そもそもの原因となるWSL2を使わない、もしくは使い分けるということです。
この方法では、例えばですがファイルの編集やちょっとしたコマンドの実行などはWSL2を介して行い、Git操作やアプリケーションの起動など、大量のファイルにアクセスするようなものや、大きなファイルにアクセスするようものではWindowsを使います。
Windowsとどうしても連携する場合は、こちらが良い選択肢となるでしょう。
さいごに
私は、よくWSL2上のファイルシステムを利用してWindows上にファイルを置かないようにすることが多いです。
今回紹介した方法は、あまりよい解決策ではないと思われるかもしれません。
私も、もっと良い解決方法があるのではないかと、色々と調べてみたのですがどうしようもないというのが事実のようです。