空談録

世界で5人くらいに役立ちたい

VSTOって何よってお話

Sorry, this article is poem. So you can't use this article for any other article or presentation's slide.
この記事はポエムだからソースに使ったら恥をかいて死ぬんじゃないですかねというあれ

ということでVSTOの本質というかについて私の理解を書いておきます。というのも「VSTOの素晴らしい人」みたいに思われるの死ぬほどいやなのと、実際問題として私はVSTOを何も理解していないことを証明するためです
いやまあ正直なところすごい人じゃないからすごい人みたいに思われるのが嫌なんですけどまあ別問題

Visual Studio Tools for Officeって

次のリンクでご確認ください
https://www.google.co.jp/search?q=visual%20studio%20tools%20for%20office&rct=j

平たく言えば"Officeで利用できるCOMアドインをVisual Studioで開発できるようにするツール"という感じです
(ツールというよりも拡張(プラグイン)に近い気もしますが)

VSTOはOffice開発を.NETで行うための特殊な技術という理解は少し離れる気がします
まあ確かにOffice開発を.NETで出来てますが、VSTOは.NETで開発するための必要条件ではないわけです
超簡単に言えば、VSTOがなくてもVSTOアドインと同等のものは作れます(同じ形ではないですが)
OfficeにCOMアドインとして追加されるDLLであればなんでもいいわけですし
(いくつか参照するdllがあった気もしますが忘れた)
アドインとしての追加も、InstallShieldあたりで対応できます。(レジストリいじったりすればいい)

じゃあVSTOっていらないじゃん!って言うと確かにそうですが、実際やるとよくわからなくて詰みます
http://www.malteahrens.com/#/blog/howto-onenote-dev/Visual StudioOneNoteのアドインを作る方法が乗っていますが、この手順を毎回やってたら大変でしかないわけです
手順的にはまったく同じな複雑な行為をいちいちやるのが面倒だから、自動化して提供するっていうのがVSTOの本質だと考えます
というわけで、VSTOの技術だ!って本当に言えそうな位置は実はプログラマーは書かない位置なわけです

.dll.manifestと.vsto

一度でもVSTOアドインなりをコピーなり配布なりしたことがあればわかりますが、.vstoと.dll.manifestっていうのを作った記憶もないけど入れないと動かないので含めて配布します
この2つってどっちも中身はxmlです
.vstoは使ったことのある人も多そうですがClickOnceです。アドインをインストールしてくれますね
代わって.dll.manifestはそのアドインが必要とするdll、およびエントリポイントなどのアドインの動作を指示するファイルです

この手のファイルは変更するとまあ9割くらい死ぬだけでうれしいとは思わなそうなのでほぼ変えないでしょう
しかしVSTOの目的である"Officeで利用できるCOMアドインの開発"においてはこの2つが不可欠だし、ほとんどのウェイトを占めます
もちろんdll自体の整備もあると思いますが、目に見える形でのVSTOっていうのはこの2つかと

ちなみにこの理論で行くとdllの整備についてもほぼいじられないので、VSTOの技術って開発者はいじらないものになるわけですよ
ThisAddin.Designer.csとかいじる人は別ですが…

というわけでVSTOの本質なんてものを考えていくと".NETのコードをパッケージとして提供して、Officeにつなぐ部分"みたいなイメージかなーって
なんか分かりにくいイメージですがきにしないでください

じゃあコードは?

VSTOがこういうもんだぜーっていう話をしました。じゃあ普段書いているVSTOアドインのコードって何になるんでしょうか
個人的には「Office開発の一つ」という理解です
Office開発?ってなりそうですが、まああれです。Microsoft.Office.Interop.ほげほげを利用してるような開発のことが言いたいです
(OpenXMLも似たようなもんだと思いますが)
というのもVBAとの違いをあまり感じないからです。もちろん言語的な違いはありますが結局はExcelなりを操作するだけです
Wordのアドイン開発のときにもやりましたがVBAからVSTOアドイン向けのコードへの変換は"言語仕様以外は"難しくないです
(VBAがあれなコードを吐いたりして死滅するのを耐えれば問題ない)
よくあるVBC#で同じコードについて並べるのとたいして差はないと考えます

まあ当然VBAVSTOでは微妙に違う部分もあります。しかしこれもCOMアドイン全般で考えられることとして片付くのではないかと思うんですよ

そのためVSTOアドイン開発での落とし穴的なものはCOMアドインとしての宿命かOffice開発では通る道かみたいなところがあるかなーって

えっ? Interop以外の話? その辺はちょっと勘弁してください…

VSTO開発としか言えないのはGlobalsの利用とかリボン周りとかですかねぇ


まあ何が言いたかったわけでもないですが、VSTOのネタといわれても出せないよって言いたいだけです
私は少なくとも触りたくない範囲

ちなみにこの記事何の意味もないので信じ過ぎず
どうせ1か月もしたら私も忘れてそうですしそもそもこの記事の内容にそった発言をしている記憶がないので

ところでWordの背景を変更するアドインにバグがあったのを見かけてしまったのですがどうしましょうか
…まあすぐ直りますけども
今日中に出せればいいな程度

この辺で