🐙

Windows・WSL両対応のdotfilesを育てる

2021/12/16に公開

最近は Windows の WSL(Windows Subsystem for Linux)を用いて開発するようにしています。

WSL で開発するにあたって dotfiles を作った際、WSL 特有の問題が少しあったのでまとめてみました。

https://github.com/mkizka/dotfiles

なお、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が含まれているかどうかで判定しています。

https://github.com/docker/docker-install/blob/fa5e8eaa2b048065a151f805d451903099144e25/install.sh#L133-L139

uname -rで判定する場合はコンテナでの実行でも同じ結果になるため、自分の場合はwslpathコマンドが存在するか否かで判断しています。

if [ -n "$(which wslpath)" ]; then
  # WSLでのみ実行する処理
fi

WSL と Windows で git の認証情報を共有する

開発は基本的に WSL で行っていますが、Windows 側でも作業出来るように git の認証情報は共有しています。

やり方は以下の記事の通りです。
https://qiita.com/snaka/items/cc83553a81e00b2d26f3

前述の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 を育てる時のあれこれを書きました。これから育てる方は参考にしてみてください。

GitHubで編集を提案

Discussion