Lazarus (統合開発環境)

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

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

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

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

修正可能かどうか、また修正量はプログラムに依存するので、どういう部分が異なっているか、LazarusのWikiが参考になる。特に日本語については、UTF-8にするという方針になっているものの、IDEまわりを含め、クロスプラットフォームでの実装が充分されていない。LazarusでASCII文字以外を扱う際は、注意して利用すべきである。Lazarus 0.9.22でも、まだ日本語を完全に扱えていない。
Lazarus 0.9.25から、公式にUTF-8をサポートされているが、全角文字が3バイトになるUTF-8でのストリング処理は、依然として容易とは言えない。

## ユーザインタフェースの利用
### 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 は普通に使える状態である（macOS含む）
* GTK+ 2.x は開発中である。国際化とフォーカシングの点で改良された
* Qt 4 (C++) のヘッダが移植された。簡単なアプリケーションではインターフェースが利用可能である
* wxWidgets (C++) に関しては、ヘッダの移植が終わっていない
* Aqua（macOS ネイティブのツールキット、Objective C）プレーンなCのインターフェースだが、まだヘッダの移植が終わっていない
* Carbon（macOS ネイティブのツールキット、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.22 ではそのようにはなっていない。UTF-8で今後開発が進むにつれ、日本語でもクロスプラットホームが実現できるようになるだろう。

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

* 

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

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

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

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

## 限界
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、macOSは動作しないかテスト前）
** lNet は FPC　ネイティブの non-blocking variantである。
* .NET、COMがサポートされていない。.NETをサポートしないのは設計上の問題である。
* パッケージの動的ロードができない

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

## 関連項目
*Free Pascal

## 外部リンク
*Lazarus, a RAD for FPC (Download at SourceForge.net)
*Lazarus CCR知識ベース
** Lazarus開発者むけドキュメントを集積している。VCLからLCLに移植する際のヘルプなどがある。
** LCL はVCL/CLXと似たような感じでLazarusで利用するクロスプラットフォームなオープンソースライブラリである。
** 詳細はDelphiからLazarusへのコード変換ガイド
*Lazarusドキュメンテーション
*Free Pascal Documentation
*3DライブラリGLSceneを使ったLazarusアプリケーション
*