Linux
VisualBasic
.NETCore
WSL

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

はじめに

これは、Visual Basic Advent Calendar 2017の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版)

バージョン確認

~$ 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
* Linux で VB.NET を書いて動かそう!

1.dotnetプロダクトフィードを追加する

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

信頼できるMicrosoft署名キーを登録します。

次のコマンドを実行します。

:~$ 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で確認してください。今回は「Ubuntu 16.04 / Linux Mint 18」で登録しています。
次のコマンドを実行します。

~$ 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をインストールします。
次のコマンドを実行します。

~$ 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 コマンド

~$ 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.

中身を確認する

~$ 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

アプリを実行する

次のコマンドを実行します。

~/myAppVB$ dotnet run
Hello World!

アプリを編集する

vi が標準で入っているので、メッセージを変更します。
viエディタの使い方

~/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を使えば、ブラウザ上で編集とターミナルで動作させることができますので、次回はこれを記事にしてみたいと思います。