Delphi10の無料版が出たので使ってみた

# Delphi10(無期限無償版)を使ってみよう

先日(2016年9月27日)、「Delphi」「C++Builder」の入門者向け(Starter Edition)が無期限の無償版として公開されました。収益が1,000米ドルを超えなければ、5人以下の企業・組織のユーザーも利用できるとのことで、さっそく使ってみたいと思います。

![スクリーンショット 2016-09-28 12.43.05.png](https://qiita-image-store.s3.amazonaws.com/0/33180/9d7fccab-d220-6aad-fc40-7f715ab7c32a.png)

筆者は、Delphi4の頃からのDelphiファンで、しばらく、最新版が出る度に購入したのですが、いつしか、最新版を買っても、Delphi7しか使っていなかったので、いつしか買うのをやめてしまっていました。果たして、Delphi10は、Delphi7を超えるツールとなっているのでしょうか？！　また、これから、Delphiを覚える価値があるのでしょうか？検証してみたいと思います。

## インストール

Delphi10(C++ Builder)のインストールは、以下のURLから行うことができます。

- [URL] https://www.embarcadero.com/jp/products/delphi/starter

基本的にユーザー登録が必要で、ユーザー登録をすると、メールでシリアルキー（インストール番号）が送られてきます。Delphiのインストーラーを実行すると、このシリアルキーの入力画面が出るので、キーを入力してしばらくすると、セットアップが完了します。この作業自体は、まったく問題ないでしょう。

## Rad Studioの起動

デスクトップに作られたDelphi10のアイコンを起動すると、RAD Studio (Delphi/C++ Builder)のIDE(開発環境)が起動します。Delphiを起動したのに、別のツールが起動するので、知らないと、ちょっと驚くことと思います。

![radstudio.png](https://qiita-image-store.s3.amazonaws.com/0/33180/d3a5a33e-7060-ba1d-d3e1-ac83291f4c61.png)

そして、起動画面のチュートリアルをボタンを押したところ、サイトが見つからないと表示され、いきなり、不信感を抱くことになりました。せっかく無償配布をはじめるなら、チュートリアルへのリンクくらい確認して欲しいところと、厳しめのツッコミを入れておきます。

とは言え、思ったよりも動作は軽快で好印象です。かつて、Delphi(あるいは、Visual Studio)を触ったことがある方ならば、なんとなく画面をデザインして実行して、アプリを作ることができるでしょう。

## 簡単なアプリを作ってみよう

Delphiを評価するにあたり、次のようなアプリを作ってみました。

複数の画像ファイルをエクスプローラーから、リストボックスにドラッグ＆ドロップし、変換ボタンを押すと、画像をリサイズし、GIFファイルに変換するというプログラム。以下、作ったアプリの画面です。

![スクリーンショット 2016-09-28 14.42.40.png](https://qiita-image-store.s3.amazonaws.com/0/33180/f70acc01-9635-5879-4364-b0f697b6786e.png)

※Delphiをダウンロードして、インストール、そして、この簡単なアプリを作り、この記事を書き上げるまでの総制作時間は、3時間でした。（実際のコーディング時間は1時間ちょっとほど)

### プロジェクトの作成

今回は、RAD Studioを起動すると出てくる画面で、一番目立つ赤色のリンクボタン「マルチデバイスアプリケーション」をクリックしてみました。たぶん、これがお勧めなので、目立つ色なのでしょう、それに倣って、そこからプロジェクトを作ってみます。

![multidev.png](https://qiita-image-store.s3.amazonaws.com/0/33180/e72833c1-e13b-a8cf-0031-ea9894d24616.png)

すると、画面にフォームが表示されるので、画面の右下にあるツールパレットから、ボタンやリストなど、それらしいコントロールをフォームへドラッグ＆ドロップして、フォームを設計していきます。

![スクリーンショット 2016-09-28 14.10.48.png](https://qiita-image-store.s3.amazonaws.com/0/33180/eaed6d74-aeb3-02f9-f180-8120c316d152.png)

画面左側にオブジェクトインスペクタがあり、ここで、コントロールの名前(Name)やテキスト(Text)を設定することができます。

ぺたぺた、コントロールをはりつけては、インスペクタで、NameやTextを設定。ボタンのイベントを設定したければ、ボタンをダブルクリックすると、コード編集画面が開くので、そこで、ボタンを押した時のイベントを書くというものです。以前のDelphiやExcel VBA、Visual Studioに慣れた方であれば、ほとんど迷うことはないでしょう。

### コーディング

ここでは、以下のようなコードを書いてツールを完成させることができました。Delphi言語(Object Pascal)のコーディングは、以前とほとんど変わりません。関数の大枠は、IDEが勝手に書いてくれるので、各メソッドごとに数行のコードを記述しただけです。

```pascal:Unit1.pas
procedure TForm1.btnConvertClick(Sender: TObject);
var
  i, w, h: Integer;
  r: Double;
  src, des: string;
  bmp: TBitmap;
begin
  for i := 0 to listFiles.Count -1 do
  begin
    src := listFiles.Items[i];
    des := StringReplace(src, '.png', '.gif', [rfReplaceAll]);
    bmp := TBitmap.Create;
    bmp.LoadFromFile(src);
    r := sizeBox.Value / bmp.Width;
    w := Trunc(sizeBox.Value);
    h := Trunc(r * bmp.Height);
    bmp.Resize(w, h);
    bmp.SaveToFile(des);
  end;
end;

procedure TForm1.listFilesClick(Sender: TObject);
var
  f: string;
begin
  if listFiles.ItemIndex < 0 then Exit;
  f := listFiles.Items[listFiles.ItemIndex];
  ImageViewer1.Bitmap.LoadFromFile(f);
end;

procedure TForm1.listFilesDragDrop(Sender: TObject; const Data: TDragObject;
  const Point: TPointF);
var
  i: Integer;
  s: string;
begin
  for i := 0 to Length(Data.Files) - 1 do
  begin
    s := Data.Files[i];
    if Pos('.png', s) > 0 then
      listFiles.Items.Add(s);
  end;
end;
```

今となっては、変数の宣言を、関数の先頭に書かなければならないというDelphi言語の縛りが、煩わしく感じました。以前、型を推論して自動で変数を定義する機能がついたという記事をどこかで見た気がするのですが、どうやって変数の自動宣言するのかは分かりませんでした。

もちろん、コード補完機能があり、自分ではそれほど覚えて無くても、それらしいプロパティを選んで、確定すると、コードを完成させることができました。このあたりは、型付けの強いDelphi言語の特徴ならではでしょう。

### 素晴らしくなったと感じた点

以前のGUIコンポーネントのVCLから、FireMonkeyへのコンポーネントが総入れ替えされています。これが、結構洗練されているという印象を受けました。意味不明なプロパティは廃止され、分かりやすくなっています。

例えば、以前のVCLでは、ファイルからのドラッグ＆ドロップを実現しようと思ったら、ドラッグのためのコンポーネントをフォームに貼り付けたりして実現していましたが、いまや、TListBoxやほかのコンポーネントも、ファイルからのドラッグを受け付けられるようになっていました。標準のコンポーネントは、確実に進歩しており、必要な処理に集中できるように、工夫されています。

### 歴史あるDelphiならではの混乱も。。。

今回のプログラムでは、ファイルからのドロップなどは、既にコンポーネント側に機能がついており、プロパティを何か設定する必要さえなかったので、調べなくてはならなかったのは、（１）画像をリサイズさせること、（２）画像の形式をGIFに変換させることの二つだけでした。

しかし、「Delphi GIF」などで検索すると、歴史あるDelphiなので、古い資料がたくさんヒットし、なかなか、Delphi10でのやり方が見つかりません。コーディングしていた時間のほとんどは、こうした古い資料が、Delphi10で使えないことを確認するだけの時間でした。。。

それで、海外の資料を見て試したところ、TBitmap自体に、いろいろな画像フォーマットを扱う機能がついており、保存するファイルの拡張子を変えるだけで、勝手にそのフォーマットで画像を読み書きしてくれることが分かりました。スゴイ。

## いろいろ試してみての感想

一番、驚いたのは、Rad Studioが軽快に動いたことです。筆者は、MacBook Airを使っており、仮想マシン上にインストールしたWindows上でDelphi10を使ってみましたが、ストレスなく使えました。以前、最新版のDelphiを買っても、Delphi7を使い続けていた理由には、過去のアプリとの互換性(Unicode周り)の問題に加えて、IDEが重すぎるという二点だったので、後者の問題は解決しました。

また、無料版では利用できないので、想像するしかないのですが、Android/iOS/Mac用のアプリも、Delphi10で作れるとのことです。今のところ、予定はありませんが、何かきっかけがあれば上級版にアップデートするのもありかもと思った次第です。

完成したアプリを見ると、8.3MBもありました。結構、実行ファイルのサイズが大きいことに驚きましたが、Electronなどイマドキのデスクトップアプリ開発ツールで作ると70MBにもなるので、8MBなら許容範囲というところでしょうか。当然、.NETで作れば同じ機能のツールも、もっと小サイズで作れますが、いずれにしても、今では、それほど問題にならないサイズでしょう。

### 果たしてDelphi10はアリかナシか？

無料ではじめられること、お金を出せば他のOSでも動かせる点を考えて、Delphi10をはじめるのは、悪くない選択肢と思いました。これまでに、数多くのフリーソフトが、Delphiを使って作られましたが、Delphi10の無償版も同様に、フリーソフト開発で積極的に使われるツールの一つとなることでしょう！

記事の冒頭でも書きましたが、インストールから簡単なアプリの開発まで、2時間程度でできている点を考えると、間違いなく、Delphiは生産性の高いツールと言うことができるからです。（もちろん、筆者は、Delphi言語を既に習得しているので、これから覚える方であれば、もう少し時間がかかると思いますが。）

また、新しい言語を学びたいという人も、Delphiを学ぶのは良いことです。今でも、Delphiは、素晴らしいプログラミング言語だと思います。

ただし、何を作るにも、Delphi10を積極的に使いたいかというと、ちょっと悩むところです。というのも、ただデスクトップアプリを作るだけなら、積極的にオープンソースを推し進める.NETのC#がありますし、簡単なGUIでよければ、Python/Ruby/JavaScriptなどの柔軟なプログラミング言語を使って作ることもできます。それらのプログラミング言語は、マルチプラットフォームが当然で、完全無料です。Delphi10は、Windowsで無料ではじめられるとは言え、MacやiOS/Androidで動かすのには、上位版を購入する必要があるからです。

とは言え、複雑なGUIを持つアプリを手軽に作りたいのならば、Delphiが有望な選択肢となります。結論ですが、デスクトップアプリの開発者は、Delphi10を、Windowsにインストールしておくべきです！！