Windows + WSL2で変わる開発環境: 1年間の振り返り

# はじめに

「[約10年ぶりにWindowsで仕事する環境を整えてみた](https://qiita.com/ikeisuke/items/fde57712c98cd2e68d59) 」という記事を書いてから、早いもので1年が経過しました。1年が経過すると様々な変化がありますので、Advent Calendarも空いてることですしそれらの差分を更新したいと思います。


# 簡単なまとめ

- WSL2のsystemdサポートとWSLgの問題は、社内のドメイン側の設定が原因であったようです。問題が解決し、WSL2とWSLgを組み合わせることで、ほとんどの開発作業が可能になりました。
  - 現在、Windows側で主に起動しているのは、Chrome、Slack、Windows Terminalのみです。
  - 前回、Windows側にインストールしていた[これらのツール](https://qiita.com/ikeisuke/items/fde57712c98cd2e68d59#%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%BB%E3%81%97%E3%81%84%E3%81%A8%E6%80%9D%E3%81%84winget%E7%B5%8C%E7%94%B1%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE)は削除し、WSL2側にのみインストールしています。
  - Copilot Chatを使うため新しくVSCodeを導入しました。VSCodeをWindows側にインストールしWSL2側で起動すると自動的にWSL2にサーバーがインストールされ、Windows側がクライアントとして動作するため、導入が非常に簡単でした。IntelliJも同様になれば嬉しいです。
- Microsoft WhiteboardはMiroのような無限スクロールなホワイトボードで使いやすいです

# Windowsに関連する設定

## インストールしているアプリケーション

- PowerToys
- Windows Terminal
- Google Chrome
- Slack
- VSCode
- Microsoft Whiteboard / Loop

### PowerToysの設定

前回はMacのキーバインドをWindowsに近づける設定をしていましたが、逆にWindowsのキーバインドをMacに近づけることにしました。

- キーの再マップにより、「Caps Lock」を「Ctrl(Left)」に変更します。
- ショートカットの設定で、「Win(Left) + Ctrl(Left) + Space」を「Alt(Left) + IME Kanji」に変換します。
- ショートカットの設定で、「Win(Left) + `」を「Undefined」に変換します。

#### 課題
Windowsの起動からPowerToysの起動まで、およびPowerToysのアップデート時にはキーバインドが適用されていない時間があり、時折Caps Lockをかけてしまうことがあります。

### Microsoft Whiteboard

ペンタブを購入したので、Whiteboardアプリケーションを探していました。そしてMicrosoft Whiteboardを見つけ、現在試用中です。ローカルアプリケーションとして動作するため、Miroに比べて軽快に感じます。

#### 課題
しかし、ペンタブを使っても、蛍光ペンなどデフォルトではないペンに切り替えても、デフォルトのペンのようにしか動作しないため、使いづらさがあります。

### Microsoft Loop

Microsoft LoopはコンフルやWikiのようなコレボレーションツール  
見た目も操作性もよく、Office365アカウントで共有も楽なので、既存資産がないのであればこれで十分な印象を受けました。

#### 課題
デスクトップアプリ版ではGitHubと連携できるのですが、Web版では連携できません。そしてMacユーザーにはWeb版しかなく、GitHubとの連携が取れません。自分を除く部署のメンバーがMacユーザーなので、残念ながら利用を諦めています。


# WSL2 に関連する対応

## systemd 有効化

```
cat <<EOF | sudo tee /etc/wsl.conf > /dev/null
[boot]
systemd = true
[network]
generateResolvConf = false
EOF
```
この設定後、WSL2を再起動してから入り直すことになります。

## homebrewのインストール

```
# install homebrew 
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" && \
  (echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /home/$(whoami)/.zprofile  && \
  eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" && \
  sudo apt-get -y install build-essential && \
  brew install gcc
```

## Dockerのインストール

```
# install docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

## その他必要なものをインストール

```
# install required packages
sudo apt -y install pip openjdk-17-jdk zip jq mkcert libssl-dev
sudo -H pip install hjson
brew install ghq gh awscli aws-cdk volta goenv git-secret peco remarshal yq kubectl k9s aws-iam-authenticator tfenv
curl -sS "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb" && \
  sudo dpkg -i session-manager-plugin.deb && \
  rm -f session-manager-plugin.deb
goenv install 1.21.5 && goenv global 1.21.5
volta setup && npm install ts-node -g
tfenv install && tfenv use
```

## フォントや日本語変換の対応

Windows側のフォントを読み込むための設定と、IMEのインストールを行っています。Linuxでの日本語入力に慣れておらず、Win11のWSL2 (WSLg)を日本語化しMozcで日本語入力する方法について紹介されている[こちらのサイト](https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/)を参考にしています。

```
cat << 'EOS' | sudo tee /etc/fonts/local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>
<!-- Created by bash script from https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/ -->
EOS
sudo apt -y install language-pack-ja 
sudo apt-get install language-pack-en language-pack-en-base manpages
sudo apt install -y fcitx-mozc dbus-x11
sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id"
cat << 'EOS' | tee -a ~/.zprofile
#Added by bash script from https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese/
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
if [ $SHLVL = 1 ] ; then
  (fcitx-autostart > /dev/null 2>&1 &)
 x set -r 49  > /dev/null 2>&1
fi
#Added by bash script: end
EOS
```

このようにWindows + WSL2による開発環境は1年間で大きく進化し、私自身も快適に開発作業を行えるようになりました。