今回はプログラミング環境に関する記事です。
最近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を作成して以下を入力して保存する。 |
~/.profileに下記の内容を追記する。 |
wsl.confがマウント時の設定、.profileがログイン後のsampleユーザーの設定で、これらの設定後に自分の場合はWindowsごと再起動してからWSLを起動するとバッチリ快適な状態になりました。
3. sudoをパスワード無しで使えるようにする
WSL上のメインユーザーでsudoを使うときに毎回パスワードを求められるのが不便で仕方がないので、sudoをパスワード無しで使えるように設定します。
※ セキュリティ上のリスクが伴うので実施する際は自己判断でお願いします。
自分はデフォルトのsudoグループを汚さないために、パスワード無し用のsudoグループを作成して設定を行います。
今回は「superadmin」グループでパスワード無しを実現する例ですので、適宜好きなグループ名に変更してご利用ください。
グループを追加 |
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に以下の内容を追記する。 |
上記設定後、繰り返しですがWindowsごと再起動するとWSLからDockerを使えるようになっていると思います。
確認するには以下のコマンドで Hello from Docker!
のメッセージが表示されていれば完了です。
$ docker run hello-world |
場合によっては、「docker-credential-desktop.exe が見つからない」というエラーが発生することがあり、以下の設定を追加することで回避できるようになりました。
※ UsernameはDockerのユーザーアカウント、Secretにはパスワードを直で書いています。
~/.docker/config.jsonを以下のような形に編集する。 |
Dockerのバージョンアップなどで再発することがあるので、正確なエラーメッセージは再発したらまた追記しておきます。
5. LinuxのホームディレクトリをWindowsと同じにする
WindowsのホームディレクトリとLinuxのホームディレクトリを揃えておくと、両方で同じファイルを見やすくなるので共通化しています。
こちらの設定は「Linux上とWindows上でファイル管理は分ける」という方はあまりやらなくても良い設定かもしれません。
設定方法はpasswdファイルのホームディレクトリを指定している箇所を変更すれば完了です。
念のためこちらもWindowsごと再起動しておくようにしました。
$ sudo vim /etc/passwd |
また、以下のコマンドでできるかと思ったのですが、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」はWindows Terminalを立ち上げたときに起動するものを選択する設定で、自分は普段Ubuntuしかターミナルでは使わないので、Ubuntuのguidを入れています。
dopyOnSelectとkeybindingsは他のターミナルアプリでよく見られる設定に近づけるための設定ですね。
今後もっとWindows Terminalを拡張して使いやすくしていきたいなーと思っているところです。
以上、快適にプログラミングをするためのWSLオススメ設定の解説でした。
WSLを使ったプログラミング環境構築のお役に立てれば幸いです。