特集 2.VSTOソリューションのメリットと実行の仕組みデジタルアドバンテージ 一色政彦2003/12/17 |
|
|
VSTOは、Officeドキュメント(Excelワークブック/Wordドキュメント)をフロントエンドにしたOffice Systemソリューションを構築するための開発ツールだ。前述したように、従来からOffice COMアドインを使うことができたが、Office 2003で追加されたVSTOソリューションを使うことで、Office Systemソリューションをマネージ・コード拡張することができる。ここでは、このマネージ・コード拡張によるメリットをもう少し詳しく見ていくことにしよう。
開発言語におけるメリット
VSTOのメリットの1つは、C#やVB.NETなどの日ごろ使い慣れた開発言語が使用できることだ。しかし、それだけではない。.NET Framework上で開発するので、.NET Frameworkの洗練されたクラス・ライブラリを利用できるという利点もある。これにより、.NET Frameworkで作成されたライブラリをOffice開発にも応用できるようになる。例えば、.NET FrameworkによるWebサービスの利用を簡単に実装したり、自作のクラス・ライブラリを使った特別な演算処理も容易に実装できるだろう。
このように、VSTOを利用すれば習熟しているVB.NETやC#が使えるため、Office開発に気楽に入っていけると考えられる。ただし、VSTOにおけるC#での開発に関しては弱点がある。VSTOは「VBA」用のCOM APIを.NET言語で利用できるようにマネージ・コードでラップしたもの(これを「PIA:Primary Interop Assembly:プライマリ相互運用アセンブリ」と呼ぶ)を使って(インポートして)開発を行うものである。このため、C#は、VBAの言語仕様に近いVB.NETの場合に比べて、コーディングが非常に面倒になる。具体的にいうと、OfficeのCOM APIではメソッドの「デフォルト引数(省略可能なパラメータ)」を多用しており、VBAやVB.NETでは問題なくデフォルト引数が利用できるが、C#ではデフォルト引数の機能がないため、すべてのパラメータに対して「Type.Missing」を設定する必要があるのだ。次のサンプル・コードは、このメソッドのデフォルト引数におけるVB.NETとC#のコードの比較である。
|
|
C#とVB.NETのオプション・パラメータの違い | |
Excelワークブックを開くメソッドを呼び出すときの、C#とVB.NETのパラメータの違い。VB.NETでは、Excelのファイル名だけを指定して、そのほかのパラメータはデフォルト引数を利用して、パラメータを省略できる。一方C#では、デフォルト引数が使えないので、すべてのパラメータに「Type.Missing」を設定する必要がある。このようにC#ではVB.NETよりもコード量が少し増える。 |
このようにVSTOには改善すべき点はあるものの、開発言語や既存ライブラリの再利用で大きなメリットがある。だが、VSTOによるメリットはそれだけではない。それよりももっと大きな「.NET Frameworkテクノロジの利用」というメリットがあるのだ。
.NET Frameworkテクノロジのメリット
.NET Frameworkテクノロジのメリットは大きく2つある。1つが、.NETアセンブリの「自動ダウンロードおよび自動アップデート機能」。もう1つが、.NET Frameworkの「コード・アクセス・セキュリティ(以降、CAS:Code Access Security)によるセキュリティ機能」である。
「自動ダウンロード/自動アップデート」は、VSTOで作成した.NETアセンブリを、自動的にクライアントにインストールしたり、その.NETアセンブリを自動的にアップデートしたりする機能で、ノータッチ・デプロイメントに近い機能である。これにより、クライアントへの更新プログラムの配布の手間が軽減され、TCOを削減することができる。
「CASによるセキュリティ機能」では、VSTOで作成したプログラムの実行を制限することができる。これはOfficeを使って悪意のあるコードが実行されるのを防ぐための機能である。これにより、ユーザーの知らないところで、プログラムが実行されるのを防ぐことができる。
すでに述べたように、これらの.NET Frameworkのテクノロジについては、Windows Server Insiderの記事でも解説している。
VSTOソリューション実行の仕組み
次にVSTOソリューションが実行される仕組み、つまりVSTOを利用して作成した.NETアセンブリが呼び出される仕組みについて見ておこう。この仕組みは.NETアセンブリ側ではなく、Office ドキュメント側にある。VSTOで扱うOfficeドキュメントでは、カスタム・プロパティとして「_AssemblyLocation0」、「_AssemblyName0」という2つのプロパティが用意され、これらを参照することでVSTOソリューションが実行される。なお、「_AssemblyLocation0」には.NETアセンブリのパスが格納され、「_AssemblyName0」にはアセンブリ名が格納される。このVSTOソリューション実行の流れを次の図に示す。
VSTOで作成した.NETアセンブリが呼び出される仕組み | ||||||||||||
VSTOソリューションが実行されるときの内部動作。 | ||||||||||||
|
VSTOソリューションの実行の流れは次のようになっている。まず、「_AssemblyLocation0」、「_AssemblyName0」の2つのカスタム・プロパティを参照する。これらのプロパティがある場合、VSTOアセンブリ・ローダ(otkloadr.dll。“Visual Studio Tools for Office” Assembly Loader)が呼び出される。このアセンブリ・ローダはVSTOで作成された.NETアセンブリのロードを行う。前述の2つのカスタム・プロパティの値(.NETアセンブリのパスと名前)を参照して、.NETアセンブリの場所を特定し、ホスト・アプリケーションのExcel/Wordにロードする。なお、VSTOで作成した.NETアセンブリは1つだけしかロードできないので、注意していただきたい。
INDEX | ||
[特集].NET言語による次世代Officeソリューションの開発 | ||
1.VSTOソリューションとは | ||
2.VSTOソリューションのメリットと実行の仕組み | ||
3.VSTOソリューションの開発 | ||
4.VSTOのコードとプログラミング | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|