Windows・WSL両対応のdotfilesを育てる
最近は Windows の WSL(Windows Subsystem for Linux)を用いて開発するようにしています。
WSL で開発するにあたって dotfiles を作った際、WSL 特有の問題が少しあったのでまとめてみました。
なお、dotfiles は WSL 上で実行することを想定しています。
WSL から Windows のホームディレクトリにファイルを配置する
.wslconfig
のように Windows のホームディレクトリにファイルを置きたいことがあります。
Windows のファイルは WSL の/mnt/c
などにマウントされており、ホームディレクトリのパスは次のようにして取得できます。
WINHOME="$(wslpath "$(wslvar USERPROFILE)")"
cp -f .wslconfig $WINHOME/
wslvar
に Windows のホームディレクトリを表す環境変数であるUSERPROFILE
を渡すことで、C:\Users\username
のような値を取得出来ます。
その後、取得した Windows 形式のパスをwslpath
を使って/mnt/c/User/username
のような WSL で使える形式に変換しています。
WSL での実行であることの判定
シェルスクリプトが WSL で実行されているかどうかの判定方法はいくつかあるようです。
例えば、https://get.docker.com で公開されている https://github.com/docker/docker-install ではuname -r
に文字列Microsoft
またはmicrosoft
が含まれているかどうかで判定しています。
uname -r
で判定する場合はコンテナでの実行でも同じ結果になるため、自分の場合はwslpath
コマンドが存在するか否かで判断しています。
if [ -n "$(which wslpath)" ]; then
# WSLでのみ実行する処理
fi
WSL と Windows で git の認証情報を共有する
開発は基本的に WSL で行っていますが、Windows 側でも作業出来るように git の認証情報は共有しています。
やり方は以下の記事の通りです。
前述のWINPATH
を使って、Windows 側は Scoop で Git をインストールするという前提のもと以下のようにしています。
git config --global credential.helper "${WINHOME}/scoop/apps/git/current/mingw64/libexec/git-core/git-credential-manager-core.exe"
おわり
WSL で dotfiles を育てる時のあれこれを書きました。これから育てる方は参考にしてみてください。
Discussion