Windows Subsystem for Linuxでの .NET Core を使用したVisual Basic のHello World アプリケーションの構築

# はじめに
これは、[Visual Basic Advent Calendar 2017](https://qiita.com/advent-calendar/2017/vb)の4日目の記事となります。

Windows 10  Fall Creators Updateにて、Linux向けのバイナリプログラムをそのまま実行できるようになるWSL（Windows Subsystem for Linux）機能が正式に提供されるようになりました。

.NET Coreは、LinuxやMacOS上で動かせるのが大きな特徴です。.NET Core 1ではVisual Basicがサポートされず、多くのVisual Basic開発者は落胆しましたが、.NET Core 2では一転して、Visual Basicがサポートされるようになりました。

そこで、Macは持ち合わせていないのでWSL上で「Hello World」を表示するまでをやってみます。

# WSLのインストール
自分はUbuntuに馴染みがあるので、Windowsアプリのストアから「Ubuntu」をインストールしました。WSLを動かすには、Windows側の「Windowsの機能の有効化または無効化」画面で「Windows Subsystem for Linux」を有効化させる必要があります。
インストールについては、次のサイトを参考にしてください。
[Windows10にUbuntuをインストールする方法(Fall Creators Update版)](https://ygkb.jp/7291)

## バージョン確認
```bash
~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial
```

# .NET Core 2のインストール
次のサイトを参考にインストールしていきます。
* [Get started with .NET in 10 minutes](https://www.microsoft.com/net/learn/get-started/linuxubuntu)
*  [Linux で VB.NET を書いて動かそう！](http://vbegg.webcrow.jp/Linux/VBNETOnLinux/VBNETOnLinux.html)

## 1.dotnetプロダクトフィードを追加する
.NETのインストールを開始するには、Microsoft署名キーを登録し、Microsoft Productフィードを追加する必要があります。これはマシンごとに1回だけ行う必要があります。

### 信頼できるMicrosoft署名キーを登録します。
次のコマンドを実行します。

```bash
:~$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   983  100   983    0     0    268      0  0:00:03  0:00:03 --:--:--   269
~$ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
[sudo] password for :
```

### Microsoft Productフィードを登録する
Ubuntuのバージョンによって違うので、[Get started with .NET in 10 minutes](https://www.microsoft.com/net/learn/get-started/linuxubuntu)で確認してください。今回は「Ubuntu 16.04 / Linux Mint 18」で登録しています。
次のコマンドを実行します。

```bash
~$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
```

## 2.NET SDKをインストールする

.NET SDKをインストールします。
次のコマンドを実行します。

```bash
~$ sudo apt-get update
~$ sudo apt-get install dotnet-sdk-2.0.2
[sudo] password for :
```

# アプリを作成する
テンプレート「Hello World!」が用意されています。
デフォルトはC#で作成されるので、オプションに「-lang vb」を付けてVisual Basic で作成させます。
[dotnet new コマンド](https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new?tabs=netcore2x)


```bash
~$ dotnet new console -lang vb -o myAppVB

The template "Console Application" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on myAppVB/myAppVB.vbproj...
  Restoring packages for /home/yaju/myAppVB/myAppVB.vbproj...
  Generating MSBuild file /home/yaju/myAppVB/obj/myAppVB.vbproj.nuget.g.props.
  Generating MSBuild file /home/yaju/myAppVB/obj/myAppVB.vbproj.nuget.g.targets.
  Restore completed in 1.07 sec for /home/yaju/myAppVB/myAppVB.vbproj.

Restore succeeded.
```

## 中身を確認する

```vbnet
~$ ls
myApp  myAppVB
~$ dir
myApp  myAppVB
~$ cd myAppVB
~/myAppVB$ dir
myAppVB.vbproj  obj  Program.vb

~/myAppVB$ more Program.vb
Imports System

Module Program
    Sub Main(args As String())
        Console.WriteLine("Hello World!")
    End Sub
End Module
```

# アプリを実行する
次のコマンドを実行します。

```bash
~/myAppVB$ dotnet run
Hello World!
```

# アプリを編集する
vi が標準で入っているので、メッセージを変更します。
[ｖｉエディタの使い方](https://net-newbie.com/linux/commands/vi.html)

```vbnet
~/myAppVB$ vi Program.vb

~/myAppVB$ more Program.vb
Imports System

Module Program
    Sub Main(args As String())
        Console.WriteLine("Hello World! VB.NET on .NET Core!")
    End Sub
End Module

~/myAppVB$ dotnet run
Hello World! VB.NET on .NET Core!
```

# 最後に
開発自体はWindowsのVisual Studioで行って、動作確認はWSL上でも確認するのがいいのかな。
最近は、Jupyter nootbookを使えば、ブラウザ上で編集とターミナルで動作させることができますので、次回はこれを記事にしてみたいと思います。