ファイルシステムの問題
Windows上のファイルシステムを使うとWSLとWindowsのファイルシステムの違いにより読み書きの速度が落ちてしまいます。
Linuxのファイルシステムだけで作業する
コマンドプロンプトやWindowsターミナルでwsl
とタイプして実行するとWSLにインストールしたLinuxのターミナルが起動します。
Windowsターミナルの場合、タブを追加して直接Linuxのターミナルを起動することもできます。
その時の初期のディレクトリが/mnt/c/Users/ユーザ名
です。このままだとWindowsのファイルシステム上にファイルやディレクトリを作成することになり、LinuxとWindowsのファイルシステムの違いによる速度低下が起こります。P9による変換作業が実行されるためです。
cd ~
とターミナルでタイプして実行することでLinuxのhomeディレクトリに移動できます。
こちらでディレクトリやファイルを作成するようにすると余計な変換作業が実行されないので速度低下は起こりません。
権限の問題
コンテナのユーザIDとホストのユーザIDは一致しないため、パーミッションを変更しないとコンテナ側のファイルを変更できません。
create-file-docker
はDockerでファイルを作成し、create-file-wsl
はWSLでファイルを作成しました。
Dockerに接続してパーミッションを確認
hat@tukumo:~/docker-laravel-vue-photo-album/$ docker compose exec app bash
root@2a762419a43f:/work/backend# ls -l create-file-*
-rw-r--r-- 1 root root 0 Nov 7 10:57 create-file-docker
-rw-r--r-- 1 1000 1000 0 Nov 7 10:51 create-file-wsl
WLSでパーミッションを確認
hat@tukumo:~/docker-laravel-vue-photo-album/backend$ ls -l create-file-*
-rw-r--r-- 1 root root 0 Nov 7 19:57 create-file-docker
-rw-r--r-- 1 hat hat 0 Nov 7 19:51 create-file-wsl
Dockerに接続してファイルを作成するとユーザはroot
になります。WSLでパーミッションを確認してもroot
です。
WSLで作成したファイルは、DockerではユーザIDが1000
になります。WSL上で編集するとDockerではユーザIDが1000
で作業することになって想定していないユーザでファイルが作成されることになります。
Vscodeでroot権限で操作する
Vscodeの拡張機能でリモート先のコンテナに接続することができます。コンテナに接続するとroot権限で操作ができるのでどんなパーミッションのファイルでも編集できます。
理想的にはrootではない個別のユーザで権限を設定するのがLinuxとしては普通の使い方だと思うのですが、とりあえず個人で勉強するレベルではコンテナはrootで操作して問題なさそうです。
まずは動かしてみることが大事です。
気になる方は「docker 権限 root wsl」などのキーワードで検索すると対応策がたくさん出てきます。
Vscodeにエクセステンションを追加
コンテナにアタッチするにはエクステンションを追加します。
Remote - Containers
です。VScodeをwslのターミナルでcode .
とタイプして起動するとそのエクステンションがインストールされていないならオススメしてくるので間違えることはないと思います。私のときはおすすめエクステンションでインストールしろと言われたのでそのまま「はい」とインストールしました。
Vscodeでコンテナにアタッチする
WSLターミナルでVScodeを起動すると、左下にWSLで起動していることが表示されます。そのアイコンをクリックするとコマンドメニューが表示されるので、Attach to Running Container
を選択します。
起動中のDockerイメージが選択出来るようになるので、開発のイメージを選択すると新しくDockerコンテナに接続したVScodeが起動します。
このVScode上で作業することでroot権限で、実行したり、ファイルを作成することも出来るようになります。
WSLが大量のメモリを使ってしまう
WSL2が大量のメモリを使って、私の環境の場合は全体で8G中WSLが5Gくらいメモリを使用すると、Windowsやブラウザなど他のアプリのメモリ利用でトータルのメモリ使用率が90%を超え始めて、Windowsの操作がもたつくようになります。そのまま使い続けるとマウスすら動きが怪しくなります。
WSLの設定ファイル
設定ファイルでWSLが利用できるメモリの上限を設定することができます。
設定ファイルのある場所に移動するには、おなじみのエクスプローラーを開いて、パスを示す場所にカーソル合わせて、%USERPROFILE%
を入力します。
.wslconfig
という名前のファイルを作成します。
[wsl2]
memory=4GB
swap=0
のように編集します。4GBはWSLの上限メモリ使用量です。各環境のパソコンの搭載メモリに応じて調整してみてください。
こちらを参考にしました。
私の場合は、全体で8GBのメモリでいろいろ試したところ4GBくらいでマウスが動かないなど挙動のおかしくなることはほとんどなくなりました。