Windows Subsystem for Linux (WSL)を使いやすく設定する

# 環境
* Windows10 64ビット

# 今回の目的
普段行っているような操作をWSLでやれるように設定を行う。ここでやれるようになることは

* Microsoft Officeをbashから立ち上げられるようにする
* Adobe Readerをbashから立ち上げられるようにする
* bash操作（というかvim操作）をしやすいようにキーマップを変更する
* プログラミング環境をWSLに構築する

WSLを使うことによってLinuxの恩恵を受けることができるほか、Linuxでは使えなかったMicrosoft Officeなどがbash上から使えるようになるなど、**両方のOSのいいとこどり**をすることができるようになります。

#作業
## WSLを使えるようにする
これはほかの方々が詳しい方法を書いているので、そちらを参考にしてください

[Windows Subsystem for Linuxとは？ そのインストールと使い方](https://www.buildinsider.net/enterprise/wsl/01)

[Windows Subsystem for Linuxをインストールしてみよう！](https://qiita.com/Aruneko/items/c79810b0b015bebf30bb)

## キーマップを変更する

これから設定ファイルを変更するためにbashを使っていくため使いやすいようにキーマップを変更します。変更する内容は以下のものです。

* Caps LockをCtrlに割り当てる
* Escキーと半角/全角キーを入れ替える
* スペースキーの左右にある変換・無変換キーにIMEのOn, Offを割り当てる

一番目と二番目はChange Keyというフリーソフトを使います。[こちらのページ](https://forest.watch.impress.co.jp/library/software/changekey)からダウンロードして解凍します。拡張子が.LZHという少し珍しい(?)拡張子なので解凍できなかったら[Lhaplusという解凍ソフト](https://forest.watch.impress.co.jp/library/software/lhaplus/)もインストールして解凍します。

このソフトを実行するときには右クリックで**「管理者として実行」**をしてください。するとキーボード画面が出てくるので変更したいキーをクリックします。すると新しいキーボード画面が出てくるのでそちらで、最初に選んだキーに割り当てるキーを選択します。

終わったら、登録タブから「現在の設定内容で登録します」をクリックして再起動すれば終了です。

三つ目に関しては詳しい記事がすでにあるのでそちらを参照してください。

[Windowsの半角/全角キーを無変換/変換キーに割り当ててMac風に使う](http://vdeep.net/windows-henkan-macfuu)

これで完了です。

## Pathを追加していく

さて、パソコンに各種ソフトをコマンドで使えるようにPathとエイリアスを設定していきます。行うこと自体はLinuxを普段使っている人からしたら常識的なことですが、パス名がWSL特有なので注意が必要です。Windows上のCドライブは```/mnt/c/```にあります。

Vimなどのテキストエディタで.profileを開き、以下のコードを追加します。

```bash:~/.profile
export PATH=$PATH:/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Office/root/Office16
export PATH=$PATH:/mnt/c/Program\ Files\ \(x86\)/Adobe/Acrobat\ Reader\ DC/Reader
```
一行目でOfficeのパスを、二行目でAdobe Readerのパスを追加しています。このパスは大体どのパソコンでも同じような感じだと思います。




```bash
$source ~/.profile
```
で変更を反映させます。このままでもOfficeなどはコマンドで使えますが、打ち込むのが少々面倒な状態になっています（.exeまで入力しなければならないことが大きい）。コマンドを簡単にするためにエイリアスを設定します。.bashrcを開いて、以下のコードを追加します。

```bash:~/.bashrc
alias ppt='POWERPNT.EXE'
alias el='EXCEL.EXE'
alias word='WINWORD.EXE'
alias adobe='AcroRd32.exe'
```
イコールの左辺は実際に打ち込むコマンドの名前です。こちらは自分で覚えやすいような名前を入力すればOKです。こちらも

```bash
$source ~/.profile
```
で変更を反映させます。これで例えばパワーポイントを

```bash
ppt
```
を起動させることができます。もちろん```ppt```のあとにファイル名を入力することでパワーポイントのファイルを開くこともできます。

# WSL上にプログラミング環境を構築する

WSLはLinuxなのでvim等すでにある程度プログラミング環境は整っており、欲しければ様々言語のコンパイラやインタープリタは簡単に手に入れられます。しかし、開発をしていると欲しくなるのが**統合開発環境(IDE)**。WSLはあくまでコマンドラインでの操作ですので、IDEは難しそう。仕方ないからWindows側にもコンパイラ・インタープリタ入れてそれでIDEを使うか、となってしまいがちです。こうなると　Linux側とWindows側の両方に同じ言語が入っていることになり、ストレージの無駄です。

これを解決する方法があります。**X Window system**を入れてWSLにもGUIを与えてやることです。Windows用のXサーバーとして有名なのが**XLaunch**です。インストールの仕方は[こちらのOSDNマガジンの記事](https://mag.osdn.jp/09/10/14/0753240)が詳しいです。

XLaunchを入れて、これを起動すれば準備は完了です。次にGoogle Chromeを入れましょう。

```bash
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo apt-get update
sudo apt-get install google-chrome-stable
```
これでインストール完了です。```google-chrome```とコマンドを打てばXサーバーからChromeが起動します。

ここまでくれば楽勝です。例としてJavaのIDE、Intellij IDEAを入れてみます。Xサーバーから起動したChromeから
https://www.jetbrains.com/idea/
にアクセスして, tar.gzファイルをインストールします。インストールしたら

```bash
cd ~/Downloads
tar -zxvf ideaIC-2018.2.4.tar.gz    #これはバージョンによって多少違う
cd idea-IC-182.4505.22/bin
./idea.sh
```
これで起動します。

同じようにしてほかの統合開発環境もインストールできると思います。

# おまけ

ここからは自分がほかによく使うソフトウェアでパスを通したものを書いておきます（役に立つかはわかりませんが）。

```bash:~/.profile
export PATH=$PATH:/mnt/c/Program\ Files\ \(x86\)/Mozilla\ Thunderbird
export PATH=$PATH:/mnt/c/w32tex/bin　　　　#LaTeX用
export PATH=$PATH:/mnt/c/w32tex/share/texmf/tex/latex　　　　#LaTeX用
export PATH=$PATH:/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application
```

```bash:~/.bashrc
alias thunderbird='thunderbird.exe'
alias platex='platex.exe --kanji=utf8'　　　　#日本語が文字化けしないように--kanjiを指定
alias dvipdfmx='dvipdfmx.exe'
alias chrome='chrome.exe'
```
これだけだと、LaTeXで.texから.pdfにするのに二手間かかってしまうので、以下の関数を```~/.bashrc```に追加しておきます。

```bash:~/.bashrc
function tex () {
    platex $1.tex
    dvipdfmx $1.dvi
}
```
これで、TeXファイルからPDFファイルに```tex```コマンド一発で行けるようになります。ただ、この簡単な関数だけだとファイル名を補完機能で入力したときにEnter押す前に.texを消さないといけないという手間が残ります。これを解消する方法はまだわかりません。知っている方いたら教えてください。

たったこれだけの変更でしたが、だいぶWSLの操作性（というのか？）は上がったと思います。もっとこうしたら便利になるとかアイデアがあるかたは教えてくれたらうれしいです。