MacユーザーがWindowsを使い始める時にやったこと

# はじめに

Mac愛用者のサーバサイドエンジニア視点で、
Windowsを使い始める時に行った事を、
備忘録的に書いておきます。

※ 著者はWindowsを10年以上まともに使ってこなかったのですが、取引先都合のため、渡されたWindowsを仕方なく使うことになりました...
※ 貰ったのはWindows 11です。

基本的に以下の内容は触れていません
- Mac,Windows両方で用意されているソフト
    - docker, vscodeのインストールなど
- 各種データ移行
    - vscode, chromeのデータなど

追加や思い出した事があったら加筆していきます。

# キーバインド

Windows使い始めてからよく使うので覚えたキーバインドです

|用途  | キーバインド | 補足 |
|---|---|---|
|ウィンドウ: 最大化| [Windows] + [↑] | |
|ウィンドウ: 最小化| [Windows] + [↓] | |
|ウィンドウ: 左右寄せ| [Windows] + [←] or [→] | |
|ウィンドウ: 1/4サイズ | 左右寄せ後に [Windows] + [↑] or [↓] | |
|アプリ切り替え | [Alt] + [Tab] | ([Shift] +) [Tab] or [← →]で左右選択 |
|スクリーンショット| [Windows]　+ [Shift] + [S]| 範囲選択 & クリップボード保存 |

左右寄せなどのウィンドウ操作がデフォルトで用意されていて、
[Rectangle](https://rectangleapp.com/)みたいなのが不要だったのが、個人的にはGoodポイント


# ターミナル, コンソール

Macだとiterm2とかのCUI環境。
いわゆる黒い画面のアレ

思いの外、[色々なアプリ](https://qiita.com/Ted-HM/items/9a60f6fcf74bbd79a904)があるのですが、Windows11なら、標準で入っているWindows Terminalを使えば良さそうです。

## Windows Terminal

複数のターミナルアプリを統合的に扱うインターフェースが、Windowsに用意されていました。
Windowsも色々と変わりましたね〜

https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=ja-jp&gl=jp&icid=CNavAppsWindowsApps

こんな感じに、異なる種類のターミナルアプリを起動でき、新しいアプリを入れると追加されていきます。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97730/12727354-c016-28fe-604d-33ce6d68aea1.png">

## WSL2

実際に使うターミナルアプリに関しては、
WSLのLinux環境を使えば良さそうです。

これを選択したのは、以下の理由から

- Docker環境の構築時に入れる事が多い
    - [素直にインストール](https://ascii.jp/elem/000/004/127/4127643/)すると大抵入っている
- Linux環境でありMacと操作感が近い
- 基本的な操作は全てできる
    - Windows側のファイルも`/mnt/`にマウントされていて、アクセス可能
        - 遅いケースがあるので注意
        - Vagrantを使う場合は推奨しません

著者はDockerを入れる時に、WSL2インストール済みでした。

未インストールの場合、チュートリアルにかなり詳しく書かれていたので、こちらを見てもらうと良いです。

https://learn.microsoft.com/ja-jp/windows/wsl/setup/environment

ただし、Vagrantを開発に使うケースでは、WSLからVagrantを使うことはやめた方が良さそうです。
試してみたところ頻繁に問題が起こるので、PowerShellなど他のCLIから使用するのが無難かと思います。

### WSLの設定

著者はoh-my-zshを使い続けているので、WSLのUbuntuにZshとoh-my-zshを入れ、設定ファイルを揃えれば、見た目はMacの環境とほぼ同じものが用意できました。

https://qiita.com/orikaito/items/44d71af30f873f96b851

ついでに、Ubuntuのエディタはviに変更

```sh
sudo update-alternatives --config editor
```

### WSL2が重い...

WSL2からGitやDockerなどを使ってWindows側のファイルを操作すると、非常に遅いことがあります。
理由は、マウントされているファイルの同期に時間がかかるためのようです。

https://www.aska-ltd.jp/jp/blog/197

解決策ですが、上記の記事でも説明されているように、
WSLのLinux環境上にファイルを置いて環境構築しましょう。

WSLの`/home/[user_name]/`以下にソースコードを置くだけでも、劇的に速度が早くなりました。

VScodeを使っている場合は以下の手順に従うと、`code`コマンドで開けます。

https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-vscode

今の所、Windows側からWSL上のファイルを触る分にはストレスが無く、
WSL上への環境構築も簡単です。

素晴らしい！！:+1::+1::+1:

### WSLからdockerコマンドを使えるようにする

WSLからdockerコマンドを打つと、エラーがでる場合があるようです。

> The command 'docker' could not be found in this WSL 2 distro.
> We recommend to activate the WSL integration in Docker Desktop settings.
>
> For details about using Desktop with WSL 2, visit:
> 
> https://docs.docker.com/go/wsl2/

せっかくWSLのlinux環境を使えるようにしたなら、当然WSLから`docker`できた方が良いですね。

対応方法としては、以下のどちらかかと思います。
- Docker Desktopの設定を変える
- WSL2上にdocker環境を作る

どちらでも良いのですが、Docker Desktopの設定を変えるほうが楽そうなので、そちらで対応しました。

Docker Desktopの設定画面で以下の設定に変更後、PCを再起動すると、`docker`が実行できるようになりました。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97730/125f933b-580d-bc21-21d6-bfcbd9fd04a9.png">


# ランチャー

Macユーザーには利用者が多いであろう、Spotlight系アプリ

著者はAlfredを使っているのですが、残念ながらWindows版はありません...

ググった所、最近だとUeliというアプリの情報が多く、使用感が近そうだったので入れてみることにしました。

## Ueli
https://ueli.app/#/

https://lemu.blue/526

必要なものは大体揃っていますので、設定画面から使いたい機能のプラグインを有効化していけば完了です。
物足りなければ、ワークフローで更に作りましょう。

今のところ、著者はUeliの標準機能とワークフローで満足しています。

### ブラウザブックマークを設定できないとき

特殊かもしれませんが、Ueliのブックマーク設定で「Google Chrome」を選択した時に、こんなエラーが出ました。

```
Can't read bookmarks file: Error: ENOENT: no such file or directory, open 'C:\Users\[user_name]\AppData\Local\Google\Chrome\User Data\Default\Bookmarks'
```

Ueliから参照するパスはDefaultに固定されているようですが、
Defaultが無いケースがあるようです。

その場合、`profile＃`にブックマークの実体があります。

https://amksystem.com/tech/google-chrome-bookmarks/

> 「C:\Users\（ユーザー名）\AppData\Local\Google\Chrome\User Data\Default」
> または、「%LOCALAPPDATA%\Google\Chrome\User Data\Default」
> （※表記が異なるだけです）
> 
> 注意
> プロファイルがある場合には、Default を profile＃ のフォルダに置き換えてください。


仕方がないので、シンボリックリンクを作って参照できるようにしました。

Defaultという名前で、実体のディレクトリにリンクすると、
Ueliの設定でChromeを選択できるようになります。

```sh
# WSLから作成する場合
cd "/mnt/c/Users/[user_name]/AppData/Local/Google/Chrome/User Data/"
ln -s "Profile 1" Default
```


# 終わりに
Macを愛する気持ちに変わりはありませんが、Windowsも悪くないですね。
使い始める前はWindows使うの嫌だなぁと感じていましたが、思っていたよりも使いやすくて驚きました。

「WindowsだとsshするのにTera Term必須だよな」とか
「Windowsだとシンボリックリンク作れないでしょ」とか

まさに石器時代の発想をしていましたね笑

まだまだWindowsは知らないことが多いので、アドバイス等いただけるとありがたいです！！