Linux と Windows の R の日本語関連で疲れたから WSL を試してみた

R の場合は Linux 版と Win 版でデフォルトエンコーディングが異なるようで、日本語を含むデータベースや CSV 、 EXCEL の読み書きを行っている場合だと、 Linux で動いていた R のソースがそのまま Win で動かない（結果が異なる）ことがちょくちょく。

そうゆうことを意識せずにというか Win も UTF8だろうと勝手に思い込んで作っていた私が悪いんですが、じゃあせっかくだからどっちの環境でも動くように書いてやろうじゃないか、なーんてこと考えだすと、それが目的となってしまって、いつしか目的を失ってしまうはめに。

ふと、あれれ？私、一体なにをやってるんだ？ってな事から解放されるために Win に WSL(Windows Subsystem for Linux) の環境作って R インストールして試してみた話です。

## WSL の有効化と Ubuntu のインストール
まず WSL を有効化するため PowerShell を管理者として起動して、以下のコマンドを実行します。実行すると再起動が必要となるので、再起動します。

```powershell:WSLの有効化
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```

再起動できたら Ubuntu をインストールします。 Windows ストアからインストールすることもできますが、 https://docs.microsoft.com/en-us/windows/wsl/install-manual#downloading-distros に Windows ストアを使わずにインストールする方法が書かれていましたので今回はそっちを試してみます。

PowerShell を起動し `curl.exe` を使って 16.04 をダウンロードしてインストールします。

```powershell:Ubuntuのダウンロードとインストール
#ホームディレクトリに移動（念のため）
cd $HOME

#ダウンロード（curlを使用）
curl.exe -L -o ubuntu-1604.appx https://aka.ms/wsl-ubuntu-1604

#インストール
Add-AppxPackage ubuntu-1604.appx
```

## Ubuntu の起動
スタートメニューから Ubuntu 16.04LTS を選択するか、 PowerShell から以下のコマンドで起動します。

```powershell:Ubuntuの実行
#実行
ubuntu1604.exe
```

## ベルの音を消す
タブ押して文字補完したりするだけでベルの音が鳴ってうるさいので無効にします。以下のように入力して、一旦 Ubuntu を終了させてから再度、起動すると音がならなくなります。

```console:
echo "set bell-style none" >> ~/.inputrc
echo "set visualbell" >> ~/.vimrc
```

## カラーを無効に
フォントの関係なのか、 Win の黒地に赤とか青とかが私には見えにくいのでカラー表示を無効にしてしまいます。以下は vi のシンタックス表示を無効にして、 .bashrc 中の 〜 --color=auto の alias を無効にすることでモノクロにしています。

```console:カラーを無効にする
echo ":syntax off" >> ~/.vimrc
sed -ri 's/(alias.+--color=auto)/#\1/g;/#force_color/ aunset color_prompt' .bashrc
```

## R のインストール
標準ではR が 3.2 とバージョンが古いので最新版をインストールします。手順としては、リポジトリを追加して、公開鍵をインストールして、更新、インストールてな感じになります。

```console:最新のRをインストール
#リポジトリを追加
echo deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran35/ | sudo tee /etc/apt/sources.list.d/r-base.list

#〃（日本のミラーサイトを使う場合）
echo deb https://cran.ism.ac.jp/bin/linux/ubuntu $(lsb_release -cs)-cran35/ | sudo tee /etc/apt/sources.list.d/r-base.list

#公開鍵のインストール
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 51716619E084DAB9

#データーベースの更新
sudo apt update

#Rのインストール
sudo apt install r-base
```

インストールできたら R を起動してみます。

```console:Rの実行（実行結果）
$ R
R version 3.6.1 (2019-07-05) -- "Action of the Toes"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
```

## 試してみる
当たり前といえば当たり前なのもしれませんが、過去に Linux の R で書いたソースがそのまま動きました。結果も期待どおりです。


## グラフを表示
色々を試していくとエラーにはならないようですがグラフが表示できないようです。グラフを表示させるには X Server が必要となるようです。 X Server は無償のもの有償のものもあるんですが、とりあえず MobaXterm(https://mobaxterm.mobatek.net/) のホームエディションなら無償で使えて、インストール不要のポータル版もあるみたいなので、試してみました。

（2020/6/27追記） [VcXsrv](https://sourceforge.net/projects/vcxsrv/) にもポータル版（ https://sourceforge.net/projects/portable-x-server/ ）があるようで、そちらを使えば VcXsrv でもインストールしなくても使えそうです。




X Server が起動できたら、以下のように DISPLAY を指定してから R を起動します。簡単なテストプログラムを実行して表示されれば成功かなと思います。

```console:DISPLAYを指定してRを起動
export DISPLAY=:0.0
R
```

```R:グラフが表示されるかのテスト（R上で実行）
curve(dnorm, -3, 3, main="テスト")
```

日本語の部分が表示されないようです。とりあえず以下のようにして日本語フォントをインストールして再度実行したところ表示されました。

```console:日本語フォントのインストール
sudo apt install fonts-ipafont-gothic
```

私が普段使うのは ggplot2 なので、そっちでも念のため試してみましたが無事表示されました。

```R:グラフが表示されるかのテスト（ggplot2）（R上で実行）
library(ggplot2)
x <- seq(-3, 3, by=0.01)
(ggplot()
	+ labs(title="テスト")
	+ geom_line(aes(x=x, y=dnorm(x)))
)
```

## Ubuntu を初期化したい
以下のコマンドで初期化できそうです。初期化が簡単にできると分かると色々と試せるから良いかも。

```powershell:初期化
wslconfig /u Ubuntu-16.04
```

## とりあえず使えそう
ちょっともっさり感はあるのと、なんとなく心配なところはあるものの、とりあえず当初抱えていた Win と Linux でエンコーディングの違いがうんぬんという悩みはなくなったので、しばらく使ってみようと思っています。