備忘録:WSLをもっと使いこなすために

最近の開発では、WSL中心で行っています。
 やりたいこと毎に、環境をセットアップして… という感じに。これが大変便利です。Dockerなどの外部ソフトを使わなくても、軽量なLinux環境がサクサク使える。
 しかし、資料が少ないので使い方をマスターするまで時間がかかったので、備忘録を兼ねて共有を。

内容について

2023/04/06現在、この記事ではWSLのディストリビューション側の設定に注力して書いてあります。Windows側のメモリ割り当ての仕方とかはインターネット上で資料が散見されるので。

WSLって何に使えるの

 WSLを使うことで、仮想環境が作れます。要はdockerみたいなもの。最近は新しいことを勉強し始めるたびに、新しいWSL環境を作っています。まっさら環境を使えるので予期しないエラーも少ないし。
 私の場合、外付けSSDに仮想環境をエクスポートし、ラップトップとデスクトップの両方で作業できるようにしています。環境さえ作ってしまえばこちらのもの。私が使っているWSLの仮想環境は…

  • プレーンのUbuntu

  • Java開発用

  • .NET開発用

  • Rust勉強用

  • コンパイラの勉強用

  • OSの勉強用

  • AIの勉強用

とまあこんな感じです。
やりたいことごとに環境構築してあげると、パスの汚染とか、ディレクトリ構成とかを気にしなくて済むので色々とらくちん。
ちなみに、頑張って調べればグラボをWSL上で使用する方法もあるので、AIの開発も全然いけます。

前述のとおり、外付けSSDに環境が入っているので、デスクで作業するのが飽きたらデスクトップからラップトップにSSDを差し替えて、別の場所で作業なんてこともできます。

既存の環境をエクスポートする

.tarファイル形式にエクスポート

wsl --export <エクスポートしたいディストリビューションの名前> <エクスポート先のパス>

.vhdx形式(Linuxがインストールされている仮想ディスク)でエクスポート

wsl --export --vhd <エクスポートしたいディストリビューションの名前> <エクスポート先のパス>

外部ファイルから環境を新規作成する

.tarファイル形式でインポート

wsl --import <インポートしたときの名前> <インポート先のパス> <インポート元のファイルのパス>

.vhdx形式でインポート

wsl --import --vhd <インポートしたときの名前> <インポート先のパス> <インポート元のファイルのパス>

この--importでは、仮想ディスクを作成しインポートします。具体的には、インポート元のファイルをもとに、仮想ディスクが新設されます。
 なのでこの方法では、既存のディストリビューションを共有したい時なのどでは利用できません。例えば、外付けのSSDに仮想ディスクをエクスポートして、複数デバイス間で利用したいときなど、この方法だとうまくいきません。
 上の例のような利用をしたい場合、次の方法を利用してください。

既存の環境をインポート

wsl --import-in-place <インポートしたときの名前> <インポート元のvhdxファイルの

パス>

これの手法では、vhdxをマウントするような形でディストリビューションが利用できます。
 私はこの方法を使うことで、外付けSSDに仮想ディスクを作ってラップトップとデスクトップ、どちらでも同じ環境を使えるようにしています。

VSCodeを開けるようにする

 既存の環境をインポートすると、インポートしたWSLの環境上でcodeコマンドが使えない状態になります。試しにcode .と打ってみると

❯ code .

Command 'code' not found, did you mean:
  command 'tcode' from deb emboss (6.6.0+dfsg-11ubuntu1)
  command 'ode' from deb plotutils (2.6-11)
  command 'cdde' from deb cdde (0.3.1-1build1)
  command 'node' from deb nodejs (12.22.9~dfsg-1ubuntu3)
  command 'cde' from deb cde (0.1+git9-g551e54d-1.2)
Try: sudo apt install <deb name>

と表示されて使えない状態に。
そこでWSL上のLinuxに/etc/wsl.confを追加し、次のように記述してください。

/* /etc/wsl.conf */
[interop]
enabled = true

この記述によって、WSLからWindowsのソフトを起動することができるようになります。これで、Windows側にVSCodeがインストールされていれば、起動できるようになります。

デフォルトのユーザーを設定する

 これもまた既存の環境をインポートしたときに発生する問題。普通にストアからディストリビューションをダウンロードして使っている時には、自動的にユーザーへのログインがなされます。ですが、インポートした場合にはroot権限でスタートします。

 ユーザー権限で作業しようと思うと、いちいちログインする必要があり面倒くさいです。特に、VSCodeを使っているときに問題になる。というのも、VSCodeを開いたときにデフォルトのユーザーで実行されるので、ユーザー権限で作成しているつもりが、root権限で作成しているなんてことが…
後から開こうとしても、permission deniedとかなるので。

ということでデフォルトのユーザーを設定します。
デフォルトのユーザーを設定は/etc/wsl.confに記述します。内容は以下の通りです。

/* /etc/wsl.conf */
[user]
default = <ユーザーの名前>

これでwsl起動時に自動でログインしてくれます。

オススメの運用

ストアで新しいディストリビューションをダウンロードし、必要最低限のセットアップしたら、エクスポートしましょう。
 そのファイルをインポート元として無限に、好きなだけ環境が作れます。やったね。

困ったとき

wslについてはPowerShell上で詳細なhelpを出してくれます。
なので、

wsl --help

と打つとたいていのことは解決するはず。

最後に

 みんなWSL使おう!めちゃくちゃ便利や…
いまやGUIも動くし、グラボを接続することもできるので、やりたい放題。
めちゃくちゃいいぜ、WSL。サイコー


この記事が気に入ったらサポートをしてみませんか?