WSLでEbitenGameJam用Go言語開発環境を構築

# 経緯
おおよそ2週間でEbitenを使用したゲーム開発を行うEbitenGameJamに参加することになりました。
https://itch.io/jam/ebiten-game-jam

Ebitenについては @eihigh さんの書いている記事がとても参考になります。
https://qiita.com/eihigh/items/1fd6077327f99245b807

普段仕事で使用しているPCはMacですが、自宅用PCはWindowsです。
会社のPCで行うのもなんかなぁ...と思ったのでWindowsPCで開発を行うことにしました。

まったくgo言語触れたことがなく、当初vscodeを使用した開発を～と思っていましたが、
普段主に使用しているのがVimの為、できる限り近い感じでの開発環境を探していたところ、
WSLというのがあるからそれが良いんじゃないか？とアドバイスを頂きましてそれを試すことにしました。

# 使用しているPC
OS Windows 10 Pro
CPU i5-11400

# WSL準備手順
いくつかのサイトを参考にさせて頂きました。ありがとうございます。
「WindowsでWSL2を使って「完全なLinux」環境を作ろう！」
https://www.kagoya.jp/howto/it-glossary/develop/wsl2_linux/

### Linux用Windowsサブシステムと仮想マシン プラットフォームの有効化
コントロールパネル→プログラム→Windowsの機能の有効化または無効化　から、
「Linux用Windowsサブシステム」と「仮想マシン プラットフォーム」にチェックマークを付ける。
自分のPCの場合、Hyper-Vにもチェックマークを付けないと後述のubuntu起動時に
```
WslRegisterDistribution failed with error: 0x80370102 
```
のようなエラーが発生しました。
また、Biosの設定で Virtualization TechnologyをEnableにする必要もありました。

### WSL2用Linuxカーネルをインストールする
記事に書いてあった通り「https://aka.ms/wsl2kernel 」にアクセスし、
「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」をダウンロード→インストールしました。
ARM64 マシンを使用している場合はそれようのものをダウンロードする必要があるようです。

### WSLのバージョン指定をする
コマンドプロンプトを開き、
```
wsl --set-default-version 2
```
を実行することでWSL2が開くようになるようです（よくわかっていない）

### Ubuntuをインストール
「Microsoft Store」を開き、検索に「ubuntu」と入力する。
出てきたubuntuを選択するとインストールが始まる。
色々なバージョンが表示されていたがubuntuとしか書いてないやつを選択しましたが、
それによりインストールされたのは「Ubuntu 20.04.4 LTS」のようです。

インストールが終わり、開くとubuntuの初期設定が表示されるのでアカウント名とかパスワードとかを入れます。
ここでエラーが出た場合は仮想マシン云々の設定が漏れているのかもしれません。

### Windows Terminalをインストールする
記事に書いてあったのでそのまま行いました
「Microsoft Store」を開き、Windows Terminalを検索、そのままインストール
iTermみたいなのがインストールされ、タブを開く際にubuntuを選ぶことが出来るようです（よくわかってない）

# go開発環境準備
準備にあたってはこちらのサイトを参考にさせて頂きました。
「Ubuntu Linux 20.04 LTSに、Goをインストールする（＋Emacs lsp-mode）」
https://kazuhira-r.hatenablog.com/entry/2020/12/19/010344
内容をよく分かってないので行ったことを記述

### 現在のgolangパッケージを確認
```
apt info golang
```
Dependsの項目がgolangパッケージのバージョンだと思われます。
2022/06現在最新バージョンは1.18のようでしたが、golang-1.13と表示されていました。

### PPAの追加
```
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
```
PPAは「Personal Package Archive」の略でUbuntuの非公式リポジトリだとか何とか...

### goのインストール
```
sudo apt install golang
```
上記ppaの対応後golangパッケージを再確認すると1.18になっていたのでinstall
終わった後に
```
go version
```
でバージョンが表示されればオッケー

### Ebitenの準備
公式のドキュメントがあるのでこちらを参考に行いました
https://ebiten.org/documents/install.html?os=linux
以下を準備しておく必要があるようです
C コンパイラ
```
apt install gcc
```

依存ライブラリ
```
sudo apt install libc6-dev libglu1-mesa-dev libgl1-mesa-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libasound2-dev pkg-config
```


よしこれで環境準備も完璧だと思ってサンプル( https://ebiten.org/tour/hello_world.html )を動かしてみるとエラーが出る
```
Can't open display
```
どうやらWSLにディスプレイがないみたいなことになっている様子

# Can't open displayの解決
正直ここに一番ハマりました。
解決には以下のサイトを参考にさせて頂きました。
「VcXsrv（Xサーバー）をWindowsにインストールしLinuxのGUIをリモート操作する設定方法」
https://rin-ka.net/windows-x-server/

「WSL2＋Ubuntu 20.04でGUIアプリを動かす」
https://astherier.com/blog/2020/08/run-gui-apps-on-wsl2/

「WSL2におけるVcXsrvの設定」
https://qiita.com/ryoi084/items/0dff11134592d0bb895c

### VcXsrvをインストール
プログラムの「実行」と「画面表示」を別の環境で実現できるようにするツールのようです
https://sourceforge.net/projects/vcxsrv/ からVcXsrvをダウンロードしてインストール
設定は全部デフォルト

ubuntuの.bashrcに以下を追加
```
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
```

### VcXsrv windows.serverのファイアーウォールを許可にする
パブリックネットワークが許可になっていないとダメだそうです
自分はここを許可にしていなかったのでインストールしても動かない！！ってなってました


# おわり
ここまで行えばEbitenサンプルも多分動かせるはずです。
エラー出ていた過程で色々これ入れれば動くんかー？と試したのでもしかしたら漏れがあるかもしれません

そして環境構築だけしてまだゲーム開発の何にも着手してない...！！
頑張りたいと思います