WSL2+Ubuntuの開発環境を構築する(2023年版)

Linux

はじめに

正式に WSL2 がリリースされたことで、Windows 10/11でもLinuxシステムの開発環境が容易に構築できるようになりました。WSLg により Linux の GUI アプリケーションを実行できるようになり、WSL バージョン 0.67.6以上では systemd もサポートされたことで Snapsパッケージ や Docker も利用できるようになりました。

WSLに関する情報は、正式リリース前からたくさんありますが、中には正式リリース後の情報として不適切なものも含まれています。そこで正式リリース後のWSL2に対応した開発環境の構築手順を整理しました。この手順では、次の開発環境の構築をゴールとします。

  • Ubuntu 22.04 LTS
  • 最低限のLinux開発ツール
  • WSL ユーティリティ (WSL から Windows のデフォルトブラウザを起動したいため)
  • システムロケール変更
  • 日本語入力環境
  • Homebrew
  • GitHub環境
  • Snaps
  • Docker Community Edition
  • Windows IDE環境

準備

Windows Update を実行して最新化した状態で、次のソフトウェアを Microsoft Store もしくは GitHub からダウンロードし、インストールします。

Windows Terminal は今どきの高性能なターミナルアプリケーションで、PowerShell や Ubuntu・SSHに対応しています。

WSL2の設定の確認と最新化

PowerShell を管理者モードで立ち上げます。

WSLバージョンの確認

wsl コマンドでバージョンを確認します。

PS > wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.22621.1105

WSL バージョンが1未満の場合は、Windows Update や Microsot Store の更新がないか、確認してください。wsl コマンドでもアップデートできます。

wsl --update

ディストリビューションのWSLバージョンの確認

wsl コマンドでディストリビューションの WSL バージョンを確認します。

PS > wsl --status
既定のディストリビューション: Ubuntu-22.04
既定のバージョン: 2

既定のバージョンが「1」の場合、対象のディストリビューションのバージョンを「2」に変更します。

wsl --set-version Ubuntu-22.04 2

ディストリビューションの既定のバージョンとして設定する場合は、次のコマンドを実行します。

wsl --set-default-version 2

WSLの詳細設定

WSLでは、次の設定ファイルによって起動するたびに自動的に設定が適用されます。

  • .wslconfig: WSL2 で実行されるすべてのインストール済みディストリビューションのグローバル設定
  • wsl.conf: WSL1 または WSL2 で実行されているLinux ディストリビューションの設定

メモリとプロセッサ数の設定 (.wslconfig)

メモリとプロセッサ数を設定します。設定は任意なので必要ない方は、スキップしてください。

  • メモリ: Windows の合計メモリの 50% または 8 GB のどちらか少ない方。20175 より前のビルドでは、Windows の合計メモリの 80%
  • プロセッサ: Windows のプロセッサと同じ数

それぞれ設定したい場合は、$HOME/.wslconfig を作成し、次の設定を追加します。

[wsl2]
memory=20GB 
processors=10

設定を有効にするには、WSL をシャットダウンして再起動します。シャットダウンするには、Windows Terminal (PowerShell) で次のコマンドを実行します。

wsl --shutdown

systemdを有効にする (wsl.conf)

Windows Terminalのタブで Ubuntu を起動します。systemd を有効にするには sudo vi /etc/wsl.conf でテキストエディターを実行し、次の設定を /etc/wsl.conf に追加します。

[boot]
systemd=true

設定を有効にするには、WSL をシャットダウンして再起動します。シャットダウンするには、Windows Terminal (PowerShell) で次のコマンドを実行します。

wsl --shutdown

シャットダウン後、Windows Terminal から Ubuntu を起動して systemd のプロセスを確認します。

systemctl status
hostname
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Sun 2023-01-01 00:00:00 JST; 0min ago
   CGroup: /
           ├─user.slice
:

Ubuntu に開発環境をインストールする

Windows Terminal から Ubuntu を起動します。既に起動済みの場合は、それを利用します。

apt パッケージの更新

最初にインストール済みのパッケージをアップデートおよびアップグレードします。

sudo apt update && sudo apt upgrade -y

開発環境のインストール

最低限必要になる開発ツール一式をインストールします。

sudo apt install -y build-essential git curl

任意で利用するエディター等をインストールします。

sudo apt install -y emacs vim

wslu のインストール

wslu は便利なユーティリティコマンドが含まれているパッケージです。wslu に含まれる wslview を利用することで、WSL から Windows のデフォルトブラウザを起動することができます。

sudo apt install -y ubuntu-wsl

Linux では $BROWSER で定義されたブラウザを優先して起動するので wslview を指定します。また open のエイリアスを追加しておくと便利です。

export BROWSER=wslview
alias open=$BROWSER

ロケール変更

日本語パッケージをインストールし、システムロケールを日本に変更します。

sudo apt install language-pack-ja -y
sudo localectl set-locale LANG=ja_JP.UTF-8

日本語配列のキーボードを利用する場合は、sudo vi /etc/default/keyboard でテキストエディターを実行し、次の設定に変更します。

XKBMODEL="jp106"
XKBLAYOUT="jp"

設定を有効にするには、WSL をシャットダウンして再起動します。シャットダウンするには、Windows Terminal (PowerShell) で次のコマンドを実行します。

wsl --shutdown

シャットダウン後、Windows Terminal から Ubuntu を起動して システムロケールを確認します。

 $ localectl
   System Locale: LANG=ja_JP.UTF8
       VC Keymap: n/a
      X11 Layout: jp
       X11 Model: jp106

日本語入力環境

Windows Terminal から Ubuntu を起動した場合、CUI のテキストエディター(emacs や vim など)やコマンドラインにWindows IMEを用いた日本語入力を行うことができます。WSLg 経由で起動した GUI アプリケーションに日本語入力を行う等の理由がなければ、インストールする必要はありませんのでスキップしてください。

fcitx-mozc と日本語入力の確認用に gedit をインストールします。

sudo apt install -y fcitx-mozc dbus-x11 gedit

~/.profile に次の設定を追加します。

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
fcitx-autostart &> /dev/null

日本語入力の設定を変更する場合は、次のツールを起動して設定してください。

fcitx-config-gtk3 &

設定を有効にするには、WSL をシャットダウンして再起動します。シャットダウンするには、Windows Terminal (PowerShell) で次のコマンドを実行します。

wsl --shutdown

シャットダウン後、Windows Terminal から Ubuntu を起動して gedit で日本語入力を確認します。

gedit &

Homebrew

次のコマンドでHomebrewをインストールします。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

インストールを開始してしばらくすると sudo のパスワードを要求されるのでパスワードを入力してインストールを完了します。次のコマンドを実行し、 brew を有効にします。

eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

インストールに問題がないか確認します。

brew doctor

「Your system is ready to brew.」と表示されれば問題ありません。問題がなければ、次のコマンドで .profile に brew を有効にするコマンドを追加します。

(echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> ~/.profile

GitHub環境

git コマンドの最低限の設定を行います。

git config --global user.name "GitHubのID"
git config --global user.email "GitHubに登録したメールアドレス"

Github CLI をインストールします。

brew install gh

次のコマンドで GitHub の認証トークンを取得します。

gh auth login

いくつか選択が発生しますが、ここでは「GitHub.com」「HTTPS」「Login with a web browser」を選択します。Web ブラウザが起動しますので、コンソールに表示された one-time code を用いて認証を行います。認証後は、 GitHub の認証トーンがローカルファイルとして保存されます。

gh を git コマンドのクレデンシャルヘルパとして有効にするために、次のコマンドを実行します。

gh auth setup-git

gh コマンドの動作確認のため、リポジトリ一覧を取得します。

gh repo list

Snaps

snapd をインストールします。

sudo apt install -y snapd

次のコマンドで snapd のステータスを確認します。

systemctl status snapd
● snapd.service - Snap Daemon
     Loaded: loaded (/lib/systemd/system/snapd.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-02-23 15:49:39 JST; 1h 20min ago
TriggeredBy: ● snapd.socket
   Main PID: 303 (snapd)
      Tasks: 16 (limit: 19056)
     Memory: 81.0M
     CGroup: /system.slice/snapd.service
             └─303 /usr/lib/snapd/snapd

snap コマンドの動作確認のため、パッケージを検索します。

sudo snap find hello-world

Docker Community Edition

必要なパッケージをインストールします。

sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Docker の公式 GPG 鍵を追加します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

stable(安定板)リポジトリを追加します。ここでは amd64 を追加します。

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

最新バージョンのDocker CEをインストールします。 Docker デーモンは自動的に起動します。

sudo apt update && sudo apt install -y docker-ce

docker コマンドの動作確認のため、hell-world イメージを実行します。

sudo docker run hello-world

sudo なしで docker コマンドを実行できるようにするために docker グループにログイン中のユーザーを追加します。

sudo usermod -aG docker $USER

設定を有効にするには、WSL をシャットダウンして再起動します。シャットダウンするには、Windows Terminal (PowerShell) で次のコマンドを実行します。

wsl --shutdown

シャットダウン後、Windows Terminal から Ubuntu を起動して sudo なしで docker コマンドの動作確認を行います。

docker run hello-world

Windows IDE環境

Visual Studio Code の環境を構築します。https://code.visualstudio.com/download からWindowsのインストーラをダウンロードし、インストールを開始します。

インストール中に [追加タスクの選択] が求められたときは、[PATH への追加] オプションを有効にします。 PATH を追加することで code コマンドを使用して WSL からプロジェクトを簡単に開くことができます。

設定を有効にするには、PCを再起動します。再起動後、Windows Terminal から Ubuntu を起動して code コマンドが有効になっていることを確認します。

code .
WSLからVSCodeを起動する

VSCode を起動できたら、Remote Development 拡張機能パック のインストールを推奨します。この拡張機能パックには、リモート操作関連の拡張機能と WSL 拡張機能が含まれています。コマンドパレット(ショートカットは CTRL+SHIFT+P)に WSL と入力すると、使用可能なオプションの一覧が表示されます。

コマンドパレットからWSLの操作を選択する

最後に

WSL2が正式にリリースされたことで、Windows 環境でも Windows と Linux の良い所取りでかつオープンな開発環境を構築できるようになりました。職場の PC はセキュリティ対策などの都合で Windows を利用するケースが多いので、開発者にとって WSL2 は魅力的な環境といえるでしょう。

参考

コメント