連載[11-2] Visual Basicと対決〜システム構造編
|
《 HyperCardでもAppleScriptが書ける不思議
》
|
|
|
」
|
でもAppleScriptはスクリプト編集プログラムだけでなく、HyperCardやFaceSpanでも書けるじゃないですか。アプリケーションから独立しているとは言い難いのでは? |
|
先生
|
おいおい、HyperCard“でも”使えるのはいいことじゃないかい。何たって、スクリプト編集プログラムで書いたスクリプトをコピー・アンド・ペーストでHyperCardに貼り付けて実行すると、そのまま動くんだからね(図3)。 |
|
図3 スクリプト編集プログラム(左)のAppleScriptをそのままHyperCard(右)で動かせる
![]() |
|
|
」
|
えぇっ、それは知りませんでした。 |
|
先生
|
AppleScriptのコンパイル/実行機能がアプリケーションから独立してシステムの標準的な機能となっているから、こんな芸当ができるんだ。Excelで書いたVBAをWord Basicにそのまま貼り込んで実行できると思うかい? |
|
」
|
?? |
|
先生
|
できないんだよ、これが。システムを開発する者としては、これは非常に困る。複数のアプリケーションを制御して何か業務システムを作るとするだろ。ExcelのVBAでもAccessのAccess Basicでも、ほかのOLEオートメーション・サーバー・アプリケーションを自動制御するスクリプトを作成できるんだが、出来上がったスクリプトはそれぞれのアプリケーションごとに異なる点は強調しておく必要があるな。 |
|
」
|
個々のアプリケーションごとにいちいち違ったスクリプト言語を覚える必要があるってことですか。 |
|
先生
|
全然違うってわけじゃないけどね。基本はVisual Basicだから。 |
|
」
|
つまりVisual Basicをベースにして、個々のアプリケーションごとに多少の方言があるようなことなんですか。 |
|
先生
|
まぁ、そんな風に理解してくれていいだろうね。ただし、方言を覚えるのが嫌だとか言うより、プロが気にする問題は開発環境の不整合だと思うね。今後どう受けとめられるか、非常に興味深いところだな。だいたいがだね、DOSというかWindowsには、簡単に言えばこれまで独立した標準のスクリプト開発環境がなかったんだ。そこでExcelのマクロとしてのVBAに白羽の矢が立った。 |
|
」
|
ということはマックより遅れているということなんですか。 |
|
先生
|
必ずしもそうだとは言い切れない。VBAは一貫性がないものの、本家のVBは飛ぶ鳥を落とす勢いで普及しているからね。先に述べたように、これからはVB4がAppleScriptのようなアプリケーション間連携の役目も担える開発環境のプラットフォームに育っていくだろうな。つまり、現状のExcelのマクロとしてのVBA、そしてVBAの機能を取り込んだVB4という図式だね。 |
|
《 どんなクラスがあるの?...情報不足で両者痛み分け
》
|
|
|
」
|
Basicのアプリケーションごとの方言って、そんなに違うん ですか。 |
|
先生
|
実際にはいずれもVisual Basicのプログラミングに近いから、オブジェクトのメソッド(コマンド)や属性(プロパティー)の記述の仕方はほぼ同じだと思っていいだろう。 |
|
」
|
じゃぁ、AppleScriptと比べてどう違うんでしょう。 |
|
先生
|
そうだねぇ、前にも言ったように、オブジェクトと言いながら実体はイベント駆動をベースにしているAppleScriptに対して、VBAやAccessBasicはもっとオブジェクト指向プログラミングっぽいね。「メソッド」なんて用語からしてプロ向けって雰囲気だな。 |
|
」
|
ほーぅ、イベントとオブジェクトですか。 |
|
先生
|
まぁ、難しい話だからこれは置いておこう。とは言え、VBAやAccess Basicのオブジェクト指向には、スクリプトを書く開発者にとっては必ずしも分かりやすいとは言い難いものがあるね。 |
|
」
|
と、言いますと。 |
|
先生
|
オブジェクトのプロパティーやメソッドに関する参考資料がとても十分とは言えないんだな、これが。AppleScript対応のアプリケーションなら必ず「用語説明」(AppleEvent辞書リソース)を持っているから、どんなコマンドやクラスがあるかをAppleScriptのスクリプト編集プログラムで簡単に見ることができるよね。それに対して、例えばAccess Basicの環境では、ほかのアプリケーションのオブジェクトに関する情報を参照するなんてことは、ほぼ絶望的なんだな。Excelには「オブジェクト・ブラウザ」というツールがあるけど、こうしたものはシステムの標準機能にしてほしいな。 |
|
」
|
でもAppleScriptにしたって、用語説明だけでスクリプトを書くのも結構しんどいですよ。 |
|
先生
|
本連載の第2回目でも訴えたけど、とにかく実際に何かやろうとした時に必要となる具体的な情報がすごく不足している。マニュアル情報が乏しい、解説書もない、相談できる人もいない…これはOLEオートメーションでもAppleScriptも同じだね。かつてAppleScriptが歩んできたイバラの道を、Windowsも歩き始めたってところかな。 |
|
《 OLE、OpenDoc、OSAの三角関係
》
|
|
|
」
|
先生,話が戻りますが、OLEオートメーションについてはまだご説明いただいてないんですが。 |
|
先生
|
そうだった。じゃぁOLE2とOLEオートメーションについて簡単に説明しよう。マック・ユーザーに分かりやすく言うと、「OpenDoc」に当たるものが、OLE2になるだろう。 |
|
」
|
OpenDocと言いますと、1つの書類中に時計やらグラフやらがゴチャゴチャと貼り付けてあるアレですか。 |
|
先生
|
「コンパウンド(複合)ドキュメント」と言うんだがね。要するに、アプリケーションの機能をパーツ(部品)化して、さらに同じ書類中でいろいろなパーツの機能を組み合わせてダイナミックなドキュメントを作る仕組みさ。 |
|
」
|
それをWindowsで実現するのがOLE2なんですか。 |
|
先生
|
仕組みは違うが、やりたいことはOLE2もOpenDocも同じだ。 |
|
」
|
で、VBAとOLE2との関係はどうなっちゃうんでしょうか。 |
|
先生
|
このOLE2にはコンパウンド・ドキュメントのためのプラットフォーム的な機能のほかに、いろいろ新しい仕様が加えられている。その目玉の1つがOLEオートメーションてわけさ。これについては、技術的なことはいろいろ書かれ始めているようだが,実体を一言で言えば、マックのOSA(Open Scripting Architecture)に当たると思っていいだろう。 |
|
《 Windows版OpenDocでもAppleScriptが動く?
》
|
|
|
」
|
OSA? |
|
先生
|
そうさ。AppleScriptの元となっている基本的なアプリケーション自動化のアーキテクチャーだ。 |
|
」
|
さきほどおっしゃったAppleEventがどうのこうのという仕組み ですか。 |
|
先生
|
それはOSAの一部だね。それ以外にも、ソフトを自動化するためにシステムが持つべき仕組みはたくさんあるんだ。例えばAppleScriptは人間が読めるテキストだが、これをどうAppleEventに変換するかとかね。HyperCardでもスクリプト編集プログラムでも同じスクリプトを実行できるのは、こんなところに秘密があるんだよ。またOSAでは、AppleEventをAppleScript以外の言語に対応させることもできる。例えば「UserLand Frontier」はUserTalkという独自言語でスクリプトを書くが、最終的にはAppleScriptと同様,OSAのアーキテクチャーを使ってAppleEventをアプリケーションに送る。要するにOSAは基本的な底辺の仕組みを提供するもので、言語仕様はその上のレイヤーなんだよ。私が見たところ、このOSAと対になっているのがWindowsでのOLEオートメーションだな(図4)。 |
|
図4 アーキテクチャーの相関図。AppleScriptに対応するのがVBA4.0
基本アーキテクチャーはマックのOSAがOLEオートメーションに対応する
|
|
|
」
|
要するにWindowsではOpenDocみたいな仕組みであるOLE2の拡張機能としてOLEオートメーションがあり、それを利用したスクリプト言語がVBAと。マックの場合はOSAが基盤となって、その上にAppleScriptがあるわけですね。 |
|
先生
|
その通り。ところでOpenDocもOSAに対応しているって知っているかい? |
|
」
|
えっ、OpenDocとOSAの関係? OpenDocはOLEみたいなものだから、OLEオートメーションが、…えーと、えーと。 |
|
先生
|
OSAは言語から独立してるって言っただろう。だからもしWindows版OpenDoc用の「AppleScript OSAコンポーネント」を作れば、WindowsでもAppleScriptが動くことになる。まぁ、そんなものが出てくるかどうか知らないが、マックと同じアプリケーション自動化の基本アーキテクチャーをOpenDocも持っているってことさ。 |
AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp