環境変数WSLENVの動作

2018年春のWindows 10アップグレードから環境変数WSLENVという新しい機能が追加された。この環境変数はWindowsとWSLの間で受け継ぎを行う環境変数を指定するためのもので、WSLとWindowsのシームレスな利用を実現するために利用できる。WSLENV環境変数の主な指定方法は次のとおり。

■環境変数WSLENVの使い方

WSLENV=環境変数名

■環境変数WSLENVの使い方 変換オプションを指定する場合

WSLENV=環境変数名/オプション文字

複数の環境変数を持っていく場合には次のようにコロンで区切って指定する。

■環境変数WSLENVの使い方 複数の環境変数を指定する場合

WSLENV=環境変数名/オプション文字:...

WSLENVに指定する環境変数にはスラッシュ区切りでオプション文字を指定することができる。オプション文字はp、l、w、uの4つ。オプションを指定した場合や指定しなかった場合には変換が次のように変わってくる。

変換方向 オプション 意味
Windows→WSL 指定なし 何も変換しない
Windows→WSL /p WindowsパスをLinuxパスに変換(例: ドライブ:→/mnt/c)
Windows→WSL /l 対象をパスリストとして展開しつつ、WindowsパスをLinuxパスに変換
Windows→WSL /u WindowsパスをLinuxパスに変換しない
変換方向 オプション 意味
WSL→Windows 指定なし 何も変換しない
WSL→Windows /p LinuxにおけるWindows領域のパス(/mnt/c/以下など)をWindowsのWindowsパスに変換(例: /mnt/c/→ドライブ:)
WSL→Windows /l 対象変数をパスリストとして展開しつつ、LinuxにおけるWindows領域のパス(/mnt/c/以下など)をWindowsのWindowsパスに変換(例: /mnt/c/→ドライブ:)
WSL→Windows /w LinuxパスをWindowsパスに変換しない

環境変数WSLENVを使うとWindowsとWSLの間で環境変数の共有が可能になる。ただ、この機能を使うのはコーディングにせよツールの活用にせよ、エキスパートのユーザーが多いかもしれない。環境変数といったものがそもそもわからないような場合、こうした機能があるということだけでも覚えておいてもらえればと思う。

Windows→WSLへ環境変数を引き継ぐ場合

WindowsからWSLへ環境変数を引き継ぐ場合の使用例は次のとおり。

WSLENVで環境変数の引き継ぎを指定(変換なし)

/pを指定してWindowsパスをLinuxパスに変換

/lを指定して対象をパスリストとして展開しつつ、WindowsパスをLinuxパスに変換

/uを指定して変換なし

WSL→Windowsへ環境変数を引き継ぐ場合

WSLからWindowsへ環境変数を引き継ぐ場合の使用例は次のとおり。

WSLENVで環境変数の引き継ぎを指定

/pを指定してLinuxパスをWindowsパスに変換

/lを指定して対象をパスリストとして展開しつつ、LinuxパスをWindowsパスに変換

/wを指定して変換なし

WSLENVの使いどころは?

WSLENVの使いどころは、WSLをどういった用途で使っているかによって変わってくる。環境変数がどのようにコマンドやアプリケーションの動作に影響を与えているのかよく理解している場合には、この機能の使い方はわかりやすいのではないだろうか。例えば、Windowsに移植されたUNIX系のコマンドやアプリケーションを使うといった用途で、WSLからそのWindows側のプログラムを実行するような場合、この環境変数はかなり便利に利用できる。

ただし、「最小限の労力で最大の効果を上げよう」という本連載の趣旨からすると、この機能はちょっとばかり理解が難しい感じがする。今後必要があればこの機能の使い方を紹介するので、それまではこういった機能があるといったことを覚えておいてもらえればと思う。