ほぼ30年にわたりマクロはMicrosoft Wordのセールスポイントになっている。はじめに、1989年にWordBASICは最小の訓練を受けたタイピストが日常業務を簡易化するためのコンピュータプログラムを書ことができるようにした。
この頃は競合が強かった。Wordと並行してWordStarが存在していて、その後フロントランナーとしてWordPerfectが出てきたが、それぞれ独自のマクロプログラム言語を持っていた。軍事競争があり、ビジネスユーザーの要求が高まるとともに更新が頻繁になった。
その後、90年代後半に面白いことが起こった。Microsoftが(限定的な)OOP言語で、機能とマッチするIDEを持つVisual Basic for Applications (VBA)を開発して、その他の組み込みコンポーネントを開発するだけでなくWordBASICを置き換えた。もともとはすべてのMS Office製品で動作することを意味したが、彼らは技術をライセンスできることに気がついた。やがて多くの企業がVBAサポートを提供することになり、ArcGIS, AutoCAD, SolidWorks, CorelDraw, そしてWordPerfectが採用した。
マクロに対する一般の認識は、ちょうど世紀の変わり目に大きく減少した。いわゆる"マクロウイルス"が大混乱を引き起こしていた。Wordドキュメントの中に隠れていて、ウイルススキャナーによる検出が難しくなっていた。
これに対してMicrosoftはVBAプログラムインターフェイスをロックダウンした。それはまだ強力だったが、安全のためにオフにして、実際にそれを使用できるようにすることが困難なことが判明した。そしてほとんどのウイルススキャナーはEメールで共有されるマクロが含まれるすべてのドキュメントを拒否した。
衰退はしているもののVisual Basic for Applicationsはまだ存在している。最新バージョンは2013でリリースされた7.1で、2010年から64ビットバージョンが提供されている。Webベースのワープロが一般的になってきておりVBAは技術的には行き止まりになっている。90年代のCOM技術をベースとしていて、Webアプリの中でそれをホストする現実的な方法は存在しない。そして一般の人の言語としてJavaScriptがBASICを置き換えており、新しい"VBA for the Web"のようなアイディアは支持されるものには見えない。
.NETとOffice
廃止されたVBAテクノロジーから人々を移動させる試みとして、MicrosoftはVisual Studio Tools for Office (VSTO)も開発した。 開発者ツールとライブラリのセットはOfficeプラグインを開発できるだけでなく、Officeドキュメントを操作するスタンドアロンのアプリケーションも可能である。
少なくてもそこに理論があった。実際にはVSTOは2つの意味で失敗した。
カジュアルプログラマーはVisual Studioをインストールしたがらないし、スクラッチからOfficeプラグインを開発したがらなかった。彼らはマクロを記録して、それを必要に応じて変更したいだけだ。白紙状態からはじめて"それが動作するようになるまで編集"するためには飛躍的なレベルのトレーニングが必要になる。
そしてバージョン管理の問題がある。VBAスタイルのマクロはプレーンテキストで保存される。つまり既存のものだけで、新しいバージョンに存在する機能を使用しなければ、あなたのコードはあらゆるバージョンのOfficeで動作することを意味する。VSTOプラグインは、特定のバージョンのOfficeを対象にすることが期待される。これは社内の誰も古いバージョンを使ってはならないことを意味する。
そういえば、プロの開発者はプラグインに大きな興味を持っていなかった。彼らはサーバーで消費するかOfficeドキュメントを生成したいと考えていた。だがVSTOはCOMオートメーションをベースとしているため、実際に動作するためにWordやExcelのコピーからはじめることになる。Webサイトの各ユーザーのために重いデスクトップアプリケーションのコピーを実行するのは耐えられるものではない。
そしてVBAのように、ブラウザベースのWeb処理にVSTOを使うことは現実的ではない。
Nodeを使ったOfficeアドインの構築
前述の通り、今や一般的な人のプログラミング言語はJavaScriptがであると考えられます。またNodeは、EclipseやVisual Studioのような重いIDEを必要としないアマチュア(とプロを問わず)向け開発プラットフォームになりつつある。そのため、Officeアドインを構築するツールとしてMicrosoftがそれを選択したことは驚くことではない。
はじめるためにはNodeをインストールする必要がある。そして、管理者のコマンドプロンプトで以下の2つのコマンドを実行する:
npm install -g tsd bower gulp yo generator-office
yo office
yeomanジェネレータは、Office製品がサポートしているどんな種類のアドイン(リボンコマンド、タスクペインなど)を望んでいるかを尋ねて、ビルドしたいAngularか純粋なHTML/JavaScriptかを選択する。続けて、アドインをホストするローカルサーバーを起動する。
gulp serve-static
これは一般的なスモークテストのためだが、実際の動作にはWeb上にOfficeを実行する必要がある。空のドキュメントを開いた後、アドインのマニフェストをアップロードして、アクションでそれを参照する。
マニフェストをアップロードしたとき、なぜローカルサーバーを開始する必要があるのか疑問に思うかもしれない。なにが起きているかというと、マニフェストは単にOfficeが実行されている間、ブラウザにあなたのコンピュータからアドインを読み込むことを許可している。実際のところこれは、アドインを変更できる、ブラウザをリフレッシュすると、すぐに効果を見ることができることを意味する。あなたが変更するたびにアドインを再アップロードする必要がなくなる。
これはWebアプリケーションなので、ブラウザに組み込まれているデバッグツールを使ってデバッグすることができる。
アクションを見るためにHarrison Shapley氏によるあらゆるコードエディターとOffice OnlineによるOfficeアドインの構築(Build Office Add-ins with Any Code Editor and Office Online)を見て欲しい。