Windows Subsystem for Linux 2(WSL2)のUbuntuの設定方法

#概要
Windows Subsystem for Linux(WSL)のUbuntuでやった設定を備忘録的にまとめていきます。

#前提
Windows 10 バージョン 2004からWSL2が搭載されましたが，KB4566116適用後であれば1903及び1909でも使えるようです。

###環境
Windows 10 バージョン 1903 Build 18362.1049 or later
Windows 10 バージョン 1909 Build 18363.1049 or later
Windows 10 バージョン 2004 Build 19041 or later
###確認方法
1.`Win+R`で「ファイル名を指定して実行」を起動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/e83747b9-90cf-f453-9773-61682d4a86d2.png)
2.`winver`と入力し`Enter`を押します

![winver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/f84e720c-3b24-0496-57e7-0174392e3930.png)

#WSLの有効化

##1. 「Linux 用 Windows サブシステム」のオプションを有効化します
PowerShellを管理者で実行し以下のコマンドを実行

```PowersShell:PowerShell[管理者]
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

##2. 「仮想マシン プラットフォーム」のオプションを有効化します

PowerShellを管理者で実行し以下のコマンドを実行

```PowersShell:PowerShell[管理者]
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

##3. PCを再起動します

##4. Linux カーネル更新プログラム パッケージをダウンロード

[こちら](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)からダウンロードして、インストールしてください。

##5. WSL2をデフォルトに設定
```PowersShell:PowerShell[管理者]
wsl --set-default-version 2
```

##6. Microsoft StoreからUbuntuのインストール
以下から入手、インストールしてください。
https://www.microsoft.com/ja-jp/p/ubuntu/9nblggh4msv6?

##7. Ubuntuを起動する
Windowsキーを押し、アプリ一覧からUbuntuを起動します。
まず、ユーザーネームを設定します。
今回、画像ではuserになっていますが、半角英数の範囲で好きに決めてもらってOKです。
つづいて、パスワードを2回入力します。入力しても表示されませんがちゃんと入力されています。
(以後、何度も使うので忘れないようにしてください)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/34decdb4-90c9-2507-7b8c-eb6c3fb7863f.png)

>参考
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

#VcXsrv Windows X Serverのインストール
Linux上のGUIプログラムを実⾏するために、X-Windowサーバーをインストールします。

##1. インストーラのダウンロード
 [こちら](https://sourceforge.net/projects/vcxsrv/)から、インストーラをダウンロード。

##2. インストーラ起動
ダウンロードしたインストーラを起動、指⽰に従ってインストール。

##3. XLaunchの起動
スタートメニューでXLaunchを検索して起動
次へをクリックしていき、`3枚目の画面`の`Additional parameters for VcXsrv`の欄に`-ac`と書き込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/3a74562c-4d93-1a25-bb2b-9b49e90e0e5a.png)

`save configuration`で設定ファイルを`shell:startup`に保存しておくと、Windows起動時に自動でVcXsrvを起動してくれるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/9cdfa190-8acf-4267-a4ba-5388bb6907b2.png)

#WSLの設定
私はWindows Terminalを使用しています。かなり使いやすいので、使いたい方は[下](#microsoft-storeからwindows-terminalのインストール設定任意)にインストール・設定方法を記載していますので参考にしてください。

##1. Ubuntuを起動

##2. パッケージのインストール
以下のコマンドを順に実行してください。多分数時間は軽くかかると思います。
※3行目は、かなり長いですので注意してください。

```bash:bash
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y language-pack-ja manpages-ja manpages-ja-dev nkf build-essential x11-apps emacs emacs-mozc fcitx-mozc dbus-x11 gtypist typespeed texlive-full evince gnome-terminal sox nodejs libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libsdl2-gfx-dev libopencv-dev freeglut3-dev fonts-freefont-ttf fonts-ubuntu gdb python3-pip libreadline-dev libssl-dev python3-gi-cairo
```

>一応何やってるか説明します
>
>1行目：パッケージ一覧を更新(以後リポジトリの追加・削除時には必ず実行するようにしてください)
>2行目：パッケージを更新
>3行目：基本的なパッケージ・debファイルのインストール

##3.各種設定

ディスプレイの設定として、以下のコマンドを実行します。

```bash:bash
echo "export DISPLAY=\$(cat /etc/resolv.conf | grep nameserver | awk '{print \$2}'):0.0" >> ~/.profile
echo 'export LIBGL_ALWAYS_INDIRECT=1' >> ~/.profile
```

ローケルの設定として以下のコマンドを実行します。

```bash:bash
sudo update-locale LANG=ja_JP.UTF-8
```


続いて、⽇本語⼊⼒の設定として、以下の内容を`~/.profile`に`追記`します。

```bash:~/.profile
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
if xset -r 49; then
fcitx-autostart >/dev/null 2>&1 &
else
echo "Start XLaunch and then Restart Ubuntu"
fi
```

続けてタイムゾーンの設定をしていきます。

```bash:bash
sudo dpkg-reconfigure tzdata
```
を実行して、`Asia`→`Tokyo`を選択します。

##4.テキストエディタの設定
VSCodeをインストールしてRemort - WSLを導入していれば、`code`コマンドでVSCodeが開けますが、sudoで編集できない(やる方法あれば教えてください...)ので、vimやemacsの設定もしておきましょう。

###VSCode
以下から入手、インストールします。
https://code.visualstudio.com/download

続いて、`ctrl+shift+x`または左端の□マークから拡張機能をインストールします。
[Remort - WSL](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl)
[Japanese Language Pack for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja)
は必須です。(※日本語にしたくなければRemort - WSLだけでOKです。)

拡張機能のインストール後、再読み込みして、`ctrl+shift+p`を押してコマンドパレットを表⽰させます。
`Configure Display Language`を⼊⼒&選択し、`ja`に変更すると、日本語化できます。

その他、お好みで拡張機能の導入をしてください。

ほかにも私は
[Vimのキーバインドを導入する拡張機能](https://marketplace.visualstudio.com/items?itemName=vscodevim.vim)と
[カラースキームMonokai Proの拡張機能](https://marketplace.visualstudio.com/items?itemName=monokai.theme-monokai-pro-vscode)
などの拡張機能をインストールしていますが、好みが分かれるので割愛します。

`ctrl+,`あるいは左下の歯車→設定から設定が開けます。
GUIになっているのでわかりやすいと思います。(jsonでも編集可能)

>参考
https://rfs.jp/sb/vsc/vsc-setting.html
https://qiita.com/hi85/items/eaede5ebb509f21f27f5

LaTeXを使う場合は、以前記事にしていますので、
[こちら](https://qiita.com/Engr_Coal33/items/bc1dc187f8b993afc2f9))を参考に設定してみてください。

###Vim
~/.vimrcに設定を記述します。
また、初期では配色がよくないので、私はカラースキームmolokaiを導入しています。

>設定例

>molokaiのダウンロード

>```bash:bash
mkdir ~/.vim
cd ~/.vim
mkdir colors
git clone https://github.com/tomasr/molokai
mv molokai/colors/molokai.vim ~/.vim/colors/
vi ~/.vimrc
```

>~/.vimrcの内容

>```vim:~/.vimrc
set fenc=utf-8 "UTF-8形式で保存する
set title "編集中のファイル名を表示
set showmatch "括弧入力時の対応する括弧を表示
set number "行番号を表示
syntax on "コードの色分けをオンにする
set smartindent "スマートインデントを設定
set tabstop=2 "インデントをスペース2個分に設定
syntax on "コードの色分け
set showcmd "入力中のコマンドを表示する
set virtualedit=onemore "行末の1文字先までカーソルを移動できるようにする
set clipboard=unnamedplus "yankした時クリップボードに入るようにする
set ignorecase "検索文字列が小文字の場合は大文字小文字を区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set incsearch "検索文字列入力時に順次対象文字列にヒットさせる
set wrapscan "検索時に最後まで行ったら最初に戻る
set hlsearch "検索語をハイライト表示
nmap <Esc><Esc> :nohlsearch<CR><Esc> "ESC連打でハイライト解除
colorscheme molokai "カラースキームをmolokaiにする
set t_Co=256　"vimを256色対応させる
```

###emacs
~/.emacs.d/init.elに記述します。
初期ではディレクトリ`~/.emacs.d`はないと思うので

```bash:bash
mkdir ~/.emacs.d
```
で作成しておきます。

>設定例

>```emacs-lisp:~/.emacs.d/init.el
;;日本語入力の設定
(require 'mozc)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
;;初期画面でwelcome画面の表示を消す
(setq initial-scratch-message t)
(setq initial-scrarch-message nil)
;;画面の下のバーで何行何列にいるか表示
(line-number-mode t)
(column-number-mode t)
;;yesとnoをyとnで打てるようにする
(defalias 'yes-or-no-p 'y-or-n-p)
;;行番号表示
(global-linum-mode)
(setq linum-format "%4d ")
;;テキストエンコーディングをUTF-8にする
(set-default-coding-systems 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
```

##5.フォントの設定
WindowsのフォントをWSLでも使えるようにします。
まずsudoで`/etc/fonts/local.conf`を開きます。
viのところはemacsでもいいです(codeは不可)

```bash:bash
sudo vi /etc/fonts/local.conf
```

続いて、以下の内容を貼り付けます。

```xml:/etc/fonts/local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>
```

この後、

```bash:bash
fc-cache -fv
```
を実行するとWindowsのフォントがWSLでも使えるようになります。

#開発ツールのインストール

##1.Python
Ubuntu20.04のデフォルトでは3.8.6と若干古いですし、バージョンの複数管理できたほうが便利です。

###1.pyenvのダウンロード
```bash:bash
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
```

###2.pyenvでのpythonのダウンロード
```bash:bash
pyenv install --list
```
でインストールできる一覧が見れます。

投稿時点での最新版は3.9.0なので、それをインストールしていきます。別バージョンをインストールする場合は適宜読み替えてください。

```bash:bash
pyenv install 3.9.0
pyenv global 3.9.0
```

###3.pipパッケージインストール
```bash:bash
pip3 install pandas numpy scipy xlrd matplotlib japanize-matplotlib Pillow opencv-python folium plotly requests beautifulsoup4 lxml Flask Flask-Bootstrap4 Django PyMySQL
```

##2.Ruby on Rails
###1.rbenvのインストール
```bash:bash
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
~/.rbenv/bin/rbenv init
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
```

###2.ruby-buildのインストール
```bash:bash
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

###3.Rubyのインストール
```bash:bash
rbenv install -list
```
としてやると、

```bash:bash
2.5.8
2.6.6
2.7.2
jruby-9.2.13.0
maglev-1.0.0
mruby-2.1.2
rbx-5.0
truffleruby-20.2.0
truffleruby+graalvm-20.2.0
```
のように出てきます。今回は2.7.2をインストールします。
別バージョンをインストールする場合は適宜読み替えてください。

```bash:bash
rbenv install 2.7.2
rbenv rehash
rbenv global 2.7.2
```

###4.Railsのインストール
```bash:bash
gem install rails
```

###5.SQL/bundler/yarnのインストール
```bash:bash
sudo apt install libsqlite3-dev
gem install sqlite3
gem install bundler
curl -o- -L https://yarnpkg.com/install.sh | bash
```

###6.Railsの実行
```bash:bash
rails new app
cd app
rails server
```
ブラウザで127.0.0.1:3000にアクセスして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/8e434a12-460e-9ad0-d3f3-6f55bcdf73e4.png)
このようなものが出ればOKです。

#エイリアスの設定
エイリアスとはコマンドの別名のことです。
`~/.bashrc`に`追記`する形で記述していきます。

以下、私の設定ですが、下2つ以外は基本的なものばかりなので追加しておいて損はないと思います。

>設定例

>```~/.bashrc
#(略)
#追記してください
alias ..='cd ..'
alias ..2='cd ../..'
alias ..3='cd ../../..'
alias agi='sudo apt install'
alias agr='sudo apt remove'
alias agu='sudo apt update && sudo apt upgrade'
alias agi='sudo apt install'
alias ags='apt search'
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -ri'
alias g='git'
alias ga='git add'
alias gd='git diff'
alias gs='git status'
alias gp='git push'
alias gb='git branch'
alias gst='git status'
alias gco='git checkout'
alias gf='git fetch'
alias gc='git commit'
#この2つは少し過激なので注意...
alias m='mkdir'
alias p='python3
```

>参考
https://qiita.com/reireias/items/d906ab086c3bc4c22147


#シンボリックリンク
シンボリックリンクとは、 Windowsで言うところのショートカットのようなものです。

WSLでWindowsのCドライブは/mnt/cになっていますので、Downloadsフォルダは/mnt/c/User/(Windowsのユーザー名)/Downloadsとなります。

ここにシンボリックリンクを貼ってみましょう。

```bash:bash
ln -s /mnt/c/User/(Windowsのユーザー名)/Downloads
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/4dba5ebc-7238-d70a-d5b5-3061010a4397.png)
このようにシンボリックリンクが貼れています。このようにシンボリックリンクを使うとWSLとホストのWindowsの連携がとりやすくなります。

とりあえず私はこれくらい貼ってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566454/8a29c698-666f-96e0-8c44-4b7b7510b23d.png)


# Microsoft StoreからWindows Terminalのインストール・設定(任意)
以下から入手、インストールしてください。
https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701

インストール出来たら起動して、∨から設定を選ぶか、`Ctrl+,`で設定を開きます。

profiles内のUbuntuのprofileのguidをglobalsのdefaultProfileに指定しましょう。
listの順番を並び替えて自分の好きなようにしてください。
私は`Ubuntu`、`Powershell`、`cmd`の順にしています。

続いて、Ubuntuのprofile内のstartingDirectoryを`//wsl$/Ubuntu/home/(ユーザー名)`に設定します。
ここでのユーザー名は`Ubuntuのユーザー名`です。

参考までに、私の場合は以下のようになっています。

```json:settings.json
{
    "$schema": "https://aka.ms/terminal-profiles-schema",
    "defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}",
    "profiles": {
        "defaults": {
        },
        "list": [
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "startingDirectory": "//wsl$/Ubuntu/home/user",
                "source": "Windows.Terminal.Wsl"
            },
            {
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "コマンド プロンプト",
                "commandline": "cmd.exe",
                "hidden": false
            },
            //(略)
        ]
    },
    //(以下略)
}
```
ターミナルの配色やキーバインディングの設定については割愛します。(好みが分かれそうなため)
>参考
https://docs.microsoft.com/ja-jp/windows/terminal/get-started