Lazarus

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Lazarus
開発元 有志
最新版 0.9.26 / 2008年10月15日
対応OS クロスプラットフォーム
種別 Pascal SDK
ライセンス GPL
公式サイト www.lazarus.freepascal.org
  

Lazarus は、クロスプラットフォームヴィジュアルプログラミング統合開発環境である。オープンソースPascalコンパイラであるFree Pascal向けに開発された。これはPascal及びObject Pascalプログラマのために、RADの一つであるDelphiに良く似たフリーの開発環境を作ろうとするものである。

Free Pascal はオープンソースのコンパイラで、 Linux, Win32, OS/2, Mac OS X, BSD, 68Kといった幅広い環境に対応している。Free Pascal は、Pascalのコンパイラであるが、Object指向の拡張がなされたDelphiの文法に従って書かれたソースもコンパイルすることができるように開発された。 「一度プログラムを書けば、どこでも走る」というのは Java のキャッチフレーズであるが、Lazarus は 「一度プログラムを書けば、どこでもコンパイルできる」を合言葉に、Free Pascalをベースとしたクロスプラットホームのコンパイラとライブラリの統合を目指している。 Free Pascalは上記のような多くのプラットフォーム向けのコード生成が可能なので、Lazarusは、その特徴をいかした、GUIライブラリ(LCL)と、統合開発環境を提供している。 Lazarusでは、コンポーネント等を用いるアプリケーションであれば、たとえGUIアプリケーションでも、プラットフォーム別にプログラムを書き換えなくてもいいように設計されている。

PascalのRAD-GUIアプリケーション開発言語としては、Microsoft Windowsでは、ボーランド社のDelphiが歴史が古く、安定しており、サンプルや資料も多い。 だが、DelphiはWindowsでしか動作しない。FreePascalとLazarusを用いると、日本語部分の処理を除けば、多少の修正でLinuxMac OS XなどでDelphiで書かれたプログラムをコンパイルすることができる。

特に最近の流れとして、海外では、DelphiやPascalで書かれた優れた多くのコンポーネントが、LazarusやFreePascal向けに移植され、同じソースからコンパイルできるようになっている。

修正可能かどうか、また修正量はプログラムに依存するので、どういう部分が異なっているか、LazarusのWikiが参考になる。特に日本語については、utf-8にするという方針になっているものの、IDEまわりを含め、クロスプラットホームでの実装が充分されていない。LazarusでASCII文字以外を扱う際は、注意して利用すべきである。最新のLazarus 0.9.22でも、まだ日本語を完全に扱えていない。

目次

[編集] ユーザインタフェースの利用

[編集] LCL

LazarusのGUIサブシステムはLCL (Lazarus Component Library)と呼ばれ、基本的にウィジェット・ツールキット関連部分を構成するクラスをまとめたものである。LCLはVCLを手本にしているが、100%互換ではない。

LCLは、Delphiとの互換性よりも、Windows以外のプラットフォームでのプログラミングを想定している。DelphiやWindowsに依存したVCLは手本にしつつ、幅広いクロスプラットホームプログラミング、および、ソースが全て公開されたものを理想にしている。

[編集] インターフェース - ウィジェット・ツールキット依存部分

Lazarusでは単に「インターフェース」と呼ぶ。事実、ウィジェット・ツールキットあたり一つのインターフェースがあるようなものである。

ウィジェット・ツールキットインターフェースに関する現状はおおむね以下の通り。

  • win32 GDI support (win32 ネイティブ) は普通に使える状態である
  • GTK+ 1.2.x は普通に使える状態である (Mac OS X含む)
  • GTK+ 2.x は開発中である。国際化とフォーカシングの点で改良された
  • Qt 4 (C++) のヘッダが移植された。簡単なアプリケーションではインターフェースが利用可能である
  • wxWidgets (C++) に関しては、ヘッダの移植が終わっていない
  • Aqua (Mac OS X ネイティブのツールキット、Objective C) プレーンなCのインターフェースだが、まだヘッダの移植が終わっていない
  • Carbon (Mac OS X ネイティブのツールキット、Objective C) Pascal ヘッダ(呼出規約#Pascal参照)は移植され、ごく簡単なアプリケーションではインターフェースが利用可能である
  • wince (Windows CE ネイティブ) は移植作業中である

[編集] PDAのサポート

PDA用には、いまのところ良いクロス開発環境やRADツールがない。LazarusはPDAをサポートすべく実装作業中であり、この穴を埋めることになろう。

LCL移植作業中のプラットフォーム

  • Windows CE
  • Qtopia for Linux-based PDAs

将来は

  • PalmOS
  • Symbian OS

にも移植されるだろう。

[編集] 文字コードに関する問題

日本語の場合、プラットホームによって、文字コードが違うが、Lazarusではユニコードのutf-8を標準として、各プラットホームでのインターフェースでそれをプラットホームに変換して吸収しようとしている。

しかし、この方針は最近決められたことであり、現在の実装 0.9.20 ではそのようにはなっていない。utf-8で今後開発が進むにつれ、日本語でもクロスプラットホームが実現できるようになるだろう。

現在のIDEのエディタでは、日本語やIME/XIMの処理が不十分である。LazarusのWindows版は、SJISでの編集になっているが、FreePascalJpプロジェクトでは暫定的にIDEエディタの日本語パッチを公開している。

SourceForge.jpのfreepascaljpプロジェクト

[編集] 開発プロセス

Lazarusプロジェクトには多くのプログラマとテスタが集まり、良いコミュニティと高度な開発プロセスをもたらしている。問題点があればディスカッションボードで解決され、プログラマがそれを修正するパッチを投稿する。毎晩テスト前のビルドが作られ、ベータテスタに渡される。Lazarusの開発は大変ダイナミックである。

[編集] データベースのサポート

Lazarusはいくつかの外部データベースをサポートしているが、それらを利用するにはデータベースに応じたパッケージをインストールする必要がある。ソースコードを用いても、フォーム上のコンポーネントを用いてもデータベースにアクセスすることができる。データ関連コンポーネントはデータのフィールドを表し、TDataSourceオブジェクトのプロパティを正しく設定することで実際に接続される。TDataSourceはテーブル(表)を表し、これにも対応するコンポーネントがある(TPSQLDatabase、TSQLiteDataSetなど)。

サポートされている外部データベースは次のとおり:

  • PostgreSQL PSQLパッケージが必要
  • dBaseFoxPro TDbfを使って、外部サーバやライブラリなしに利用することができる
  • MySQL
  • SQLite 一つの外部ライブラリとTSqliteDatasetコンポーネントでアクセスできる
  • MSSQL Zeoslibを用いる
  • InterBase / Firebird これも最新のZeoslibでサポートされる

[編集] クロス開発

Free Pascalはクロス開発環境をサポートする。Lazarusのアプリケーションも、マイクロソフトWindows、Linux、FreeBSDでクロスコンパイルが可能である。Mac OS XでコンパイルしてWindows、Linux、FreeBSDで利用することもできる。Mac OS Xへのクロスコンパイルは可能になっているが、まだ一般公開されていない。

[編集] 限界

DelphiのRADにいろいろな点で似てはいるものの、パフォーマンスや仕様上の制限がある。

  • 実行ファイルの大きさがDelphiよりいささか大きい。GNUリンカとのからみである
  • 前述のようにVCLと100%互換なわけではない。これは設計上の相違であるが、ほとんどの場合現在のLCL widgetで問題なく動作する。しかし、今存在するVCL widgetの深いリポジトリに触ろうとするなら、変換作業が必要である。まれに設計上の根本的な相違にぶつかることもあるが、ほとんどの場合は編集ですむ。ライブラリに欠けているunit(モジュール)があることと、COMサポートが実現されていないことが、LCLとVCLの互換性の上で大きな問題になってきた。
  • Delphiのコンポーネントを IDE にインストールすることができるが、面倒な変換作業が必要である。
  • 重要なライブラリ/widgetである Media ライブラリが存在しない。
    • Office との結合性
    • Datasnap
  • ネットワーク機能
    • Indy、ICS、Synapseは動作するが、Indyは100%のプラットフォームで動作している訳ではない(Linux, win32は100%。FreeBSD, OS Xは動作しないかテスト前)
    • lNet は FPC ネイティブの non-blocking variantである。
  • .NET、COMがサポートされていない。.NETをサポートしないのは設計上の問題である。
  • パッケージの動的ロードができない

[編集] 使用条件

LazarusはGPLライセンスだが、Lazarusで開発したソフトウェアはこのライセンスに縛られず、どのようなライセンスであってもいい。LCLはプログラムに静的リンクされるが、LGPLという特殊なライセンスにより、必要に応じてリンクされたバイナリを配布してもよいことになっている。

[編集] 他言語との比較と、特徴

RADという点では、ドットネットの開発環境や、Delphiと比較できる。また、クロスプラットホームでは、Javaと比較も可能である。 しかし、現状では特に日本語に関してはLazarusの完成度は、それらの環境に遠く及ばない。ちょっと使ってがっかりする人も多い。

Lazarusの真骨頂の一つは、ソースがすべて公開されて、すべてをコンパイルするホワイトボックスを理想に、実装や開発がすすめられていることである。1秒で何万行をもコンパイルしてコードを生成する超高速なFreePascalコンパイラが、膨大なソースコードによる開発を支えており、コードの量が膨大でも、生産性がさほど低下しない。 LCLでもIDEでも、こうしたいと思えば、自分でソースを変更すれば、いくらでも自分の手になじむように出来るし、それを、Lazarusのプロジェクトに反映させることもできる。

一方、RADとしての開発手法やプロセスは、いまどきの他言語でもさほど差がない。しかし、我々が口出ししたり、修正することはできないブラックボックスの多さに後日気がついたことはないだろうか?

Lazarusには、多くのGUIコントロールや、色々なデータベース接続、ソケット、XPプログラミングやテスト、高機能3Dグラフィクスライブラリなどのコンポーネントが標準でついている。 Lazarusでコンパイルできる物理シミュレーションのための計算コンポーネントや、ピクセル処理、XMLライブラリなども、数多くある。それらのほとんどは、ホワイトボックスである。それらの多くが、多くの人々によって、日夜、修正、拡張されている。まだあまり完成されていないものも存在するが、優れたものも数多い。

全てのソースが公開されていることの明確さ、自らがコンパイルできる言語としての完全性、文法の簡潔さ、多くのすぐれたコンポーネント、OSを超えたフィールドの広さは、傑出しており、評価できる。

[編集] 関連項目

[編集] 外部リンク