| ▲ | マックと違ってWindowsのスクリプティング環境は一貫性がない。Visual Basicの次のバージョンである4.0が定着するまでは、やれExcelはVBA、AccessはAccess Basicと方言が乱立しそう。アップルが標準化したAppleScriptに一日の長がある。 |
|
|
| ▲ | だがマックでもWindowsでも、実際に何かやろうとした途端に壁にぶち当たる。マニュアル情報が乏しい、解説書も少ない,相談できる人がいないの三重苦。 |
連載[11-1] Visual Basicと対決〜システム構造編
|
《 AUTOEXEC.BATでは満足できない
》
|
|
|
?
|
前回は、ExcelのVBA(Visual Basic for Applications)を使ったアプリケーションの自動処理を拝見しましたが、Windowsもなかなかやるもんですね。Windowsの世界でも、こうした自動化のニーズがあるからVBAなんてものが生まれてきたんでしょうけど。 |
|
先生
|
ニーズはマックより多いんじゃないかい。もともとDOSの世界には「バッチ・ファイル」なんていう自動化の仕組みがあったくらいだからね。 |
|
?
|
バッチ・ファイルって言うと、「AUTOEXEC.BAT」とかのことですか。なるほど、そう考えるとDOSの世界はアプリケーションの自動化においてはマックより進んでいたことになりますね。 |
|
先生
|
まぁ、確かにかつてのマックにはバッチ・ファイルのような自動化システムはなかった。だがバッチ・ファイルは、AppleScriptのようなスクリプティング環境とはまったく違うんだ。コマンド・インタプリター(COMMAND.COM)というソフトに対するコマンドの羅列を、単にファイルに保存して実行するだけのものだからね。要するに手でコマンドをタイプする代わりに、ファイルに書いておくようなもんだ。DOSに限らず、汎用機のバッチ処理とかUNIXのShellスクリプトも同じだけれどね。まぁ、どれも古典的なアプリケーション自動化の仕組みだな。 |
|
?
|
今とは全然違う世界ですね。 |
|
先生
|
当時は「オブジェクト指向」なんてほんのひと握りの人達だけの世界だったからね。けど今は全く違う。Windowsになるとやれボタンだウインドウだと環境がグラフィカルなうえ、アプリケーションが複数同時に動いて非常に複雑な処理を行うから、DOS環境のバッチ処理だけでは対応できないよね。つまり、DOSの世界もアプリケーションの細かいコントロールの必要に迫られたというわけだ。 |
|
?
|
はい。まさにごもっともって感じですネ。 |
|
《 マック自動化の秘密「AppleEvent」とは
》
|
|
|
先生
|
マックでは「AppleEvent」という仕組みでソフトの自動化を図った。そして生まれたのがAppleScriptだ。マックはもともとイベント駆動型だったので、AppleEventによる自動化はアプリケーションのメーカーにとってかなり取り込みやすいものだったと思うよ。 |
|
?
|
イベント駆動型? |
|
先生
|
イベントとは、マウスのクリックやキーボードのタイプなど、アプリケーションが処理すべき「出来事」のことだ。マックのアプリケーションは常にイベントを監視して、起きたイベントに従って次の処理を決めるというプログラミング方法で作成される。AppleEventとはこのイベントを拡張したもので、マウスやキーの代わりに「set data」とか「open」とかの命令がシステムから送られてくるんだ(図1)。 |
|
図1 マックにおけるアプリケーション自動制御の仕組み
![]() |
|
|
?
|
つまり、スクリプタブルなアプリケーションは、マウスやキーのほかにAppleScriptの命令も四六時中監視していて、何か受け取ったらそれに沿って処理を行うと。 |
|
先生
|
そう。スクリプト編集プログラムでAppleScriptを実行すると、システムがそれをAppleEventに変換して、口を開けてイベントを待っているアプリケーションにそいつを送る。これがAppleScriptによるアプリケーション自動化の仕組みさ。 |
|
?
|
その仕組みはアップルが作ったんですか。 |
|
先生
|
そうだよ。AppleEventという仕組みをシステムの標準機能にしたことで、多くのアプリケーション・メーカーがかなり容易にソフトの自動化に対応できたといっていいだろうね。これからはもっと勢いづくんじゃないかな。 |
|
《 自動化できるのはOLEオートメーション・サーバー
》
|
|||||||||||||||||||
|
?
|
で、VBAの方は? | ||||||||||||||||||
|
先生
|
Windowsの機能で「OLE2」というのがある。君も聞いたことがあるだろ。 | ||||||||||||||||||
|
?
|
はい。「オーレ!」と読むことだって知ってますよ。 | ||||||||||||||||||
|
先生
|
これは、名前だけは超有名になってはいるんだが、今のところ一般のディベロッパーやユーザーにとっては今ひとつ実感に欠けているみたいだね。Oracleをはじめ一部の大手のソフト・メーカーの中にはかなり積極的に対応しているところも出てきてはいるが、まだ対応アプリケーションも少ないしね。 | ||||||||||||||||||
|
?
|
で、そのOLE2がどうVBAと関係するんですか。 | ||||||||||||||||||
|
先生
|
先月もちょっと触れたが、Windowsでのスクリプティングは、例のOLE2の機能の一部である「OLEオートメーション」という仕組みを利用するんだ。OLEオートメーションはWindowsアプリケーション間の通信プロトコルとして定められたシステムだ。これに対応したアプリケーションは,そのアプリケーションが持つオブジェクトの情報をWindowsのシステムに登録することで,互いにそれぞれのオブジェクトにアクセスできるようになっている。 | ||||||||||||||||||
|
?
|
「OLE対応」ではなく「OLEオートメーション対応」でないと、VBAで自動制御できないわけですね。 | ||||||||||||||||||
|
先生
|
そうだね。だが今の時点でOLEオートメーションをサポートしている有名なアプリケーションは、先月も言ったかも知れないがまだ少ない。それにだね、「OLEオートメーション対応」と言っても「クライアント」か「サーバー」かという問題がある。 | ||||||||||||||||||
|
?
|
何ですか、そのデータベースみたいな用語は。 | ||||||||||||||||||
|
先生
|
クライアント/サーバー型データベースと紛らわしいかな。ほかのアプリケーションを呼び出す方がクライアントで、呼ばれる方がサーバー、ってとこかな。Visual Basicはもちろんだが、ExcelのVBAやAccessに付属するAccess Basicなどからコントロールできるアプリケーションが「OLEサーバー」だ。そしてスクリプトを書く側のAccessやExcelなどは「OLEクライアント」ってわけだ。 | ||||||||||||||||||
|
?
|
マックで言えば、スクリプタブルなアプリケーションがサーバーで、スクリプト編集プログラムがクライアントですね。 | ||||||||||||||||||
|
先生
|
そうそう。何だか簡単な話でもWindowsだとややこしくなっちゃうなぁ。 | ||||||||||||||||||
|
?
|
ユーザー文化とプログラマー文化の違いを感じますね。 | ||||||||||||||||||
|
先生
|
だから「OLEオートメーション対応」といってもサーバーかクライアントかが1つのチェック・ポイントだ。今は表1のようなアプリケーションがあるよ。 | ||||||||||||||||||
|
表1 OLEオートメーションのサーバーとクライアント
|
|||||||||||||||||||
|
《 ExcelのVBA、アプリから独立したAppleScript
》
|
|
|
?
|
VBAはAppleScriptに相当するスクリプト言語なのでしょうか。 |
|
先生
|
正確にはそうではないんだ。むしろ、近々出てくる「Visual Basic4.0」(VB4、ブイビーフォー)がAppleScriptに相当するだろう。 |
|
?
|
VBAとVB4はどこが違うんですか。 |
|
先生
|
VB4は「Visual Basic」(VB)という開発ツールの最新版だ。言語と製品名が同じなんでまぎらわしいけどね。以前はVBとVBAの文法は多少違っていたんだが、VB4の文法はVBAの仕様になる。ところでVBって見たことあるかい? |
|
?
|
実はあんまり知らないんです。 |
|
先生
|
当連載第9回で紹介した「FaceSpan」みたいなアプリケーション開発ツールさ(図2)。ウインドウやボタンなんかを作図ソフトみたいにデザインして、それにスクリプトをくっつける。FaceSpanはAppleScriptでスクリプトを書いたけど、VBはもちろん、Visual Basic言語だけどね。 |
|
図2 WindowsNT上で動くVisual Basic 4.0
![]() |
|
|
?
|
一方のVBAは、現時点ではExcelのマクロ言語ですよね。 |
|
先生
|
その通りだ。WordはWord Basic、データベースのAccessはAccess Basic、このほかに「Oracle Power Objects」のOracle Basicなんてのもある。当面はいろんな言語仕様が混在するということになるんじゃないかな。「VBAはWindowsでアプリケーションを自動化するための標準スクリプト言語です」って言い切れるのは、VBAを実装したVB4が出て、ほかのアプリケーションがそれにならって皆同じVBAを装備してからだな。 |
|
?
|
ふーん、要するにマックはAppleScriptが天下統一したけれど、Windowsの世界は戦国時代ってわけですね。 |
|
先生
|
だからExcelのVBAよりVB4がAppleScriptの対抗馬という理由は、スクリプト言語がアプリケーションから独立しているからなんだ。いくら文法が似ていたって、各アプリケーションに依存したローカルなマクロ言語が乱立していたんでは、AppleScriptと比較のしようがない。AppleScriptはアプリケーションに付属するマクロ言語じゃないことに注目してほしいな。 |
AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp