Fusion 360 API を使ったスクリプトやアドインの開発では、JavaScript、Python、C++ の 3つの開発言語を選択して、スクリプトとアドインを開発することが出来ます。
どの言語を使っても、基本的に実装出来る内容は同じですが、プログラムを作成する際に利用するテキスト エディタやデバッグの方法、パフォーマンスなどに違いがあります。開発作業にあたっては、それらの違いを把握した上で、どの開発言語を利用するべきか選択することをお勧めします。
JavaScript は Web ブラウザを用いたクライアント アプリケーションの開発で利用される言語です。このため、HTML ファイルと一緒に作成されるのが一般的です。HTML ファイルは、Web ページ作成時にユーザが操作するインタフェースの役割を持たせますが、Fusion 360 では、この HTML ファイルをユーザ インタフェースとして利用することは出来ません、あくまで、拡張子 .js ファイルで定義される JavaScript ファイル本体を利用するのみです。.js ファイルを Fusion 360 にロードして利用することになります。
Fusion 360 には Adobe Systems 社がオープンソース化して公開している Adobe Brackets が同梱されていて、JavaScript プログラムの編集に利用できます。
ただし、Fusion 360 上では、JavaScript で記述されたスクリプトやアドインは外部プロセスで実行されるため、Brackets 上で直接プログラムをデバッグすることができません。代替として、Google Chrome でプログラムのデバッグをおこなえるようになっています。Brackets と Chrome は、Fusion 360 がサポートする Windows と Mac で同じものを利用することが出来ます。
外部プロセスとは、Fusion 360 の実行に使用されているプロセスとは別に、独立したプロセスで実行されることを意味します。この場合、実行に使用されるメモリ領域も独立することになり、かつ、Fusion 360 プロセスと JavaScript 実行プロセスの間でプロセス間通信が発生することになるので、実行スピードが少し遅くなります。
次の動画は、JavaScript スクリプトの作成と、作成されたスケルトン コードの実行手順、および、デバッグの様子です。アドインの場合も、原則、同じ手順になります。
Python は汎用プログラミング言語として開発された言語ですが、Web 開発で利用されることも多いようです。特徴として、プログラムの構造自体を簡素化できるよう、インデントを使った構造でスコープを定義できる点を上げることができます。
一般的なプログラミング言語では、1つの処理をプログラムを記述するために、記述スタイルの多様な書き方が可能ですが、Python の場合は、インデントをプログラミング構造の定義に組み込んでいるので、誰がコードを記述して、ほぼ同じになるように工夫されています。
Fusion 360 上では、Python プログラムは内部プロセスで動作されることになります。このため、Fusion 360 に同梱されているオープン ソースの Spyder を使って、プログラム編集とデバッグの両方の作業をおこなうことが出来ます。Spyder は、JavaScript 利用時と同様に、Windows と Mac で利用することが出来ます。
内部プロセスとは、実行時に利用されるプロセスが同じことを意味します。メモリ空間も共有されてプロセス間通信のオーバーヘッドも発生しないため、高速に Python プログラムを実行することが可能です。
次の動画は、Python スクリプトの作成、スケルトン コードの実行、デバッグの様子です。アドインの場合も、原則、同じ手順になります。
C++ 言語は、さまざまな場面で広く利用されている開発言語です。 この C++ を利用して、Fusion 360 のスクリプトやアドインを開発することが出来ます。
JavaScript や Python を使用する場合と異なり、Fusion 360 で C++ を使用する場合には、オープンソースで利用可能なプログラム 編集用のテキスト エディタが同梱されていない点に注意してください。
また、C++ は、コンパイラ言語であるため、記述したプログラムをそのまま実行するのではなく、一旦、コンパイルして実行する必要があります。Windows と Mac では、コンパイルや実行環境のアーキテクチャが全く異なるため、プラットフォーム毎にプログラム編集やデバッグに利用するツールを変える必要があります。具体的には、Windows 上では、Micsoroft 社の Visual Studio、Mac 上では Apple 社の Xcode になります。
C++ でプログラムしたスクリプトやアドインを Fusion 360 で実行させるため、前述のツールでコンパイルしてダイナミック リンク ライブラリにします(Windows では dll ファイル、Mac では dylib ファイル)。ダイナミック リンク ライブラリは、当然、Fusion 360 と同じ内部プロセスで動作します。コンパイルしていることもあり、同じ内部プロセスで実行する Python プログラムよりも高速に実行することができます。
次の動画は、C++ スクリプトの作成、実行とデバッグの様子です(Windows)。アドインの場合も、原則、同じ手順になります。
実行パフォーマンスの差
ここまでの説明で、選択する開発言語によって実行プロセスに違いが存在することをご理解いただけたと思います。ここでは、具体的な実行パフォーマンスの差を収録していますので、次の動画をご確認ください。ここでは、Fusion 360 に含まれている SpurGear スクリプトサンプルで比較しています。
プログラム自体の長さや処理内容にもよりますが、この程度のコードだと、体感的にほとんど差を感じません。厳密には、C++ → Python → JavaScript の順で C++ が最も高速なはずです。
ソースコードの隠蔽
作成したスクリプトやアドインを他のユーザに利用してもらうことを考えると、場合によって、問題になるケースがあります。それらを販売するケースです。
JavaScript と Python で作成されたスクリプトとアドインは、配布先でもソースコード(プログラム自体) を参照して編集することが出来てしまいます。社内用途で利用する場合には、ソースコードが見られてしまっても問題ありませんが、有償販売した場合には、プログラム内の処理内容やノウハウを知られて他に流用されてしまう事が考えられます。
このような流出を抑止出来るのが、C++ 言語です。C++ では、必ずソースコードをコンパイル する必要があります。また、コンパイルされた dll ファイル(Windows)や dylib ファイル(Mac)は、バイナリ形式になっているので、記述したプログラムは判読できなくなっています。コンパイル済みの dll ファイルや dylib ファイルのみを配布すれば、プログラム内容を隠蔽したまま、機能を利用することが可能なわけです。
補足:
概要部分の内容が重複することになりますが、過去にも Fusion 360 API に触れたブログ記事をポストしていますので、参考までに、リンクをご案内しておきます。
Fusion 360 の更新と Fusion 360 Ultimate
Fusion 360 のメニューカスタマイズ ~ Quick Access Toolbar
Fusion 360 のメニューカスタマイズ ~ Workspace
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。