高見知英の技術ログ

技術関係のログをQiitaから移行してきました。プログラミングのほか、使っているアプリの細かい仕様についてなど書いていきます。

Lazarus体験記

Lazarusという開発環境をご存知でしょうか。

Delphiのベースになった言語、Object Pascalの開発環境で、オープンソースで開発が進められています。

www.lazarus-ide.org

今回デスクトップで比較的高速に起動するアプリケーションを作る必要があり、とりあえず手近にあるもの・・・ ということで、今回こちらを使うことにしました。

昔のDelphiそっくり!

とりあえずLazarus、Delphi 6あたりの時代のDelphiにそっくりです。

f:id:TakamiChie:20211031164918p:plain
Lazarusの開発環境

構文も他の言語と違ってそれほど昔から変わってないので、まさに昔ながらのDelphi という感じ。思わず「懐かしい!」と感じていました。

Lazarusの雑感

とりあえずLazarusをしばらく使ってみた感じですが。

  • 定義と実装部分が分かれている、昔ながらのObject Pascal
  • 未だにガベージコレクションがない
  • 画面レイアウトは最近の開発環境と違い、オブジェクトインスペクタやプロジェクトインスペクタ、ソースエディタなどのウィンドウがバラバラになっている状態*1
  • Delphiに比較的近いため、Embarcaderoの公開しているDelphi言語リファレンスがある程度使える(使えない部分もある)
  • Git連携などは存在しない。外部ツールを起動することはできるので、そこでGithub Desktopなどを起動できるようにすればまあ代用可能
  • ソースコード上の何行目を今選択しているか 等の情報をすべてプロジェクトファイルに保存してしまうため、地味にGitなどと相性が悪い?
  • Lazarusの機能差分やモジュール差分はLazarusのWikiにまとまっている
  • 開発環境自体のデータサイズが結構軽い(とくにVisual StudioやEmbarcaderoのDelphiに比べると)
  • Chocolateyでインストールできる

という感じ。

Visual StudioやEmbarcaderoのDelphiだとインストールもそこそこ重いし、PC再セットアップの時など、なんだかんだいっておっくうになりそうという理由で今回はこれを選択しました。

情報検索

とりあえず極端にやりづらいです。

この辺はDelphi自体が他の言語に比べればマイナーなのでしょうがないところはありますが、活用事例がとにかく少ない。

他の言語みたいにプログラミング系のブログが引っかかることはほとんどない(引っかかっても2006年くらいの古い記事)。英語文献を探しても結構少ない感じで。

まあ、スタックオーバーフローの機械翻訳記事や、プログラミングスクールなどのいかがでしたか記事が引っかからない分気が楽と言えば気が楽かもしれない。

LCLは、なかなか良い

ただ、DelphiVCL互換コンポーネントとして作られているLCL(Lazarus Component Library)は結構DelphiVCLとかなり近い実装となっている。

そして、VCL自体の評判がよかったとおり、LCLも結構いい感じ。まだまだそんなには使っていませんが、ここは結構使いやすいです。

ガベージコレクション

上に書いたとおりですが、Object Pascalには今の時代になってガベージコレクションというものがありません。

StringやIntegerなどのプリミティブな型はとくに解放の必要がありませんが、オブジェクトはすべて必ずFree()メソッドを呼んで解放する必要があります。

ただ、ガベージコレクションのある言語だと、解放されるだろうと思っていた変数がしれっと解放されずに残ってしまうことが時々あったり、ガベージコレクションまかせでバンバンメモリリークする第三者モジュールなどもあったりして、特に長時間動くアプリを作るならいっそないほうがいいのかもな・・・ と思いました。

まあありかなという感じ。でも大規模プロダクトには向いてなさそう

今時にしてはちょっと古くさい感じがあるものの、使ってみて悪くはないかな という印象でした。

ただ、プロジェクトインスペクタがフォルダ分けをサポートしていない、Delphi関係以外のファイルをリストしづらいなど、Windows標準のエクスプローラーやVisual Studio Codeと併用した方が楽 というシーンもあり、ある程度以上規模が大きいプロダクトを作成するのには向いていないように思えました。

まあこの辺は今だと比較対象がVisual Studioくらいになってしまってやや分が悪いか・・・?

言語自体はマイナーですが、クラス定義部とそれ以外、メソッドの宣言部と実行部が完全に分かれているという状況は見やすくもあり、悪くはないな と感じました。

もうちょっと使いやすいモジュールがあるといいんだけどな・・・。

作ったもの

とりあえず今回は常駐型のプログラムを作りました。ソースコードはこちら。

github.com

0000Studio

また今回はLazarus自体や自分自身、まちづくりエージェント SIDE BEACH CITY.などの知名度向上に向けた試みということで、0000Studioというサービスで作業内容を配信してみました。

0000.studio

stand.fmの収録などもこちらで配信してるので混ざっていますがまあ、参考になればと。

*1:でもAlt+Tabのタスク切り替えでは一つだけ。どうなってるんだろう