タイトル【Mac OS 9シリーズ】AppleScriptをIP越しに使うカテゴリーAppleScript, Mac OS 9, Mac OS 9
作成日1999/11/2 15:37:11作成者新居雅行
Mac OS 9では、AppleScriptをインターネット経由で使えるようになった。つまり、AppleEventのやりとりがAppleTalkプロトコルだけでなく、TCP/IPでもできるようになったのである。インターネットを経由して、別のマックで動いているアプリケーションをコントロールできる。そのコントロールプログラムをAppleScriptで記述することが可能となった。実際に、どのようにすればコントロールできるかを紹介しよう。
まず、コントロールされる側のMacintoshでは、基本的な準備として「ファイル共有」コントロールパネルを開きプログラムリンクを開始しておく。そして「TCP/IP接続でプログラムリンクを可能にする」というチェックボックスも入れておく。このとき、このMacintoshが外部からどういうドメイン名で見えるかもウインドウに表示されている。この場合は「eppc://urawa-2hjk14.urawa.cabletv.ne.jp」だが、場合によってはIPアドレス(この場合は「203.180.26.14」)しか参照できないかもしれない。いずれにしても、どちらかの情報は、後から必要になる。
figs/macos9/05/file0001.gif

次に同じく「ファイル共有」コントロールパネルで「利用者&グループ」のタブを選択する。そこで登録ユーザを作成しておくが、表示項目で「共有」を選択し、「プログラムリンク」のチェックボックスを入れておく。この場合は、msykという登録ユーザーに対して、プログラムリンクを許可した。このアカウントで利用する必要がある。
figs/macos9/05/file0002.gif

一方、コントロールをする側の準備は、もちろん、Mac OS 9とTCP/IPの動作は正しく行われるようにしておく必要があるが、それ以上は特に必要がない。たとえば、次の図ようなプログラムを実行すると、ネットワーク越しに別のMac OS 9が動いているマックのFinderをコントロールして、システムフォルダ内にあるファイル一覧を得ることができる。
figs/macos9/05/file0004.gif
(プログラム1)
set targetMac to "eppc://urawa-2hjk14.urawa.cabletv.ne.jp"

tell application "Finder" of machine targetMac
  using terms from application "Finder"
    get files of system folder
  end using terms from
end tell

プログラム1を実行したとき、次のように、接続するMacintoshのアカウントを確認する。ここでは、プログラムリンクを許可したmsykというアカウントで、実際に設定されているパスワードを入力した。このアカウントとパスワードも、キーチェーンで管理することができる。
figs/macos9/05/file0003.gif

AppleScriptのプログラムを見てみよう。まず、ポイントは、machineオブジェクトの指定である。AppleTalkではここにコンピュータ名などを指定していたが、TCP/IP越しにあるマックの場合は、そのマックのドメイン名、あるいはIPアドレスを「eppc://」というプロトコルで参照するのである。そうすれば、たとえば、tell〜end tellの範囲は、ネットワーク先の別のマックをコントロールできる。ここではFinderだが、他に起動しているアプリケーションがあってリモートイベント処理が可能ならそのアプリケーションをコントロールして良い。
次に、using terms from〜end using terms fromという節がある。これはMac OS 9で新しく導入されたコマンドだ。この間に、from以下で指定したアプリケーションの用語を適用する。前のプログラムの場合、tell内部にある「get files of system folder」の処理をさせるのは、ネットワークの向こうのマックで動いているFinderだ。しかしながら、構文チェックの段階ではネットワークアクセスしたくはないとする。その場合、using terms fromでローカルにあるFinderの用語情報を得て、スクリプトのコンパイルができる。using terms fromの利用は必須ではないが、相手のマックと必ずしも接続ができないような状況でもプログラミングをすすめる時などには必要になるだろう。また、接続先のマックやあるいはアプリケーションを変数化したときには、次のようにusing terms fromがないためのトラブルが発生する。
using terms fromの機能を確認するため、たとえば、次のようなプログラムにしたとしよう。

(プログラム2)
set targetMac to "eppc://urawa-2hjk14.urawa.cabletv.ne.jp"

tell application "Finder" of machine targetMac
  get files of system folder
end tell

このプログラム2は構文チェックはOKだが、実行時にfilesでファイルの取得ができないというエラーになる。一方、

(プログラム3)
tell application "Finder" of machine "eppc://urawa-2hjk14.urawa.cabletv.ne.jp"
  get files of system folder
end tell

は正しく機能する。後者のプログラム3が動作するのは、ネットワーク越しに用語情報を取り込んでいるためだと考えられる。前者のプログラム2が機能しないのは、machineの指定が変数であり、構文チェック時にはtellの部分の指定が無視され、Finderの用語情報が正しく適用されないのではないかと思われる。
一方、図で示したプログラム1の場合はusing terms fromによって、構文チェック時にはローカルのFinderの用語情報が正しく適用されるものだと思われる。そして、tell節の適用先が変数により与えられ実行時には正しく指定できているというわけだ。
関連リンク