#2 Windows(WSL)版開発環境構築【後輩たちのためのEV3rt講座(改)】

# 前回のおさらい
[前回の記事](hoge)
前回はWindowsでの開発環境構築編として、Cygwinというソフトを用いる方法で環境を構築しました。
しかしながら、前回紹介した方法はレガシーなもの(古い方法)で、最近はより簡単な新しい構築方法あります。
それがWindows10からの機能である**WSL(Windows Subsystem for Linux)**を用いた方法です。
これは非常に簡単にWindows上にLinuxの環境を構築できる機能です。
EV3rtが主に使用されているETロボコンの現場ではこの方法が取られているようです。
今回はこの方法で実際に環境を構築していきましょう!!
(例のように既に終わっている箇所があれば適宜読み飛ばしてください。)

# 環境構築スタート

## Step1 Windows Terminalのインストール

今回はWindows10標準搭載の**Powershell**を用います。
が、実はPowershellも使える**Windows Terminal**というアプリがMicrosoft Storeからダウンロードできます。
こちらを用いた方がPowershellも、この後Linuxも同時に扱えるので、インストールしておきましょう。
(必須ではありませんがインストールされている体で進めます。)

https://www.microsoft.com/store/productId/9N0DX20HK701

こちらのリンクからWindows Terminalをダウンロード・インストールしてください。
インストールが完了して起動すると、Windows TerminalとしてPowershellが使えるようになります。

![スクリーンショット 2021-12-06 045436.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/8a1b335a-e4d0-aa00-377c-088213d3cddb.png)

## Step2 WSLのインストール

いよいよLinuxのインストールですが、その前に**Windowsの機能の有効化**を行う必要があります。

Windows TerminalからPowershellを起動しましょう。
ここで起動するときに**「管理者権限」**で実行するようにしてください。
管理者権限なしだとLinuxのインストールが出来ません。
方法は、Windows Terminalのアイコンの上で右クリックをし、「その他」->「管理者として実行」を選択してください。

![スクリーンショット 2021-12-06 052444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/3cbfc1b7-f518-5f1d-96bc-d45448f11aa6.png)

起動出来たら以下のコマンドを入力します。

```powershell:Powershell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```

これでWSLが有効化され、インストールすることが出来るようになりました。

続いて、実際にLinuxをインストールします。
このとき注意するのがWSLにはバージョンが1と2があることです。
EV3rt用には1を使うようにします。2の方ではどうやら不具合があり正しく動作しないようです。
そのためにPowershellを用いて以下のコマンドを入力します。

```powershell:Powershell
wsl --set-default-version 1
```

これでバージョンが1に設定されました。

続いて、以下のコマンドでLinuxをインストールします。

```powershell:Powershell
 wsl --install -d Ubuntu
```

このコマンドによりLinuxがインストールされます。
今回、ディストリビューションはUbuntuがインストールされます。

インストールが終わるとUbuntuのウィンドウが自動的に開きます。

![スクリーンショット 2021-12-06 050842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/1dfa165b-ca32-ddde-9325-4845792dcf0b.png)

ここでユーザー名とパスワードを設定します。
それぞれ自分の好きな名前とパスワードを入力して設定してください。

完了すると、以下のように緑色の文字で名前が表示され、コマンドが打てる状態になります。

![スクリーンショット 2021-12-06 051031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/69b6aeeb-ec87-ee96-e886-d40fd7116436.png)

## Step3 必要なパッケージのインストール

まずはWindows Terminalを起動します。
起動するとデフォルトではPowershellが使えるようになりますが、今回はタブ上の`⌵`を押して`Ubuntu`を選択してください。

![スクリーンショット 2021-12-07 094352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/cda9d52e-c4c2-40c1-8f97-64e2da80e307.png)

![スクリーンショット 2021-12-07 094420.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/02ab4104-baad-c747-9f38-cea04973bfa7.png)

ここで、EV3rtの環境に必要なパッケージをインストールしていきます。
以下のコマンドを一行ずつ入力していってください。

```terminal:Ubuntu
$ sudo apt update
$ sudo apt install build-essential
$ sudo apt install make
$ sudo apt install diffutils
$ sudo apt install ruby
$ sudo gem install shell
```

一番上のコマンドが`apt`というパッケージ管理システムのアップデート。
2~5行目はパッケージのインストールコマンドです。
それぞれ上から順番に`gcc`、`make`、`diff`、`ruby`を使えるようにするものです。
最後の6行目は、`shell`というrubyのスクリプトで用いるライブラリです。

ここで、各行の先頭に`sudo`というコマンドがありますが、こちらは管理者権限で実行するというものです。
この際、パスワードの入力が求められますので、Ubuntuの設定で入力したパスワードを入れてください。

これらのパッケージを正しくインストール出来ているかは、以下のコマンドで確認することが出来ます。

```terminal:Ubuntu
$ gcc -v
$ make -v
$ diff -v
$ ruby -v
$ gem list
```

それぞれ、以下のように出力されます。

![スクリーンショット 2021-12-07 095233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/4d4e4b81-3469-c595-1a5a-c3e1cdb0554e.png)

![スクリーンショット 2021-12-07 095328.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/e7c85037-e0a0-27fb-5751-54e7c50d5668.png)

![スクリーンショット 2021-12-07 095432.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/245c7d33-c749-4d07-e92a-1f52d787f001.png)

青線部分が入力したコマンド、赤線部分が確認する出力です。

## Step4 EV3rt用のシェルスクリプト実行

ここからはTOPPERSが用意しているシェルスクリプトを用います。
先ほどまでと同様に**管理者権限**でWindows Terminalを起動、Ubuntuを選択します。

Ubuntuが起動したら、以下のコマンドを一行ずつ実行してください。

```terminal:Ubuntu
$ wget http://ev3rt-git.github.io/public/ev3rt-prepare-ubuntu.sh
$ sudo bash ev3rt-prepare-ubuntu.sh
```

1つ目のコマンドではgithub上にあるev3rt-git.github.ioというリポジトリから、インストールに用いるシェルスクリプトをダウンロードしています。
2つ目のコマンドはそのシェルスクリプトを実行しています。

2つ目のコマンドを入力すると、次のような表示がなされます。

```terminal:Ubuntu
Prepare necessary environment for EV3RT on Ubuntu Linux.

This script will:
1. Remove binutils-arm-none-eabi and gcc-arm-none-eabi packages if installed.
2. Install u-boot-tools and lib32stdc++6 packages when not installed.
3. Install GNU Arm Embedded Toolchain (version: 6-2017-q1-update) under /opt.

Please select:
1) Start to install
2) Exit
#?
```

ここで`1`を入力してください。
これでEV3rtに必要なものが自動的にインストールされます。

### 補足説明

今回用いたシェルスクリプトについて、その中身をほんの少しだけご紹介します。
このシェルスクリプトはEV3rtのGithub上のリポジトリより見ることが出来ます。
https://github.com/ev3rt-git/ev3rt-git.github.io/blob/master/public/ev3rt-prepare-ubuntu.sh

このシェルスクリプトではARM社のマイコン用のGCCコンパイラ、そしてブートローダーであるU-bootのmkimageがインストールされます。
以下、カッコ内の行数はシェルスクリプト上の行数を表しています。

ARM社用GCCコンパイラは多くのバージョンがありますが、自動的に動作確認済みバージョンをインストールしてくれます。(58~61行目)
又、コンピュータ内にそれ以外のバージョンがあった場合は削除してくれます。(52行目)
そして、EV3を起動するとき、一番最初に動くソフトウェアであるブートローダーのU-bootの設定も同時にしてくれます。(55行目)

## Step5 EV3rtのファイルをダウンロード

ここからは前回のCygwin版とほぼ同じ作業になりますが、もう一度記します。

TOPPERS/EV3rtのページから、EV3rtのファイルをダウンロードしましょう。
[EV3rt ダウンロードページ](https://dev.toppers.jp/trac_user/ev3pf/wiki/Download)
このページの一番上にある2021年6月25日リリースの**1.1版**のファイルをダウンロードしましょう。
(`ev3rt-1.1-release.zip`というzipファイル)

ダウンロードが出来たらzipファイルを解凍してください。

![スクリーンショット 2021-12-06 030811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/ee5c002c-bb6f-b7d0-647c-7321012d7db5.png)

zipファイルを開いて、「すべて展開」を押すと解凍できます。

解凍すると`ev3rt-1.1-release`というフォルダが生成されます。
このフォルダ内に入り、その中の同じフォルダ名である`ev3rt-1.1-release`をコピーします。
その後、Cドライブ直下にペーストして移動してください。

#### Cドライブへのアクセス方法
![スクリーンショット 2021-12-06 031126.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/5dffad4c-c0b0-2127-3b94-332f3c8acd0f.png)
上の画像のように、赤線で囲った枠の部分に`C:\`と入力してEnterキーを押してください。
これでCドライブ直下に移動することが出来ます。

Cドライブ直下に移動出来たら先ほどコピーしたフォルダを貼り付けてください。

![スクリーンショット 2021-12-06 031919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/36a3658d-e59f-743b-cd22-c29be213f875.png)

ここからはWindows TerminalからUbuntuを使います。
起動したら以下のコマンドでCドライブ直下にある`ev3rt-1.1-release`に移動します。

```terminal:Ubuntu
$ cd /mnt/c/ev3rt-1.1-release
```

ここで注意なのが、cドライブの指定方法がCygwin版と異なります。
構造としてはUbuntuにCドライブが**マウント**されているという状態なので、`/mnt/c`のようにしてCドライブを指定します。

続いてそのフォルダ内の`hrp3.tar.xz`を解凍します。

```terminal:Ubuntu
$ tar xvf hrp3.tar.xz
```

解凍されたファイルが一覧で表示され、コマンドが打てるようになったら完了です。

以上にて、環境構築完了です!!

# 動作確認

それでは最後に、プログラムをコンパイルできるか確認してみましょう。

今まで通り、Windows TerminalからUbuntuを起動します。
次に、EV3rtのワークスペースフォルダに移動します。

```terminal:Ubuntu
$ cd /mnt/c/ev3rt-1.1-release/hrp3/sdk/workspace
```

ここにプログラムファイルを作成します。
今回はすでに用意されているサンプルプログラムをコンパイルしてみます。

以下のコマンドでコンパイルを行います。

```terminal:Ubuntu
$ make app=helloev3
```

今回は`helloev3`というプログラムをビルドしました。
このサンプルプログラムはev3rtのチュートリアル的なプログラムになっています。
このコマンドを打ち込むことで`workspace`内に`app`というファイルが生成されていれば成功です。

これで動作確認も完了です!!

# 最後に

ここまで2回に渡り環境構築方法について説明してきました。
いよいよ次回からEV3本体を用いて、プログラムを実行していきたいと思います。

なお、不定期更新なので気長にお待ちください笑

前回 : [#1 Windows(Cygwin)版開発環境構築](https://qiita.com/koushiro/items/6edd0a41803d06de7541)
次回 : #3 未定