約10年ぶりにWindowsで仕事する環境を整えてみた

# はじめに

ここ10年ほど仕事でもプライベートでもMacしか使っていなかったのですが、WSLが出てからずっとWindowsでもいけるんじゃないかと気になってました。
WSLも2になりいろいろ枯れてきてそうだったので、Windows機を用意してもらい乗り換え検証をしています。

試行錯誤しながらやっていたので履歴やメモなど残っていないものもあり、WSLも最新にできていないので、まだ道半ばですが、ここまでのまとめを備忘録として残します。

# 簡単なまとめ

- まずは winget を入れてから色々入れる
- WindowsとWSLはかなりシームレスに連携できる
  - bashと打つとカレントディレクトリそのままでLinuxに入れてちょっと便利
  - Linux側でWindowsの実行ファイルを起動しても普通に動く
- Windows Hello 顔認証最高


# 目次
<!-- タイトルとアンカー名を編集 -->
1. [まずやったこと](#first)
1. [WSLに関連する対応](#WSL)
1. [端末へのログイン方法](#login)

<a id="#first"></a>
# まずやったこと

Slackで「Windowsでやるべき初期設定」を聞いたら、`winget`, `Windows Terminal`, `Power Toys`のインストールと教えてもらったのでインストール

## winget

[Microsoft Store](https://www.microsoft.com/p/app-installer/9nblggh4nns1#activetab=pivot:overviewtab)からインストール
詳細は[winget ツールを使用したアプリケーションのインストールと管理](https://learn.microsoft.com/ja-jp/windows/package-manager/winget/)を参照

## Windows Terminal

wingetをインストールしたら、コマンドプロンプトを開いて以下を実行

```
C:\Users\isono>winget install "9N0DX20HK701"
```
  
ちなみにWindows Terminalと指定してもインストールできない
```
C:\Users\isono>winget install "Windows Terminal"
複数のパッケージが入力条件に一致しました。入力内容を修正してください。
名前             ID                        ソース
--------------------------------------------------
Windows Terminal 9N0DX20HK701              msstore
Windows Terminal Microsoft.WindowsTerminal winget
```

インストール後起動して、設定からデフォルトのターミナルアプリケーションをWindows Terminalに変更した

## Power Toys

こちらは名前でインストール可能
```
C:\Users\isono>winget install "Power Toys"
```

今のところ、Keyboard Managerを利用して、`Caps Lock` を `Ctrl (Left)`に変換するためだけに利用している。
便利な使い方あったらコメントで教えてください。

## 最低限ほしいと思いwinget経由でインストールしたもの

多くはLinux側にもインストールするがWindows側にあるとその場で使えて楽なのでインストールしている

- Git for Windows `winget install Git.Git`
- GitHub CLI `winget install GitHub.cli`
- Docker Desktop `winget install Docker.DockerDesktop`
- JetBrains Toolbox `winget install JetBrains.Toolbox`
- AWSCLI `winget install -e --id Amazon.AWSCLI`
- GoLang `winget install -e --id GoLang.Go.1.19`

### gitに関するtips

#### EDITOR
gitをインストールすると内部用にvimがインストールされるらしい。
`git commit` した時に何もしなくても慣れ親しんだエディタで表示されてとても助かった。

#### 改行コード

一部のスクリプトがLinux側で動かないためいろいろ悩んだ結果改行コードの問題だとわかった
事前に以下を設定しておくことを推奨
```
git config --global core.autocrlf input
```

## winget経由でインストールできなかったもの

- ghq

仕方ないので scoopもインストールして、scoop経由で入れた。
wingetをやめてこちらに統一すべきなのか補助的に使っていいのか悩み中。

```
PS C:\Users\isono> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
PS C:\Users\isono> iwr -useb get.scoop.sh | iex
PS C:\Users\isono> scoop install ghq
```

## MacとWindowsで日本語入力モードに入るキーを統一

US配列を利用しているが、Macでは `⌘+Space` Windows では ``Alt + ` `` と違う操作で入力モードを切り替えることになる
プライベートの端末はMacなこともあり2つの端末を行ったり来たりした際に入力モード切替でもたつくのでキーバインドを変更した

軽く調べた感じ、Windows側での入力モード切替をMac側に寄せる方法を見つけることができなかったため、
とりあえず、Mac側の設定を `` Option(Alt) + ` `` に変更して試している

<!-- 各チャプター -->
<a id="#WSL"></a>
# WSL関連の設定

## WSLのインストール

後述のWSLのバージョンが古い問題があり[以前のバージョンの WSL の手動インストール手順](https://learn.microsoft.com/ja-jp/windows/wsl/install-manual)の手順で対応した。

ただし、ほとんどの方は[WSL を使用して Windows に Linux をインストールする](https://learn.microsoft.com/ja-jp/windows/wsl/install)を参照して簡単に対応できると思われる。

また、これ以降Windows Terminal内で `bash` と打つとLinux側に入れるようになる。最初何事が起きたのかわからなくてびっくりした。(環境変数などwslコマンドで起動したときと違う気がするので不安であまり活用はできていない)

## homebrewのインストール

基本的にアプリケーションはaptを利用してインストールするが、Macを使っていたこともあり足りないものはhomebrewで入れたいと思いインストール
WSLは基本的にrootで起動してしまうため、まずはユーザーを作りsudoできるようにしたうえで、[公式サイト](https://brew.sh/index_ja)にあるコマンドを利用してインストールした

なお、WSL側のデフォルトユーザーの変更は以下のコマンドで可能
```
PS C:\Users\isono> ubuntu config --default-user xxxx
```

また、sudoできなくなるなど、何らかの理由でwsl側のrootで入らないといけない場合には以下のようにすれば入れる

```
PS C:\Users\isono> wsl -u root
```

## WSL側からIntelliJを起動する

基本的にはLinux側を使いたいがまだLinux版のIntelliJを使えるようにできていないため、以下のように強引にWindows側のバイナリを呼び出して起動している。
ソースコードは `/mnt/c/` のほうにあるためかシームレスにIDEが起動される。

強引すぎる感はあるので、WSLgが使えるようになったらLinux版を利用することを検討中。

設定内容抜粋
```zsh
cat ~/.zshrc
function idea() {
  EXE=$(find /mnt/c/Users/isono/AppData/Local/JetBrains/Toolbox/apps/IDEA-U/ch-0/ -name "idea*exe" | sort -r | head -1)
  eval "$EXE . &" >/dev/null 2>&1
}
```

起動方法
```zsh
cd /mnt/c/path/to/project
idea
```

## WSL2での課題

### WSL上でドメイン名が解決できない

まだよくわかっていないが、WSL側から名前解決ができなくて困ったため、以下のような設定をすることで回避中。
（この設定では社内ネットワークとの接続では問題がでるのでまだ調整中）

一部抜粋
```
% cat /etc/wsl.conf
[network]
generateResolvConf = false
```

一部抜粋
```zsh
% cat /etc/resolv.conf
nameserver 1.1.1.1
```

### WSL2でsystemdが利用できない

systemd利用の詳細は[Systemd support is now available in WSL!](https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/)を参照

systemdを利用したい要件があるが、業務用端末なのでもちろんWSUS配下にて管理されていて、ポリシー上アップデート出来なくて現在管理部門に確認中
特定のパッチが当たったWindows10もしくはWindows11にてWSLを[Microsft Storeから最新版をインストール](https://www.microsoft.com/store/productId/9P9TQF7MRM4R)すれば使えるはずだが、アップデートできていない

以下のような状況
```powershell
PS C:\Users\isono> wsl --update
更新をチェック中...
エラー: 0x8024500c

PS C:\Users\isono> winget install "Windows Subsystem for Linux"
見つかりました Windows Subsystem for Linux [9P9TQF7MRM4R] バージョン Unknown
このパッケージは Microsoft Store から提供されています。winget は、現在のユーザーに代わって Microsoft Store からパッケージを取得す
る必要がある場合があります。

...中略...

パッケージ取得の確認/要求...
パッケージ取得の成功の確認/要求
パッケージのインストールを開始しています...
Microsoft Store パッケージのインストールまたは更新に失敗しました。エラー コード: 0x8024500c
```


### WSLgも利用できない

今でもX serverを入れればできるが、公式にWLS側のGUIアプリをWindows側で操作できるようになる（はず）

上の件と同様、アップデートが必要なのでアップデート出来たら検証する予定
[WSLg](https://github.com/microsoft/wslg)


<a id="#login"></a>
# 端末へのログイン方法

## Windows Hello 顔認証が便利すぎる

最近のスマートフォンでは当たり前になっている顔認証がWindowsでもできるようになっている
（もちろんハードウェアの対応とポリシーの許可が必要）

画面を開いた直後に自動的に識別してログインまでしてくれるため、ほぼシームレスに作業に入ることができるのは体験としては控えめに言って最高。

自宅ではクラムシェルモードで使っていたため恩恵を得られていなかったが、先日ELECOMの[UCAM-CF20FBBK](https://www.elecom.co.jp/products/UCAM-CF20FBBK.html)を購入したことにより、クラムシェルでも顔認証が使えるようになり正直なところMacのログインが最近めんどくさい。

Macもそのうち対応する気もするが、外付けのデバイスは出ないと気がするので、こういった拡張性に関してはWindowsでないとできない部分だなと感じた。

## Windows Hello 指紋認証

Macにもあるので特に差はない
設定はしているが顔認証使ってるので出番なし

## PINコードでの認証

:::note
2022/12/12 17:30追記
コメントにて[Microsoftの見解](https://learn.microsoft.com/ja-jp/windows/security/identity-protection/hello-for-business/hello-why-pin-is-better-than-password)を教えていただきました。
ポリシー依存な部分もありそうですが、ローカルでの管理を含めパスワードよりも安全なようで安心しました。
:::

セキュリティ上どうなんだろう？
最低限だと4桁数値でいけるので、楽な反面怖い感じを受けている

この件について詳しい方いたらぜひコメントで教えてください。


---
# 最後に
というわけで、MacユーザーがWindowsに乗り換えるための第一歩としてやったことをまとめてみました。
自分がWindowsを受け取った直後は何をしたらいいのかわからない状況だったので、一例として切り替える方の参考になれば幸いです。

また、WSLのアップデートができるようになったら最新のWSLでいろいろ試して共有したいと考えています。