快適にプログラミングをするためのWSLオススメ設定

快適にプログラミングをするためのWSLオススメ設定

今回はプログラミング環境に関する記事です。

最近Windowsに返り咲いて使っているWSL(Windows Subsystem for Linux)の設定で「詰まったところ」や「こう設定しておくと使いやすくなる」というところを解説します。

これからWSL環境を構築する方の参考になれば幸いです。

※ 2020/05/27 WSL2の設定に関する記事「WSL2でWeb開発環境がより快適に(docker-composeも動く)」も追加しましたので、よかったらご参考ください。

目次


1. 筆者の利用環境

まず自分がどういう環境でWSLを利用しているかをご紹介します。

PC Surface Pro 7
OS Windows 10 Pro
WSLのOS Ubuntu 18.04 LTS
Docker仮想環境 Hyper-V

WSL自体のインストールについては公式サイトがわかりやすいのでこちらをご参考ください。

本記事では、Windows/Linux上のユーザー名をsampleとした場合で設定例を紹介していきます。


2. パーミッション問題

WSLを使い始めて最初に困ったのがファイルとディレクトリのパーミッション周りですね。

WSLでは、WindowsのファイルシステムをLinux上にマウントして使う形を取っていますが、デフォルトでLinux側から見たWindowsのファイルのパーミッションが777になってしまいます。

それを防ぐ設定を以下2つで行いました。

/etc/wsl.confを作成して以下を入力して保存する。

[automount]
enabled = true
root = /
options = "metadata,umask=22,fmask=11"
~/.profileに下記の内容を追記する。

if [[ "$(umask)" = "0000" ]]; then
umask 0022
fi

wsl.confがマウント時の設定、.profileがログイン後のsampleユーザーの設定で、これらの設定後に自分の場合はWindowsごと再起動してからWSLを起動するとバッチリ快適な状態になりました。


3. sudoをパスワード無しで使えるようにする

WSL上のメインユーザーでsudoを使うときに毎回パスワードを求められるのが不便で仕方がないので、sudoをパスワード無しで使えるように設定します。
※ セキュリティ上のリスクが伴うので実施する際は自己判断でお願いします。

自分はデフォルトのsudoグループを汚さないために、パスワード無し用のsudoグループを作成して設定を行います。

今回は「superadmin」グループでパスワード無しを実現する例ですので、適宜好きなグループ名に変更してご利用ください。

グループを追加
$ sudo groupadd superadmin

sampleユーザーをsuperadminグループに追加
$ sudo usermod -aG superadmin sample

sudoファイルを編集するコマンドを実行し、最下段に追記
$ sudo visudo
%superadmin ALL=NOPASSWD: ALL

4. Docker関連設定

WSLからDockerを使うための設定について解説します。

Dockerを利用するにはDocker公式からインストーラーのダウンロードとインストールをまずは行います。

執筆時点のDockerのバージョンは下記のものです。

WSLからDockerを利用するには、WSLとDockerを通信可能にする必要がありますのでWindowsとLinuxとそれぞれ設定をしていきます。

まずWindows側ですがDockerの設定画面を立ち上げ、下記画面のExpose daemon on tcp://localhost:2375 without TLSにチェックを入れてください。

Linux側の設定では、.profileもしくは.bashrcなどに下記追記をします。

~/.profileに以下の内容を追記する。

export DOCKER_HOST=tcp://localhost:2375

上記設定後、繰り返しですがWindowsごと再起動するとWSLからDockerを使えるようになっていると思います。

確認するには以下のコマンドで Hello from Docker! のメッセージが表示されていれば完了です。

$ docker run hello-world

場合によっては、「docker-credential-desktop.exe が見つからない」というエラーが発生することがあり、以下の設定を追加することで回避できるようになりました。
※ UsernameはDockerのユーザーアカウント、Secretにはパスワードを直で書いています。

~/.docker/config.jsonを以下のような形に編集する。

{"Secret":"xxxxxxxxxxxx(←パスワード平文)","Username":"sample","auths":{"https://index.docker.io/v1/":{}},"credsStore":"desktop"

Dockerのバージョンアップなどで再発することがあるので、正確なエラーメッセージは再発したらまた追記しておきます。


5. LinuxのホームディレクトリをWindowsと同じにする

WindowsのホームディレクトリとLinuxのホームディレクトリを揃えておくと、両方で同じファイルを見やすくなるので共通化しています。

こちらの設定は「Linux上とWindows上でファイル管理は分ける」という方はあまりやらなくても良い設定かもしれません。

設定方法はpasswdファイルのホームディレクトリを指定している箇所を変更すれば完了です。
念のためこちらもWindowsごと再起動しておくようにしました。

$ sudo vim /etc/passwd
※ 変更前
sample:x:1000:1000:,,,:/home/sample:/bin/bash

※ 変更後
sample:x:1000:1000:,,,:/c/Users/sample:/bin/bash

また、以下のコマンドでできるかと思ったのですが、sampleユーザーでログイン中はできないみたいだったので、今回は直接passwdファイルを直接編集する形を紹介しています。

$ sudo usermod -d /c/Users/sample sample
usermod: user sample is currently used by xxxxx(←プロセスID)


6. Windows Terminalの設定

普段WSLを使うときのターミナルはWindows Terminal(Preview)を使っています。

Microsoft Storeで「Windows Terminal」と検索したらMicrosoft Corporation製のアプリが見つかると思いますので、そちらからインストールできます。
こちらに「公式サイトのリンク」も貼っておきます

Preview版ではあるものの完成度は高く、WSLとして使っている分には今のところ特に不満を感じていることはありませんし、AWSのEC2やVPSなどにsshログインして使うときも普通に利用しています。(Windows Terminalで表示しているWSLのUbuntuから各サーバーへのSSH接続)

そんなWindows Terminalの設定で変更しているのは下記の設定になります。

// デフォルトにしたいProfileのguidを入れる
"defaultProfile": "{xxxxxxxxxxxxxxxxxxx}",

// マウスで選択しただけでコピーする設定
"copyOnSelect": true,

// Ctrl+PageUpとCtrl+PageDownでタブを切り替えられるようにする設定
"keybindings": [
{
"keys": [ "ctrl+pgup" ], "command": "prevTab"
},
{
"keys": [ "ctrl+pgdn" ], "command": "nextTab"
}
]

「defaultProfile」はWindows Terminalを立ち上げたときに起動するものを選択する設定で、自分は普段Ubuntuしかターミナルでは使わないので、Ubuntuのguidを入れています。

dopyOnSelectとkeybindingsは他のターミナルアプリでよく見られる設定に近づけるための設定ですね。

今後もっとWindows Terminalを拡張して使いやすくしていきたいなーと思っているところです。


以上、快適にプログラミングをするためのWSLオススメ設定の解説でした。

WSLを使ったプログラミング環境構築のお役に立てれば幸いです。

この記事もおすすめ