Delphi 用に Hyper-V で Ubuntu 環境を作る

# Delphi for Linux
Delphi 10.2 Tokyo の Enterprise エディションで、Linux 用の 64bit コンパイラが提供されました。
このコンパイラで Linux 用の実行ファイルが作れるようになりました（CUI のみ）。

この記事では、Hyper-V 環境に Ubuntu を導入して、Delphi からアプリケーションを実行してみます。

## Delphi for Linux 対応ディストリビューション

[対応しているディストリビューション](http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E6%96%B0%E6%A9%9F%E8%83%BD#.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E6.B8.88.E3.81.BF_Linux_.E3.83.87.E3.82.A3.E3.82.B9.E3.83.88.E3.83.AA.E3.83.93.E3.83.A5.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3)は以下の通り。

* Ubuntu Server (Ubuntu 16.04 LTS)
* RedHat Enterprise Linux (version 7)

上のうち初心者（僕）でもインストールできそうな Ubuntu をインストールしてみます。

## Hyper-V

Windows 10 Professional 以上だと仮想環境を構築できる [Hyper-V](https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/about/) が使えます。

Windows 10 Home などの場合は VMWare や VirtualBox といった仮想化環境を使うと良いでしょう。

## 環境の構築

### Hyper-V の構築

は、ググればいくらでも出てくるので詳しくは書きません。
簡単に言うと

* 「プログラムと機能」を使って「Hyper-V」の機能をインストールします
* 仮想ネットワーク環境を構築します
* Hyper-V マネージャで仮想マシンを作ります

と、なります。

…簡単にといいましたが、実は１つ詰まったところがあります。
仮想マシンのが世代を選ぶところです。
ここを第二世代すると上手くいきませんでした。
Ubuntu は第二世代でも大丈夫とあったのですが、どうしても上手くいかず第一世代にすると簡単にインストールできました。（第二世代にインストールする方法を教えて頂きました！コメント欄参照）

![a.png](https://qiita-image-store.s3.amazonaws.com/0/12977/3f5e120a-8336-28c2-9419-56f971fc22fd.png)

また他のパラメータで迷ったところは下記の２つですが

* メモリ 2048 [MB]
* HDD 32 [GB]

で問題ありませんでした。

### Ubuntu のインストール

Hyper-V の仮想マシンの構築時に ISO イメージを指定しておけば自動的にインストールが始まります。
Ubuntu にも当然いくつかエディションがあるのですが、

[Ubuntu Desktop](https://www.ubuntu.com/download/desktop)

でオッケーです。
これを使うとインストール後、自動的に Samba が入って Windows ネットワークに接続できるので、非常に簡単に PAServer を導入できます。

![b.png](https://qiita-image-store.s3.amazonaws.com/0/12977/d6f00eee-1bd4-421c-1731-15e998f66f20.png)

### PAServer のインストール

上記の Windows ネットワークから PAServer を持ってきます。
デフォルトでは

```bat
C:\Program Files (x86)\Embarcadero\Studio\19.0\PAServer\LinuxPAServer19.0.tar.gz
```

となっています。
持ってきた tar.gz を解凍すると PAServer が出てくるので、適切なディレクトリに移動します（全然適切で無いホームの直下においてあります…）。

![d.png](https://qiita-image-store.s3.amazonaws.com/0/12977/22098244-555e-147f-82f6-f2a4c5a425d0.png)

そして、**必ず terminal から実行**します。
GUI から実行すると、実体が見えないので実行されているのに結果が出力されないという事態になります。

実行すると↓下記の様になります。

![c.png](https://qiita-image-store.s3.amazonaws.com/0/12977/f626e224-5ed7-48d8-d83b-cb8ee30d48b3.png)

### Delphi の設定

PAServer をインストールおよび実行できたら、次は Delphi の設定です。
いつも通り SDK Manager で SDK をインストールします。

![e.png](https://qiita-image-store.s3.amazonaws.com/0/12977/5afdeccc-34e7-8092-4381-48fba791fe5b.png)

## 実行

Delphi でコンソールアプリケーションを選びます。

![f.png](https://qiita-image-store.s3.amazonaws.com/0/12977/186a1bde-8421-cb3a-4ea1-560cb6dc908a.png)

まずは Hello, world! を作ります。

```Pascal
program HelloUbuntu;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

begin
  Writeln('Hello, ' + TOSVersion.PrettyName);
end.
```

はい。たったこれだけ。
プロジェクトマネージャで、Linux を選んで…

![g.png](https://qiita-image-store.s3.amazonaws.com/0/12977/e3836ba2-bdba-4936-803d-756e6fae1929.png)

 [F9] で実行！

![h.png](https://qiita-image-store.s3.amazonaws.com/0/12977/0cfefda9-463b-fb52-296a-77c6bf511d2a.png)

無事動作しました！

ちなみに、Delphi で作ると VM や実行時モジュールなどを要求されない１つのファイルになります。
いつも通りの Delphi の長所です。

![i.png](https://qiita-image-store.s3.amazonaws.com/0/12977/5689cc6b-93e4-7a34-790d-853e7a53cb5c.png)


# まとめ
PAServer さえ入ってしまえば、いつも通り超簡単にアプリが作れます。
Delphi の魅力がますます広がりますね。