Windowsマシンの開発関係セットアップ



最近メインの開発環境を Windows 10 にしたので、入れたソフトウェアのメモ。


# MSYS2

- https://msys2.github.io/

UNIX的なシェル環境。ターミナル(mintty)、シェル(bash)、パッケージマネージャ(pacman)が標準で入れるだけで使えるようになる。シェル操作は MYSY2 上に含まれる ターミナル mintty 上で bash を動かしてその上で screen やら git やら ssh やらいろいろ。

- [MSYS2で快適なターミナル生活](http://qiita.com/Ted-HM/items/4f2feb9fdacb6c72083c)

にまとめれているので、その他いくつかを。

## ホームディレクトリ

標準だと C:\mysy64\home\ユーザ名 だが、自分は %USERPROFILE% (win のユーザディレクトリ)と同一のところをホームディレクトリとして使いたいので、環境変数 HOME を %USERPROFILE% に指定する。(環境変数 HOME は UNIX 環境の ENV での指定ではなく、windows 側の詳細設定での指定)

## 見た目

そのままだと見にくいので ~/.minttyrc で色やフォントを指定する。この .minttyrc 例ではフォントは Ricty Diminished を使ってる。

- https://gist.github.com/hotchpotch/2874fa6e9efba34a47e587d0b72be89b

## パッケージのインストール

pacman で。update-core で最新にした後 mintty を再起動し、最新のパッケージを入れていく。とりあえず最低必要そうなのを適当に。

```
pacman -S vim git wget tmux ruby tar
```

## ssh

普通に ~/.ssh/鍵 を置けば使える、が OpenSSH が環境変数 HOME は見ずに、直接 /home/ユーザ名 を見るため、上記の設定でホームディレクトリを変更した場合は対応が必要。

- http://qiita.com/nana4gonta/items/622571c66bfe7f1c7150

/etc/fstab に設定を書き込んで対応した。

```
C:/Users /home ntfs binary,noacl,auto 1 1
```

### keychain

毎回 ssh (git fetch とかでもね)するとパスワード聞かれて面倒なので ssh-agent 管理の keychain を入れる。

- http://www.funtoo.org/Keychain

これで毎回パスワードを聞かれず (ssh 経由の) git fetch できる。

# cmder

そのままの cmd.exe が使いにくいので、それをラップするため cmder を使う。

- http://cmder.net/

様々な機能を持ってるが、ヒストリー検索と、ターミナルキーバインドが cmd.exe でも使えるだけでも利用価値が高い。

なお msys2 も Cmder 上で使おうと思ったが、tmux や screen が使えない、挙動が怪しいため断念した。


# Vim

gvim は香り屋版、ターミナルでの vim は前述の MYSY2 の pacman で入れた vim を使ってる。MacOS などと dotifile は共有して使ってるため、それらを hardlink / symlink して使う

.vimrc, .gvimrc は ~/_vimrc, ~/_gvimrc へと hardlink を張る。

```
fsutil hardlink create %USERPROFILE%\_vimrc %USERPROFILE%\dotfiles\vim\.vimrc
fsutil hardlink create %USERPROFILE%\_gvimrc %USERPROFILE%\dotfiles\vim\.gvimrc
```

.vim は ~/.vim へ symlink を張る。こちらは管理者権限が必要。
```
mklink /d %USERPROFILE%\.vim %USERPROFILE%\dotfiles\vim\.vim
```

# キーボードカスタマイズ

## Change Key

- http://forest.watch.impress.co.jp/library/software/changekey/

まずは Change Key でレジストリレベルでの単体キーを押したときのキーコードの変更を。Ctrl <-> Caps Lock とか、その他簡単な変更のみなら Change Key (管理者権限で実行する) で対応する。

なお Win は Vista 以降キーボードのカスタマイズがいろいろ大変になった。詳しくは [Vista/Windows 7におけるキーボードカスタマイズ問題](http://d.hatena.ne.jp/LM-7/20090614/1244980470) を。

## keyhac

- http://crftwr.github.io/keyhac/doc/ja/

python でコンフィグを指定できカスタマイズできる、ユーザモード上で動くソフトウェア。AutoHotKey のようにいろんなことができる。三ヶ月ぐらい使ってるけど、そんなに複雑なこともしていないためか、特に不安定になることなく使えてる。

たとえば mintty.exe のみでキーバーインドを変更したい場合 (LWin-c でコピー、LWin-v でペーストなど)、こんな感じに変えられる

```
        mintty_keymap = keymap.defineWindowKeymap( exe_name="mintty.exe", class_name="mintty" )
        # copy
        mintty_keymap["LWin-c"] = ["C-Insert"]
        # paste
        mintty_keymap["LWin-v"] = ["S-Insert"]
        # new window
        mintty_keymap["C-S-t"] = ["A-F2"]
```

### 右ALTキーでATOKのIME切り替えをトグルする

右ALTキーでATOKのIMEのオンオフをトグルしたいだけ、なんだけど以外と大変だったのでメモ。

まず Change Key で右ALTを普段使わない F13のスキャンコード ( 0x0064 ) を割り当て、右ALTをF13に変更する。

- http://r2089.blog36.fc2.com/blog-entry-155.html

続いて F13 が押されたときに Ctrl-Shift-F12 を送出するように keyhac で変更する。124 は keyhac の内部ログをオンにすると押された値がわかるのでそこから。

```
    keymap_global = keymap.defineWindowKeymap()
    # 124 = F13, C-S-F12 = IME on/off
    keymap_global[ "124" ] = "C-Shift-F12"
```

あとは ATOK の設定で IME on/off を C-S-F12 にすればおｋ。

# Windows 上での開発雑感

移行してだいたい3ヶ月ぐらいたつけど、Mac と比べそれほど不便なく開発できてる。

Win 環境を使い始めたのは、組み込み開発のハードウェアベンダーが提供してるツール群が Windows のみ、というものが割とあって、それをすんなり使いたかったのが一つ。もう一つは最近 Win 周りの開発者を取り巻く環境が面白そうだなー、と思ったのが一つ。

結局のところ Linux 的な Web 開発は、 仮想環境上の Ubuntu で行ってるんだけど、裏を返せば Windows Subsystem for Linux の出来がよくなれば、それも必要なくなるなー、という感じがしてる。