画像提供:マイナビニュース

写真拡大

DelphiやPascalと聞くと「懐かしい」と思う方もいるかもしれません。確かに、Pascalは1970年に発表された歴史ある言語の一つであり、1980年代以降Borland社が発売したTurbo PascalやDelphiは、多くのアプリ開発に使われて来ました。そして、今でも毎年のように最新版がリリースされています。今回は、筆者も大好きなPascal/Delphiについて紹介します。

○Pascalの生い立ち

Pascalは1970年に、ニクラウス・ヴィルト氏によって開発された歴史あるプログラミング言語です。教育用に開発されたこともあり、読みやすさを優先した言語仕様となっています。開発者のヴォルト氏は、PascalコンパイラをPascal自身で記述して、その能力を示しました。

その後、1972年には、チューリッヒ工科大学でPascal-Pが、1975年にはヴィルト氏がPascal-Sを開発します。そして、多くのPascalをベースにした処理系が登場しますが、1983年に標準化団体のISOにより、ISO 7185としてPascalが標準化されます。教育向けという側面もあり、多くのアルゴリズムの教科書でPascalが利用されました。

○Turbo PascalとDelphiの成功

さらに、1983年になると、Borland社がTurbo Pascalを発売します。これは非常に高速なコンパイラでした。開発用のエディタの素晴らしさもあって、パソコンの普及と共に大きな人気を博しました。そして、1995年、この成功を元にDelphiを発売します。DelphiはTurbo Pascalを拡張した言語を備えたビジュアル開発環境です。Turbo Pascal由来の高速なコンパイラとオブジェクト指向を土台にしており、拡張が容易な「コンポーネント」と呼ばれる視覚的な部品を組み合わせて画面設計を行うことができました。そのため、Windowsアプリの開発でも人気を博しました。ちなみに、Delphiは製品名でもあり、言語名でもあります。

○Delphiの栄枯盛衰

プログラミング開発環境として、大いに成功したTurbo Pascal/Delphiですが、1996年前後、Borland社で会社の方針が変更され、開発ツール部門の廃止が決定します。それで、Turbo Pascalの開発チームを率いていたアンダース・ヘルスバーグは、開発ツール部門のリストラ対象者を引き連れてマイクロソフトに移籍してしまいます。それによって、マイクロソフトにて、Delphiの思想を受け継いだC#言語が誕生します。

それでも、Borlandの開発チームはその後、しばらくDelphiをバージョンアップし続けます。2001年には、Delphi 6が発売され、日本でも無償のPersonal版が提供されます。これにより、多くの開発者がDelphiに馴染み、たくさんのフリーソフトが開発され世に出ました。

しかし、その後、Delphiに停滞期が訪れます。決定的になったのは、2003年に発表されたDelphi 8です。マイクロソフトの.NET対応するために、大規模な作業が必要であり、統合開発環境も一新されたのですが、品質が悪くDelphiの高速でサクサク使えるというイメージが崩れてしまいました。その後、数バージョンは、この影響を受け続けます。

そして、ユーザーの信頼を取り戻せない中、ついに、2006年にBorland社は開発部門をコードギアとして完全子会社化します。その後、2008年にはエンバカデロ・テクノロジーズがコードギアを買収します。さらに、2015年にはアイデラがこれを買収します。このように、Delphiの開発会社が次々と変わり不安に思うユーザーも多くいました。

それでも、Delphiは支持され続け、毎年のように新バージョンが発売されています。近年では、停滞期を乗り越え高品質のDelphiが提供されています。特に、Delphi 2009では、内部のUnicode化が実現し、ジェネリクスや匿名メソッドなど先進的な機能が言語に追加されました。そして、2011年には、Windows以外のOS、macOSやiOSの開発にも対応しクロスプラットフォーム化を果たしました。2013年には、Androidの開発にも対応しました。その後も、毎年のように最新版が発売されています。

原稿執筆時点では、年間売上が5000USドル以下の個人や企業が利用できるDelphi Community Editionが提供されており、気軽にDelphiを始めることができます。

○もう一つの流れFree Pascal

ところで、Pascalには、Delphi以外にも大きな潮流が存在しています。それが、Free Pascalです。Free PascalはオープンソースのPascal実装です。1993年に発表されてから26年以上の間に、様々な改良が加えられてきました。言語仕様は、Pascalの主流であるTurbo PascalやDelphi言語を採用したものとなっています。

マルチプラットフォームに対応しており、2000年にバージョン1.0が公開された際には、Windowsだけではなく、Linux、macOSなど様々なOS上で動作します。原稿執筆時点で最新の3.0.4では、それら主要OSに加えて、Game Boy Advance、Nintendo DS、Android、iOSなど多くの環境で動作します。

しかも、Free Pascalでは各種のPascal文法をサポートしており、ANSI/ISO標準モード、Delphi互換モード、Turbo Pascal互換モード、Mac Pascal互換モードなど、様々なPascalに対応しています。特にDelphi互換モードはサポートが厚く、Delphi用に作ったプログラムに少し手を加えるだけで、そのままコンパイルすることができます。ただし、Free Pascalはコンパイラのみなので、GUIのライブラリや統合開発環境は付属しません。

これを補うため、Free Pascalを利用してDelphiのような統合開発環境を実現するLazarusというプロジェクトもあります。Lazarusを使うと、デスクトップアプリを開発できます。

○簡単なプログラムを作ってみよう

Pascal/Delphiの歴史が面白く、ついつい紹介が長くなってしまいましたが、ここから実際にプログラムを作ってみましょう。ここでは、インストールが簡単なオープンソースのFree Pascalを利用して、Pascal/Delphiの良さを味わってみましょう。

Windowsでは、こちらから最新版をダウンロードできます。インストーラー形式になっていますのでインストールは簡単です。

macOSでは、Homebrewを利用して手軽にインストールできます。Homebrewインストール後、ターミナルを開いて「brew install fpc」とタイプすることでインストールできます。

Free Pascalで一番簡単なプログラムは、以下の通りです。テキストエディタなどで「hello.pas」という名前で保存しましょう。

program hello;

begin

WriteLn('Hello, World!');

end.

このプログラムをコンパイルして実行するには、Windowsならコマンドプロンプトを、macOSならターミナル.appを起動して、以下のコマンドを実行しましょう。

fpc hello.pas

.\hello

プログラムを見てみましょう。Pascalのプログラムは、begin ... end.で囲われた範囲に記述します。WriteLn関数でメッセージを出力します。

○FizzBuzz問題を解いてみよう

続けて、いつも本連載でやっているように、FizzBuzz問題を解いてみましょう。FizzBuzz問題とは以下のようなプログラムです。

> 1から100までの数字を出力する際に、3の倍数の時「Fizz」、5の倍数の時「Buzz」、3と5の倍数の時「FizzBuzz」と表示するプログラムを作って下さい。

Pascalのプログラムは、以下のようになります。これを「fizzbuzz.pas」という名前で保存します。

program fizzbuzz;

uses SysUtils;

// FizzとBuzzを判定する関数を定義 --- (*1)

function IsFizz(i: Integer): Boolean;

begin

IsFizz := ((i mod 3) = 0);

end;

function IsBuzz(i: Integer): Boolean;

begin

IsBuzz := ((i mod 5) = 0);

end;

// FizzBuzzを判定する関数を定義 --- (*2)

function FizzBuzz(i: Integer): String;

begin

if IsFizz(i) and IsBuzz(i) then begin

FizzBuzz := 'FizzBuzz';

end else if IsFizz(i) then begin

FizzBuzz := 'Fizz';

end else if IsBuzz(i) then begin

FizzBuzz := 'Buzz';

end else begin

FizzBuzz := IntToStr(i);

end;

end;

// FizzBuzz関数を100回呼び出す

var i: Integer;

begin

for i := 1 to 100 do begin

WriteLn(FizzBuzz(i));

end;

end.

これをコンパイルして実行するには、以下のコマンドを記述します。

fpc fizzbuzz.pas

.\fizzbuzz

プログラムを確認してみましょう。(*1)ではFizzとBuzzを判定する関数を定義します。関数名に値を代入するとそれが戻り値となります。(*2)ではFizzBuzzの数値に応じたFizzBuzzの答えを戻す関数を定義します。(*3)では、100回FizzBuzz関数を呼び出します。

○まとめ

以上、今回はPascal/Delphiについて簡単に紹介しました。Pascalは歴史ある言語であり、Pascalの流れをくむDelphiは紆余曲折あったものの、今でも毎年のように最新版がリリースされている活発なプログラミング言語です。

ところで、筆者のDelphi好きは周囲でも有名で、代表作の「テキスト音楽サクラ」も、日本語プログラミング言語なでしこも、Delphiで開発しました。特に、サクラに関してはC/C++言語で書いてリリースした後に、Delphiにて書き直すことまでしています。

なお、順調にバージョンアップしているDelphiですが、その実力はどの程度でしょうか。最新のTIOBEのプログラミング言語ランキングでは堂々の13位をキープしています。現状、多くの新しい言語に押されているのは確かですが、多くのファンがいるPascal/Delphiは今後も使い続けられていくことでしょう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。