開発PCをMacからWindowsに変えてやったことと知りたかったこと

## はじめに
最近MicrosoftがWindowsを開発しやすい環境にガンガン変えていってくれてますが、そんなタイミングで訳あって開発PCにWindowsを使うことになったのでそのときにやったことや知りたかったことなどのメモです。
さすがに最初は慣れませんでしたが、最近のMicrosoftのおかげもあって今後はより開発しやすい環境になりそうです。

## なにはともあれWSL
Windowsのcmd.exeやpowershellの操作体系はUNIXとは大きく違うのでMacから移ってきてこれに慣れていくのはちょっと厳しい。
というわけでWSLを入れていきたいと思います。

### インストール方法
1. タスクバー左の検索ボックスから「機能の有効化または無効化」を検索して開く
2. Windows Subsytem for Linuxにチェックを入れてOK
3. Microsoft Storeアプリから「Ubuntu」を検索して入手
4. スタートからUbuntuを起動してユーザー名とパスワードを設定

こちらの参考記事はより詳細に書かれています。
[Windows Subsystem for Linuxをインストールしてみよう！ - Qiita](https://qiita.com/Aruneko/items/c79810b0b015bebf30bb)

※制限などでStoreから入手できない場合
[Linux (WSL) ディストリビューション用 Windows サブシステムを手動でダウンロードします。 \| Microsoft Docs](https://docs.microsoft.com/ja-jp/windows/wsl/install-manual)
1. 上記ページからUbuntuのディストリビューションをダウンロード
2. ダウンロードしたファイルの拡張子を.Appxから.zipにして解凍
3. 中にある.exeを起動

### Windows/WSLでの開発で意識したいこと
#### 今動かしてるものがWindowsかWSL上かを意識する
Windowsの環境変数PATHで通っているコマンドはWSLでも打つことができます。
Windowsの環境変数は、タスクバー左の検索ボックスから「環境変数」などと検索して「システム環境変数の編集」を開くことで確認することができます。
Windowsではユーザーの環境変数と、管理者のシステム環境変数が分かれています。

これらの環境変数PATHで通っているコマンドはWSLでもそのまま打つことができます。
Ubuntuを起動して`echo $PATH` などとして上の環境変数PATHと同じものが入っているかで確認できます。

ただ、Windows上で通っているパスはコマンドというより.exeファイルを叩けるようになってる感じなので、例えば`docker.exe`とWindowsでもWSLでも叩けるようになっています。
これを`docker`として叩きたい場合は、.bashrcなどに次のようにaliasを書けばいいです。

```sh:.bashrc
alias docker='docker.exe'
alias docker-compose='docker-compose.exe'
```

これによりWSL上から使い慣れた形式でWindowsのアプリをコマンド起動することができますが、**あくまでアプリが起動しているのはWindows上であり、WSL上で動いているわけではない**ということを注意する必要があります。
例えば、DockerforWindowsを入れてWin上でパスを通し、`docker` コマンドでWSLからDockerを動かせるようになったとして、認証系などDockerと連動させる必要のあるものはWSLではなく、Dockerが動いているのと同じWindows上で動作させる必要があるなどです。

**今動かしているものがWindows上なのか、WSL上なのかは意識しておいた方がよい**です。

#### WindowsとWSLでは改行コードが違う
改行コードはWindowsではCRLF、WSLではLFです。
これがよく問題になるのはgitでの作業です。
[気をつけて！Git for Windowsにおける改行コード - Qiita](https://qiita.com/uggds/items/00a1974ec4f115616580)

とりあえず`git config --global core.autocrlf input`にしておけば問題は回避できると思いますが、Git for Windowsの初期設定が`true`なため知らないうちにハマることがあります。

なるべく作業はWSLで統一した方がまぎれが少ないと感じているのですが、たまにWindowsからファイルを操作してそのファイルをgitのインデックスから破棄したいときに次のようなエラーが出ることがあります。
`error: unable to unlink old 'ファイル名' No such file or directory`

これはターミナルを立ち上げ直すことで解決します。

## キーバインド、ショートカットの調整
### AutoHotKeyでMacのかな/英数を実現
Macから移ってきて何気に辛いのがこれです。
Windowsではキーボード左上の半角/全角キーで切り替えますが、現在がひらがなモードか半角英数モードかで挙動が変わってしまう上に押しづらい位置にあるので辛いです。
AutoHotKeyというアプリをインストールして、スクリプトを適用するとMacのかな/英数を実現することができます。

1. https://www.autohotkey.com/ でAutoHotKeyをインストール
2. 下記Githubなどを参考にスクリプトを記述

[GitHub - karakaram/alt-ime-ahk](https://github.com/karakaram/alt-ime-ahk)（左右Altキーの空打ちでIMEをON/OFF）
[GitHub - Rozsa777/AutoHotkeySettings](https://github.com/Rozsa777/AutoHotkeySettings)（HHKBの左右の♢空打ちでIMEをON/OFF）

3. ahk拡張子にして適当な場所で保存する。これをダブルクリックするとAutoHotKeyにスクリプトが反映される
4. 保存したファイルのショートカットを作成し、スタートアップフォルダに移すとPC立ち上げ時に起動する（スタートアップフォルダについては一応後述）

### KeySwapでKeyの位置を変更
Ctrlなどキーの配置を変更したかったりする場合に使用します。
同じ用途でChgKeyというアプリもあるが、個人的にKeySwapの方が使いやすかった。

参考記事
[【Windows10】KeySwapでキーマッピングを変更してみた - うれしいブログ](https://kiyoshi.hatenablog.com/entry/2017/07/22/120317)

### Chromeのショートカットの調整
Chromeのショートカット変更の拡張機能が若干探しづらかったので紹介。
[Shortkeys (Custom Keyboard Shortcuts) - Chrome ウェブストア](https://chrome.google.com/webstore/detail/shortkeys-custom-keyboard/logpjaacgmcbpdkdchjiaagddngobkck)

自分の設定は下記

|ショートカット|アクション|
|:--|:--|
|ctrl+alt+left|Previous tab|
|ctrl+alt+right|Next tab|
|ctrl+up|Scroll to top|
|ctrl+down|Scroll to bottom|

## Macでのあれはどうやる？
### PC起動時のログイン項目
起動させたいアプリを右クリックしてショートカットを作成。
エクスプローラーのファイルパスに「スタートアップ」と入れてEnterしてスタートアップフォルダを開く。
ショートカットをスタートアップフォルダに入れておく。

### スクリーンショット
Fn + Alt + PSc の後、ペイントを起動して貼り付け。
ただ面倒なので、後述のGreenshotなど使った方がよいです。

## その他入れたアプリなど

|用途|アプリ名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|備考|
|:--|:--|:--|
|クリップボード履歴管理|[Clibor](https://chigusa-web.com/clibor/)|コピペを多用するので必須。MacでのClipy代用です。|
|ターミナル|[Cmnder](https://cmder.net/)|cmd.exe、powershell、WSLなどをタブで使い分けられます。主に日本語対応に少し不満点があるのでWindows Terminalには期待。他候補はHyper、FluentTerminal。|
|DBクライアント|[A5:SQL Mk-2](https://a5m2.mmatsubara.com/)|SequelProが使えないので。他候補はheidiSQL、DBeaver|
|Windowsのパッケージマネージャー|[chocolatey](https://chocolatey.org/)|Windows版のhomebrewみたいなものかと思います。WSLで完結できたら不要ですが、たまにWindowsにも入れたいときがあるので。|
|スクリーンショット|[Greenshot](https://getgreenshot.org/)|デフォルトのスクリーンショットは手間なので。|
|gif作成|[ScreenToGif](https://www.screentogif.com/)|プルリク作成時に挙動を貼りたいなどに便利。|

その他参考
[全てのWindowsユーザを幸せにするツールたち - Qiita](https://qiita.com/shuheilocale@github/items/a1800805c237fa07f2cd)

## まとめ
早くWSL2とWindowsTerminalとVSCodeRemoteDevelopmentが正式に使えるようになってほしい。