Mac使いがWindowsをセットアップする

現在，私はMacbookをメインマシンとして使用している．特にMacbookおよびMacOSに不満はないが，Windowsも必要になることもごくたまにある．また，費用対満足度はともかくWindowsマシンは軽量でスペックの高いものが安価に購入できる点も魅力的だ．さらに，WSL2によりWindowsのLinux環境との親和性も高まり，研究での使用の利便性も向上しつつある．以上のことから，約10年ぶりに安価で軽量なWindowsのラップトップPCを購入し，研究と論文執筆に使用する目的でセットアップした記録をここに記す．

## インストールしたソフトなど

- WSL2
    - Linuxの使用
- Windows terminal
    - TerminalとWindowsShellを使いやすくする．
- Powertoys
    - キーバインドを変更する．
- Ctrl2Cap
    - CapsLockキーをCtrlキーに変更する．
- Visual studio code
    - コードエディタ
- Notepad++
    - 軽量テキストエディア
- texlive
    - LaTex
- Docker
- Robot Mono
    - Visual studio code用フォント

## ホームディレクトリを意図した名前にする

**重要**

Windowsを初めて起動するときアカウントを作る必要がある．しかし，**アカウントを作る際，Microsoftアカウントを使うとホームディレクトリの名前が勝手にMicrosoftアカウントの「名前」になる**．例えば，ホームディレクトリをichiroとしたいのに，suzukiになるということが起こる．

ホームディレクトリを意図した名前にしたいのならば，ホームディレクトリで使用したい名前でローカルアカウントを作成し，その後Microsoftアカウントと紐付けすれば良い．

## Linux環境のインストール

開発はLinux上で行っているため，terminalが動くこと必須だ．Windows11では，WSL2を導入することで，Windows上で簡単にLinux環境を構築できる．もちろんterminalだけではなく，あらゆるLinuxでうごくソフトウェアを使用できる（もちろんXも動く）．

### WSL2の導入手順

導入手順は次のとおりである．

- Windows Terminalをインストールする（[必須ではないが，複数のコマンド ラインの使用を計画している場合は推奨されている](https://learn.microsoft.com/ja-jp/windows/wsl/setup/environment)）．
- PowerShellを管理者権限で実行する．
- PowerShellで次のコマンドを打つ．
  ````
  wsl --install -d Debian
  ````
以上でDebianが導入できる．Debian以外のディストリビューションも用意されているので好みのものを選べば良い．私は普段使っているDebianにしたが，デフォルト値であるUbuntuでも良いだろう． 

WSL2を有効にするために，インストールが完了したあと再起動する．

### Linuxで動かすソフトウェアのインストール

次のコマンドで，Linuxで使うかもしれないソフトをインストールする．
````
sudo apt update
sudo apt upgrade
sudo apt install zsh keychain emacs python3-venv
````
build-essentialやpython，R，その他Linuxのツールは必要になったときにDockerから使ってもよいだろう．一方で，Jupyter labは頻繁に使いそうなので，pythonとvenvは入れておくことにした．


### WSL2の設定

WSL2の設定は.wslconfigに書き込む．.wslconfigで指定した設定はWSL2で動かす全てのLinuxディストリビューションに適用される．.wslconfigは
```
C:\Users\<UserName>\.wslconfig
```
に保存する．参考のため[公式ページ](https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config)で示されている設定例を載せておく．設定例から必要なものを抜き出し.wslconfigに記入するのが良いだろう．

WSLは仮想マシン上でLinuxを動作させているため，その仮想マシンが使用するCPUの数やメモリもこちらで指定することができる．特にメモリに関しては，default値がメインメモリの50%もしくは8GBとされており，16GB以下のメモリを搭載したPCには厳しい設定となっている．16GB以下のメモリのPCを使用する場合は，.wslconfigでメモリの設定をしたほうが良いだろう．

```bash
# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB 

# Sets the VM to use two virtual processors
processors=2

# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
kernel=C:\\temp\\myCustomKernel

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB

# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
swapfile=C:\\temp\\wsl-swap.vhdx

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
pageReporting=false

# Turn on default connection to bind WSL 2 localhost to Windows localhost. Setting is ignored when networkingMode=mirrored
localhostforwarding=true

# Disables nested virtualization
nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
debugConsole=true

# Enable experimental features
[experimental]
sparseVhd=true

```

### zsh
初期状態で使えるシェルはbashだ．bashでも問題ないが，zshの方が機能が多く使いやすい．次のコマンドでzshを標準のシェルにする．
````
chsh -s /bin/zsh
````

### シンボリックリンク

WSLからwindowsのホームフォルダをすぐ使えるよう，WSLのホームディレクトリにシンボリックリンクを張っておくと良い．
````
ln -s /mnt/c/Users/ユーザ名 ~/win_home
````

### 設定

普段使っているLinuxとMacのdot filesをWLSのホームディレクトリに入れれば良い．

.zshrcや.bashrcにおいて，Mac，Linux，WSLそれぞれのみで有効にする設定は次のようにかけば良い．
````bash
if [ `uname` = "Darwin" ]; then
# ここにMacで使用する設定を書く．

elif [ `uname` = "Linux" ]; then
    #ここにLinuxで使用する設定を書く．

    if [ `hostname` = "foobar" ]; then
        #特定のホストでしか有効にしない設定をここに書く．

    fi

    if [[ "$(uname -r)" == *microsoft* ]]; then
        #WSLでのみ使う設定はここに書く．

    fi
````

### lsでフォルダの色がおかしい

Windowsのフォルダはパーミッションの影響で初期設定では緑色に表示され見にくい．原因はother usersがwritableになっているからだ．この場合でも他のディレクトリと同じ色にすれば良い．私は次のようにした．
````
export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=01;34:st=37;44:ex=01;32'
````
ow=01;34がother usersがwritableになっている場合の色設定である．これをディレクトリの標準の色di=01;34と同じにすることで，Windowsのフォルダの色も他のディレクトリと同じ色になる．

### ドライブ，ディレクトリの場所

WindowsのCドライブは/mnt/cにマウントされる．USBフラッシュメモリなど外付けドライブはマウントされていない．次のコマンドでマウントすれば良い．
```bash
sudo mkdir /mnt/d #これは1回のみで良い．ディレクトリ名をdとしたが何でも良い．
sudo mount -t drvfs D: /mnt/d
```
このコマンドは，Windows用にフォーマットされ，WindowsがマウントしたドライブをWSL2上のLinuxでマウントするためのもので，Ext4などLinux用にフォーマットされたドライブには適用できないことに注意したい．

Linuxのルートディレクトリを開くには，エクスプローラーを立ち上げると左にLinuxと表示されているので，それをクリックすればよい．



## Macとファイルを同期する

MacとはDropboxを介しファイルを同期する．

````
Mac <-> Dropbox <-> Windows
````

Dropbox上のファイルはWSL上でも使える．
````
ln -s /mnt/c/Users/ユーザ名/Dropbox ~
````
のようにシンボリックリンクを作っておけば，Macと同じようにWSLでもDropbox内のファイル使える．もちろんWSL上で変更しても同期もされる．


## キーバインドなど

MacOSでは標準機能でCrtlキーとCapsLockの入れ替えやショートカットキーの作成・変更が可能だ．しかし，Windowsではできない．WindowsではMicrosoftが配布するPowerToysをインストールしてキー配置やショートカットキーをすることになる．

### CapsLockキーをCtrlキーにする

Ctrlキーはよく使うキーなのでaの横に配置したい．しかし，PowerToysでCapsLockキーをCtrlキーに変更しても挙動が不安定でうまく動かない．CapsLockキーをCtrlキーに変更するためには**Ctrl2Cap**をインストールすれば良い．

### キーマップおよびキーバインドの変更・追加

キーバインドはPowerToysのKeyboard Managerで追加できる．次のキー・キーバインドを変更・追加した．

#### PowerToysによるキーの再マップ

- 無変換をWinキーに
    - Macのcommandキーがスペースの隣なので変更した．
````
IME Non-Convert to Win
````

#### PowerToysによるショートカットキーの再マップ

- Ctrl+TabをWinキーに
    - Ctrl+Tabでファイルやアプリを検索するために追加した．
- Win+SpaceをIME kanjiに
    - MacがCommand+Spaceで日本語変換を起動するので追加した．


## テキストエディタ

WSLにはEmacsとVIMを入れておけば問題ないが，Windowsにどのテキストエディタを入れるかは悩むところである．少なくとも，テキストファイルを開く軽量なテキストエディタと環境非依存でリッチなテキストエディタが必要だ．

### 軽量なテキストエディタ

軽量のテキストエディタの選択は非常に難しい．代表的なものは秀丸，サクラエディタだろう（terapadなど有名だが更新が止まっているものも多くある）．秀丸もサクラエディタも機能が高く非常に良いのだが，標準で対応するシンタックスハイライトが少ない点と見た目が古臭い点が気になる．今回はnotepad++を導入した．notepad++は標準で対応するシンタックスハイライトも多く特に設定しなくてもそれなりに使えそうなので選んだ．

### リッチなテキストエディタ

Macでも使用しているVisual studio codeを導入した．次のExtentionをインストールした．設定の同期をすれば，面倒なことをしなくでも，設定及びExtentionが，普段使っているMacやLinux上のVisual studio codeと同期される．

- Block Travel
    - 段落ごとに移動できる．
- Code Spell Checker
    - スペルチェッカー
- Emacs Friendly Keymap
    - Emacsキーバインドを実現してくれる．同じ機能のExtentionはたくさんあるが，試した中では一番好みの挙動をしていた．
- Japanese Word Handler
    - 日本語で単語単位の移動や選択が可能になる．
- LaTeX Workshop
    - LaTeX使いには必須のextention．
- WordCounter
    - 単語数，文字数を表示する．
- Remote - WSL
    - Visual studio codeでWSLを利用する．
- Remote - SSH
    - Visual studio codeでSSHを使ってリモートマシンを利用する．

## LaTeX

### インストール

WindowsでLaTeXを使う場合，texliveのwindows版をインストールして使う，WSL上のLinuxにtexliveをインストールして使う，Dockerから使う，の3種類ある．趣味の問題からWSL上にインストールした．

````
 sudo apt install texlive-full
````

このコマンドでtexliveをインストールすると数ギガ容量を使うので注意が必要である．必要なものを選んでインストールすることも可能だが，私は考えるのが面倒だったのでfullにした．本家から最新のものを導入することも可能だが，面倒だったのでaptを使った．

### LaTexをどうやって使うか

前述の通りWindowsでLaTeXを使う方法はいくつかあり，それぞれ使い方が違う．WSL上のLinuxのLaTeXを使うためには3種類方法がある．

- 1つは，通常のLinuxと同じく，terminal上でEmacsやVimを使ってtexファイルを編集し，pdflatexなどを使ってコンパイルすれば良い．
- 2つは，Visual studio codeを使う方法である．
    - Remote - WSLを用いVisual studio codeをWSLに接続し，Linux内のtexファイルを編集する．
    - LaTeX Workshopの機能を使ってコンパイルする．もしくは，Visual studio codeの下部のterminalでコマンドを使いコンパイルする．
- 3つは，Windowsのテキストエディタでtexファイルを編集し，WSL上でコンパイルする．

私は2つ目の方法でLaTeXを使うことにする．

## フォント
フォントは使い心地に極めて重要なのでこだわるところだ．

Visual studio codeは複数のフォントを指定できる．Visual studio codeではアルファベットはRobot Mono Light，日本語はYu Gothic Lightを指定した．

WindowsTerminalのフォント選びは悩むところだ．WindowsTerminalではフォントを一つしか設定できない．つまり，アルファベットと日本語それぞれ好みのものを使ったフォント探さねばならない．

WindowsTerminalでフォントを変更するには，
````
設定->JSONファイルを開く
````
と選んでいき，開かれたJSONファイルの中のprofilesのなかに次のコードを追加する．
````json
        "defaults":
        {
            "font":
            {
                "face": "",
                "size": 11,
                "weight": "light"
            }
        },
````




## Macで出来ることがWindowsで出来るか？

### Spotlightを使いたい．
Winキーを押して文字を入力すればアプリやファイルを検索して開ける．WinキーでSpotlightに近いことができる．

### タッチパッドをMacのトラックパッドのように使えるか．

タッチジェスチャー対応ならジェスチャーが使える．Windowsの設定でジェスチャーの割当は変えられる．使い心地はMacのタッチパッドの方が遥かに上ではある．

### 仮想デスクトップは使えるか？

Windowsでも仮想デスクトップは使える．

### Macのような全画面表示（フルスクリーンモード）が使えるか？

Windowsではウインドウを最大にはできるが，Macのフルスクリーンモードのようにアプリのウインドウが仮想デスクトップのようになることはない．フルスクリーンモードがないので，Macのように仮想デスクトップの切り替えでアプリを切り替える事はできない．Windowsではデスクトップの切り替えとアプリの切り替えが別れているので，必要に応じて使い分ける必要がある．

### 画面分割 (Split View) はできるか？

WidowsではSplit Viewはできない．その代わりに，MacのアプリMagnetの機能がWindowsでは標準で搭載されている．Windowsでは，ウインドウ右上の四角マークにマウスカーソルを移動させ時間が立つと分割の種類が選べる（クリック長押しでも可）ので，その機能を使えばほぼSplit Viewと同等のことができる．

### Quick Lookは使えるか？

Quick LookはWindowsでは使えない．WindowsでQuick Lookを実現するQuick Lookというソフトはあるが，余計なソフトは入れない方針なのでQuick Lookは諦める．WindowsでQuick Lookが必要なときはエクスプローラーのプレビューウインドウを有効にして対応している．

### GoodNotsは使えるか？

GoodNotesのWindows版は2022年6月の段階では存在しない．GoodNotesの自動バックアップ機能を使うとGoodNotesのノートがWindowsでも読める．

iPadのGoodNotsで以下のように設定すると，Dropboxにpdfとして最新のノートが保存される．Windowsではそのpdfファイルを読めば，最新のノートは読める（しかし書き込めない）．
````
歯車アイコン -> 設定 -> 自動バックアップ -> 自動バックアップをオンにする．
````

## 感想

昔と異なり，windowsでも簡単に研究と論文執筆に使用できる環境が構築できる．Linuxと親和性が高くなりソフト開発もやりやすくなった．WSLのおかげでWindowsではだめという場面はかなり少なくなったと言える．設定はWindows標準の機能とPowerToysを使うとでかなり変更できるので，自分好みの（Macっぽく）することが可能になった．

しかし，相変わらずUXは良くない．Windowsの設定を変えるアプリや設定の起動方法が複数通りあったり，場所がわかりにくかったりと使いにくい．UIもWindows95の時代のデザインも残りつつモダンなデザインも入りつつと，ちぐはぐさが目につく．古いWindowsと新しいWindowsのキメラ感があり，それが醸し出すなんとも言えない使いにくさがある．ハードに関しては，最安のMacbook Airと比べても数段落ちる．WindowsのラップトップPCのタッチパッド操作は進化してきているが，マウスの方が快適に使える．WindowsのラップトップPCを使うとMacbookのトラックパッドの使い心地が素晴らしいことを再認識させてくれる．