今回はオートデスクの主要デスクトップ CAD 製品である AutoCAD、Inventor、Revit に焦点を当てて、各 API が利用しているテクノロジを比較してみたいと思います。これらの製品は、歴史の古い順から並べると、AutoCAD → Inventor → Revit となります。API の登場は、各製品が登場した時代背景とも密接にかかわっているので、特に AutoCAD の場合など、これから API を使ってアプリケーションの開発を検討されている場合には、どういったテクノロジを使っているかを知ることで、API 選定の参考になるかと思います。
まず、API のベース テクノロジにどのようなものが存在するのか、簡単なスライドを示します。ここでは、ソフトウェア内実装、C++ ライブラリ、COM、.NET の4 種類が存在することがわかります。
ベース テクノロジにも、歴史があります。パソコン用ソフトウェア用にテクノロジが標準されていなかった20年くらい前、実装はソフトウェア開発ベンダーが独自に開発していて、互いに競い合った時代がありました。その当時の形態が ソフトウェア内機能 の実装形態です。 この方法は、開発環境だけでなく、開発言語も独自に開発されていたため、その利用は製品利用者に限定されてしまい、普及は思うように進みませんでした。
時期をほぼ同じくして、エンジニアリング ワークステーション(UNIX)やパソコン(DOS)の普及に伴ない、大型コンピュータやミニコン用の CAD アプリケーション開発で主流だった FORTRAN から、C 言語や C++言語 が主流になりました。C/C++ 言語は、ANSI によって標準化作業が進んでいたたため、CAD 以外の開発者にも把握しやすい開発言語です。実際には、ソフトウェア毎に SDK という形で C++ ライブラリ を提供して利用する方法がとられました。
その後、Microsoft Windows がビジネスの世界に浸透することで、Microsoft 社のテクノロジが主流になってきました。そして、その頃登場したのが COM(Component Object Model) です。登場当初は、OLE オートメーション と呼ばれていて、その後 ActiveX オートメーションと呼ばれた時期もありました(厳密には少々差がありますが)。COM テクノロジを採用したソフトウェアは、同じテクノロジをベースにして互いの機能をコンポーネントと言う単位で公開、再利用することが可能になったため、Windows 上ではソフトウェアを連携させて動作するソフトウェア/アプリケーションが登場して、利便性や生産性が以前に比べると格段に向上した時期でもあります。
ソフトウェア連携が得意な COM テクノロジは、企業内システムを構築する上で多大な貢献を果たします。ところが、そんな時期に COM の弱点が見出されます。インターネットの登場です。企業内の閉じたネットワークだけでなく、オープンなインターネット環境で簡単、かつ、セキュアに利用できるテクノロジの策定が急務になり、そこで Microsoft 社が登場させたのが .NET です。
次に、それぞれのデスクトップ製品とその API を図式化したスライドをご覧ください。最初は AutoCAD です。
AutoCAD
ご存じのように、オートデスクの設立が AutoCAD の開発・販売を目的としたものであっため、AutoCAD がオートデスク製品の中で最も歴史のある製品となります。最新の AutoCAD 2014 では、5 つの API が用意されていて、 AutoCAD を利用したアプリケーション開発ができます。AutoLISP/Visual LISP の開発用エディタには、Visual LISP エディタが用意されています。また、Microsoft 社からライセンス提供を受けている VBA エディタ環境もダウンロードしてインストールすることで、VBA マクロを開発することもできます。ObjectARX や AutoCAD .NET API をつかった開発作業には、Microsoft 社の Visual Studio を別途用意していただく必要があります。ObjectARX の開発用にのみ、http://www.autodesk.com/objectarx から ObjectARX SDK がダウンロード提供されています。
Inventor
アドオン アプリケーションの他、VBA エディタによるマクロ開発環境も提供しています。リボン インタフェースをカスタマイズしたい場合には、アドオン アプリケーションを開発する必要があります。VBA マクロからのリボン インタフェース カスタマイズはサポートされていません。
Revit
デスクトップ CAD 製品としては比較的新しい製品です。API の実装も、製品の歴史に比べると、最近実装されたものであることがわかります。他の製品と同様にアドオン アプリケーション開発が可能で、Revit SDK が製品に同梱されてます。また、Revit SDK は、http://www.autodesk.com/developrevit からダウンロードすることも出来ます。アドオン アプリケーションの他にも、SharpDevelop と言われるオープンソースの開発環境が組み込まれていて、マクロを開発することも出来ます。
最後に、紹介したオートデスク製品の API が、どのテクノロジを使っているのかお知らせしましょう。次がその答えとなります。
- ソフトウェア内機能
AutoCAD AutoLISP
- C++ ライブラリ
AutoCAD ObjectARX
- COM(Component Object Model)
AutoCAD COM API
Inventor API
- .NET
AutoCAD .NET API
Revit API
テクノロジといった側面で違った視点で見てみると、AutoCAD の歴史が際立つことにもなります。Inventor や Revit は、前者が COM、後者は.NET で選択肢はありませんが、.NET は COM との親和性が高くシームレスに実装可能なので、Inventor アドオンの開発は、Visual Studio を使って .NET 環境で行うことになります。
API による API の拡張
ここまで、テクノロジの視点で主要 CAD 3 製品の API を見てきましたが、最後にそれぞれの拡張性について言及しておきたいと思います。ここで言う拡張性とは、オートデスク製品に用意された標準 API に、利用したい機能が含まれていない場合の拡張性を示します。
AutoCAD の場合、C++ ライブラリとして AutoCAD 本体の開発に用いるクラス ライブラリを一部切り出した ObjectARX 環境を提供しているため、AutoCAD の COM API や .NET API に搭載されていない機能を、COM ラッパー や .NET ラッパーを作成して補うことが出来ます。別の言い方をすれば、ObjectARX でしか実現できない機能をラッパーを介して別の API として公開することで、COM や .NET 環境でも、その機能を利用することが出来るようになります(クラスやメソッド、プロパティを独自に用意できる)。この点では、ObjectARX が持つネイティブな C++ (アンマネージ C++)の柔軟性と強みを活かせます。
一報、最初から COM API や .NET API で用意されている Inventor API や Revit API では、AutoCAD のような拡張は望めません。Inventor API と Revit API で最初から用意されていない機能は、C++ レベルから拡張することは出来ないのです。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。