IJCADのアプリケーション開発は.NET APIでやるべき
IJCADのカスタマイズするために、LISP、COM、ObjectGRX、.NET API の 4 つが API が主に使用されています。
ちょっとしたマクロのようなカスタマイズを行うのであれば、LISP や COM も選択肢に入りますが、新しくIJCAD用のアプリケーション開発を始める場合や、AutoCADや他の互換CAD製品からIJCADに乗り換える際にアプリケーションの移植を場合は、元のAPIが何であれ .NET APIを使用して開発を進めるべきです。
まず IJCAD の、各 API についてのメリットとデメリットを簡単に紹介しますが、ここで挙げた内容はあくまで個人的な見解です。
■ LISP(AutoLISP、VisualLISP、DCL)
- メリット
- デメリット
■ COM(ActiveX オートメーション)
- メリット
- 初心者でも扱いやすい VBA で開発を進められる
- 他のCOMを利用したソフトウェアと連携できる
- 例外処理を使用できる
- デメリット
- 大量のデータを扱う場合は処理が遅くなる
- IJCADの64bit版では使えない
- プロジェクトファイルはAutoCADや他の互換CADと互換性が無い
■ ObjectGRX
- メリット
- デメリット
■ .NET API
- メリット
- 使用する開発言語(C# または VB.NET)の学習コストが比較的低い
- .NET Frameworkが持つ豊富な機能を利用することができる
- IJCADのほぼすべての機能をカスタマイズ可能
- .NET APIを使用したカスタマイズに関するドキュメントが豊富
- 開発環境となるVisualStadioバージョンに依存しなくなる
- デメリット
.NET API のメリットとデメリットは、もう少し掘り下げていきたいと思います。
使用する開発言語(C# または VB.NET)の学習コストが比較的低い
.NET APIで使用する開発言語は C# または VB.NET を使用します。 C# や VB.NET はどちらも、初心者向けの学習参考書や、ネットのドキュメントが多く存在していて、初めてプログラミング言語にさわる方でも取り組みやすい開発環境です。
また VB.NET や C# は業務システム開発や、各種プラットフォーム上のアプリケーション開発にも使用される開発言語なので、決して習得して損のない開発言語です。
NET Frameworkが持つ豊富な機能を利用することができる
コマンド内で表示させるダイアログなどは、.NET Frameworkに含まれるグラフィカルユーザーインターフェイスAPI(Windows Forms)を利用することができ、C# ではさらにWPF(Windows Presentation Foundation)も利用することができます。
他にもジェネリックや LINQ、動的言語ランタイムなど、.NET Framework の機能を活用することができます。
IJCADのほぼすべての機能をカスタマイズ可能
VBA や LISP では IJCAD 上でカスタマイズできる範囲が限定されていていますが、カスタムオブジェクトの定義などを除き、ほぼすべての範囲をカスタマイズ可能です。
ObjectGRX であれば、IJCAD の全ての範囲のカスタマイズが可能になりますが、やはりC++は C# や VB.NET よりも、開発言語としての学習コストや難易度が高いため、IJCAD 自体を拡張するようなカスタマイズでない限りは、.NET API のカバー範囲で十分開発を進めていけます。
.NET APIによるカスタマイズに関するドキュメントが豊富
IJCAD の開発者向けのドキュメントはまだまだ不足していますが、それでも VBA や LISP などの他の開発言語と比べて、.NET API のドキュメントの方が多く用意されています。
また、IJCAD の .NET API は AutoCAD の .NET API と高い互換性をもっている為、AutoCAD 向けにコーディングされたサンプルコードが IJCAD のコーディングの参考になります。
開発環境となる Visual Stadio バージョンに依存しなくなる
アセンブリの開発に必要な .NET Framework のバージョンが4.0と記されていますが、実際には4.0以降のバージョンであれば問題なく開発が行えるます。
その為、.NET Framework 4.0 をサポートした Visual Stadio 2010 以降であれば、どのVisual Stadio のバージョンを使用しても開発を進めることができます。
他の開発言語よりも不具合が目立つ
.NET API によるカスタマイズが IJCAD に導入されたのは IJCAD 2015 からで、比較的新しい開発言語のため、他の開発言語よりも API に不具合が目立つ傾向にあります。
ですが、バージョンのアップデート毎に確実にAPIの品質は良くなっていると思われます。
コーディング次第でメモリリークが発生してしまうリスクがある
.NET API による開発でも、一部のクラスの扱いを間違えるとメモリリーク発生します。
これは、.NET API のクラスは ObjectGRX のクラスををラップして公開している為、CLR(Common Language Runtime)の管理外の部分もあり、一部のクラスは適切に解放処理を行わない場合メモリリークが発生して、Windowsが終了するまでメモリを確保した状態になってしまいます。
コンパイルが必要
VBAやLISPと違い、コーディングが完了したら即実行というわけにはいかず、プロジェクトのビルドを実行してソースコードをコンパイルする必要があります。
設計やコーディングにミスがあり修正を行った場合はその都度コンパイルしなければなりません。
■ 総括
IJCAD の .NET API には不具合が目立つというデメリットがありますが、デメリットが気にならなくなるほどにメリットが多く、これからIJCAD 用のアプリケーションの開発や移植を行う場合は、.NET API を使用するべきです。
LISP は覚えてしまえばちょっとしたことが楽にできますが、やはりエラーチェックがとにかく面倒で、VBA は 64bit 版の IJCAD で使用できない時点で選択する余地は無いです。
※ただし、C++ を習得済み、またはC++を挫折せず習得する自信があるのであれば、ObjectGRX を使用した開発が最適解です。
ただ今後のメンテナンスの事を考えると、引き継がせる相手はそれなりに優秀な人材であることと、否が応でも C++ を叩き込む必要があります。