2026/01/18(日) [n年前の日記]
#1 [lazarus] Lazarusを試用
Delphi と同じ感覚で利用できる開発環境として Lazarus というものがあるらしい。Free Pascal という、Pascal だか Object Pascal だかでソースを書いてアプリを作成できて、Windows、Linux、Macで利用できるのだとか。しかもオープンソース。
_Lazarus Homepage
_Lazarus (統合開発環境) - Wikipedia
_Lazarusってなんぞや - 高見知英の技術ログ
気になったので試用してみた。環境は Windows11 x64 25H2。
_Lazarus Homepage
_Lazarus (統合開発環境) - Wikipedia
_Lazarusってなんぞや - 高見知英の技術ログ
気になったので試用してみた。環境は Windows11 x64 25H2。
◎ インストール :
lazarus-4.4-fpc-3.2.2-win64.exe を入手して実行。今回は D:/Dev/Lazarus/ にインストールしてみた。1.74GBほどが入った。
デスクトップにショートカットファイルが作成されたので、ダブルクリックしたら起動した。
デスクトップにショートカットファイルが作成されたので、ダブルクリックしたら起動した。
◎ 感想 :
起動してみたけれど、たしかに Delphi っぽい…。
コントロール(ウィジェットと呼ばれたりもする)の名前は、Delphi と同じっぽい? TLabel や TButton も用意されていた。
DelphiでVCLと呼ばれていたものは、LazarusではLCLと呼んでいるらしい。
Hello Worldと表示されるだけのGUIアプリを作成してみたら、出来上がった .exe は 24.3MBだった。Delphi で似たようなものを作ると 3.7MB。一桁違う…。さすが Delphi。Windowsに特化して作られてきたのは伊達じゃない、ということだろうか。
とは言え、Lazarus も Delphi と同様に、フォームにコントロールをペタペタ貼っていくだけでGUIアプリがサクサク作れてしまうあたり、実にイイ感じの開発環境に思える…。
何より、オープンソースなので安心。Delphi は本来有償製品だから、企業側の思惑次第で無償利用できる版が無くなって、利用者にとっては梯子を外されてしまう不安がずっとつきまとうけれど、Lazarusは最初から無償利用が可能なので、そういう面では安心して使えそう。
コントロール(ウィジェットと呼ばれたりもする)の名前は、Delphi と同じっぽい? TLabel や TButton も用意されていた。
DelphiでVCLと呼ばれていたものは、LazarusではLCLと呼んでいるらしい。
Hello Worldと表示されるだけのGUIアプリを作成してみたら、出来上がった .exe は 24.3MBだった。Delphi で似たようなものを作ると 3.7MB。一桁違う…。さすが Delphi。Windowsに特化して作られてきたのは伊達じゃない、ということだろうか。
とは言え、Lazarus も Delphi と同様に、フォームにコントロールをペタペタ貼っていくだけでGUIアプリがサクサク作れてしまうあたり、実にイイ感じの開発環境に思える…。
何より、オープンソースなので安心。Delphi は本来有償製品だから、企業側の思惑次第で無償利用できる版が無くなって、利用者にとっては梯子を外されてしまう不安がずっとつきまとうけれど、Lazarusは最初から無償利用が可能なので、そういう面では安心して使えそう。
◎ 2026/01/19追記。バイナリサイズを小さくできた :
生成されたバイナリのサイズが大きいなと思っていたけれど、デバッグ用の情報(シンボル情報等)を含めているから大きくなっているだけと知った。以下の設定をすれば改善(?)できる。
プロジェクト → プロジェクトオプション → コンパイラオプション → デバッグ。上のほうにある「Build mode」の右端に「Edit build modes」というアイコンがあるのでクリックして、「Debug と Release のモードを作るか?」的な問いに答えれば、Debug と Release の2つのモードが作成される。
Release を利用してビルドしたら、生成されたバイナリのサイズが 2.6MB になった。これならDelphiとさほど違いはない…。素晴らしい。
プロジェクト → プロジェクトオプション → コンパイラオプション → デバッグ。上のほうにある「Build mode」の右端に「Edit build modes」というアイコンがあるのでクリックして、「Debug と Release のモードを作るか?」的な問いに答えれば、Debug と Release の2つのモードが作成される。
Release を利用してビルドしたら、生成されたバイナリのサイズが 2.6MB になった。これならDelphiとさほど違いはない…。素晴らしい。
[ ツッコむ ]
#2 [lazarus] Lazarusでクラス名変更ができなくてハマった
Lazarusでプロジェクトを新規作成した直後だと、TForm1 というクラスが作られている。これを TWindowForm にリネームしようとしたらハマった。
該当ワードの上で右クリックして、リファクタリング → 識別子名を変更、を選んで名前を変更したのだけど…。ビルドは通ってくれたように見えるのだけど、その .exe を実行しようとすると、デバッガがエラーを出してくる。
意味が分からない…。一体ここからどうしろと…。
Google Geminiに尋ねてみたら以下の修正が必要と言ってきた。
まず、ソースファイル *.pas と紐づけられている *.lfm (フォームのデザインをするためのファイル)が修正されてないから、手作業で修正。
次に、*.pas の最後のほうの「end.」の前に、以下を挿入。
加えて、プロジェクト → プロジェクトソースを表示、で *.lpr を開いて、以下の行があるか確認。
実行 → 掃除して構築、を選択してクリーンビルドをする。結構時間がかかる。
このあたりを試していたらエラーが出ないバイナリを作れた気がする。
Delphi ならこういうエラーに遭遇しなかったあたり、全て自動でリネーム処理をしてくれるのだろう。さすがに有償製品だなと…。
該当ワードの上で右クリックして、リファクタリング → 識別子名を変更、を選んで名前を変更したのだけど…。ビルドは通ってくれたように見えるのだけど、その .exe を実行しようとすると、デバッガがエラーを出してくる。
Form resource TWindowForm not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource. フォームリソース TWindowForm が見つかりません。 リソースを持たないフォームでは、CreateNew コンストラクタを使用する必要があります。 グローバル変数 RequireDerivedFormResource を参照してください。
意味が分からない…。一体ここからどうしろと…。
Google Geminiに尋ねてみたら以下の修正が必要と言ってきた。
まず、ソースファイル *.pas と紐づけられている *.lfm (フォームのデザインをするためのファイル)が修正されてないから、手作業で修正。
object Form1: TForm1 ↓ object Form1: TWindowForm
次に、*.pas の最後のほうの「end.」の前に、以下を挿入。
end. ↓ initialization RegisterClass(TWindowForm); end.
加えて、プロジェクト → プロジェクトソースを表示、で *.lpr を開いて、以下の行があるか確認。
RequireDerivedFormResource:=True; Application.Scaled:=True;
実行 → 掃除して構築、を選択してクリーンビルドをする。結構時間がかかる。
このあたりを試していたらエラーが出ないバイナリを作れた気がする。
Delphi ならこういうエラーに遭遇しなかったあたり、全て自動でリネーム処理をしてくれるのだろう。さすがに有償製品だなと…。
◎ 2026/02/03追記 :
一々テキストエディタで編集しなくてもリネームできる方法が分かったのでメモしておく。
ソースコード上でリネーム作業をした後、リネームしたいコンポーネントのプロパティで Name を変更してやるだけで、自動で使用クラス名も変わってくれる模様。
ソースコード上でリネーム作業をした後、リネームしたいコンポーネントのプロパティで Name を変更してやるだけで、自動で使用クラス名も変わってくれる模様。
[ ツッコむ ]
#3 [nitijyou] 親父さんが入院
詳細はGRPでメモ。
[ ツッコむ ]
以上、1 日分です。