IconAppleScript Runner CGI

AppleScript Runnerに実装されたCGI機能について解説します。AppleScriptをWebクライアントから入力して,インターネットを通じてMacOSで稼働するWebサーバを遠隔制御することができます。利用するクライアントには任意のWebブラウザを利用できるため,クロスプラットホームによる利用も可能です。また,AS Runner 1.45以降はWWWを通じたAppleScriptの配信機能も追加されました。AS Runner 1.6以降はCGIの機能そのものをプラグインで追加することができます。インターフェースとなるHTMLはひな形を利用して自由にカスタマイズすることが可能です。AppleScript Runner 1.6以降を基準に解説しています。

CGIメインメニュー

AS Runner CGIにWebブラウザからアクセスすると,次のようなメインメニューが現れます。利用したい機能をクリックすると次の画面に進みます。環境によってはメニューに表示される項目が異なる場合があります。
Remote Script Runner
AS Runner 1.3以降に実装された,AppleScriptによる遠隔制御のための機能です。
Script Server
AS Runner 1.45以降に実装された,サーバ上のスクリプトをダウンロードするための機能です。
Remote Finder
AS Runner 1.6以降に実装された,サーバ上のファイルを一覧する機能です。
Remote Text Editor
AS Runner 1.6以降に実装された,サーバ上のテキストファイルの編集機能です。HTMLのプレビューもできます。サーバ内の文書のメンテナンスに利用できます。

Remote Script Runner

フォームで入力したAppleScriptをサーバ側で実行します。フォームにはname="script"という項目を含むpost型のフォームを利用します。AS Runner CGIのバージョン1.6以降,scriptというpath_argsが必要となるので,CGIのアドレスの末尾に$scriptを付加して下さい。

<FORM ACTION="AS-Runner.acgi$script" METHOD="post">
<TEXTAREA NAME="script" ROWS=10 COLS=60 WRAP=Virtual></TEXTAREA><BR>
<INPUT NAME="button" TYPE=Reset VALUE="スクリプトをサーバCGIに送信して実行">
</FORM>


頻繁に使用する機能はあらかじめボタンなどにしておくと便利です。実行するためのスクリプトはTYPE=hiddenで記述しておきます。"などのいくつかの記号は実体参照(&quot;)で記述しておきます。

<FORM ACTION="AS-Runner.acgi$script" METHOD="post">
<INPUT TYPE=hidden NAME="script" VALUE="tell application &quot;Finder&quot; to shut down">
<INPUT NAME="button" TYPE=submit VALUE="System shut down">

Script Server

スクリプトオブジェクトを Data Component Objectフォーマットで返す機能がついています。この際,フォームにはget型のフォームを利用します。AS Runner CGIに送信されるフォーム中にname="request"という項目があった場合,そのスクリプトがサーバから配信されます。AS Runner CGIのバージョン1.6以降,serverというpath_argsが必要となるので,CGIのアドレスの末尾に$requestを付加して下さい。
requestという名称の項目に入力されたファイル名のスクリプトが返されるので,ポップアップメニューやボタンを使用したフォームも作成することができます。直接リンクを記述することも可能です。

<A href="AS-Runner.acgi$server?request=HTML&20Conv%20Obj"> HTML Conv Obj </A>
ダウンロードするスクリプト名:
リクエストを受け取ったAS Runner CGIは,スクリプト共有ライブラリ規格に従ってフォルダ内を検索し,該当したスクリプトファイルをData Component Objectフォーマットで返します。MIMEタイプには application/x-AppleScript が使用されます。ダウンロードしたスクリプトは DataCompObjフォーマットになっているのでクライアント側の AS Runnerでそのまま実行することができます。あらかじめWebブラウザにMIMEタイプを登録しておくと,AS Runner CGIが返したスクリプトデータのダウンロードが終了すると同時に,クライアント側のAS Runnerがそのスクリプトを自動的に実行されるようにすることも可能です。また,クライアント側のAS Runnerがバージョン1.6以降であれば,ダイレクトアクセス機能によって,ブラウザのダウンロード機能を使用せずにMac OSのURL Access機能を使用してAS Runnerが直接サーバからのダウンロードを制御して,そのスクリプトを実行することができます。この場合には,サーバのIPアドレスによって実行に制限をかけることも可能です。

MIME Type: application/x-AppleScript


Remote Finder・Remote Text Editor

Remote Finderはサーバ上のディレクトリを一覧することができます。Webサーバで公開されていないボリュームやディレクトリもすべて確認することができます。テキストファイルについてはそのままRemote Editorで再編集が可能です。

Macintosh HD:

名前種類
Desktop Folder:Folder
お読み下さいText
Appleエクストラ:Folder
アプリケーション:Folder
SimpleTextAPPL/ttxt
テキストファイルはRemote Text Editorで開くことができます。Remote Text EditorはHTMLのプレビュー機能を持ちます。


サーバのセキュリティについて

AS Runner CGIを用いると,AppleScriptで行うことのできるすべての作業をインターネット経由でサーバに対して命令することができます。そのため,AS Runner CGIの利用にあたっては,Webサーバソフトウエアの側でRealmなどの機能を使用して,ゲストがCGIにアクセスできないようにするなどの対策を施すべきです。アクセス制限のかけ方についてはお手元のWebサーバの取り扱い説明書をご覧下さい。
危険なAppleScriptの例としては,システムを終了させるもの,ファイルを書き換えるものなどが考えられます。
AS Runner CGIは,コンパイル済みAppleScriptの配信を行うCGI機能は有効にしたまま,遠隔制御に関するCGIを無効にすることができます。パッケージに同梱される設定アシスタントのサーバモードを確認して下さい。

クライアントのセキュリティについて

お使いのブラウザやインターネットコントロールパネルまたはInternetConfigのファイルヘルパーの設定において,application/x-AppleScriptのファイルをダウンロード後に自動的にAS Runnerで開くように設定しておくと,AS Runner CGIのScript Serverから提供されるスクリプトをただちに自動的に実行されるようにしておくことができます。この場合,セキュリティ上の問題を生じる可能性があるのでご注意下さい。

プラグインによる拡張

AS Runner CGIの機能はプラグインによって拡張することができます。コンパイル済みスクリプトをCGI Plug-insフォルダに入れ,path_argsを利用して実行させることができます。例えば,CGI Plug-insフォルダ内のsampleというスクリプトは,AS-Runner.acgi$sampleというアドレスにアクセスすることで実行され,結果が画面に表示されます。
スクリプト共有ライブラリ規格の以下のルーチンを組み込んでおくと,AS Runner CGIのメインメニューに反映されます。
returnName()
スクリプトオブジェクトの名称を文字列で返す。
returnVer()
バージョン番号を演算可能な実数で返す。
returnInfo()
そのスクリプトの簡単な機能を説明する文字列を返す。
returnCR()
著作権表示の文字列を返す。
run
実行されるべきスクリプトが定義されるハンドラ。フォームデータ(post_argsまたはhttp_search_args)がCGIに与えられた場合,ダイレクトパラメータとしてスクリプトとして渡されます。
スクリプト共有ライブラリ規格
on returnName()
    return \"Sample Plug-in\"
end returnName
on returnVer()
    return 1.0
end returnVer
on returnInfo()
    return \"Plug-in sample for AppleScript Runner CGI ver.1.6 or later.\"
end returnInfo
on returnCR()
    return \"\"
end returnCR
property msg : false
on run http_search_args --http_search_argsまたはpost_argsのみが渡されます
    if msg is false then --ユーザー側で実行される
        display dialog msg
    else --CGIで実行される
        if http_search_args is me then
            return "<FORM method=\"get\" action=\"<!--CGI item=File-->$sample\" enctype=\"text/plain;charset='Shift_JIS'\">
<INPUT NAME=\"request\" TYPE=Text>
<INPUT NAME=\"button\" TYPE=Submit VALUE=\"Get\">
</FORM>"
        else
            set AppleScript's text item delimiters to "&"
            set http_search_args to text items of http_search_args
            repeat with i in http_search_args
                set AppleScript's text item delimiters to "="
                if text item 1 of i is "request" then set msg to decodeURLStr(text item 2 of i)
            end repeat
            return me --自分自身をエージェントとして返します
        end if
    end if
end run
テキストデリミタはCGIが元に戻すので,プラグイン側で元に戻す必要はありません。プラグインがテキストデータを返すとHTMLひな形に組み込んでクライアント側に返されますので,httpヘッダやHTMLのページレイアウトを考慮する必要がありません。後述のHTMLひな形のためのタグも記述することができます。テキスト以外のデータを返すとData Component Objectフォーマットで返されます。プラグインはAS Runner CGIの持つルーチン(loadObjなど)を使用できます。

AS Runnerおよび CyberHandlerObjのルーチン一覧

このCGIに出荷時から組み込まれているCGI機能のほとんどはプラグインで実現されており,プラグインを専用のCGI Plug-insフォルダから取り除くことで機能を制限することができます。ただし,付属のネットワークインストーラは不足している自動的にプラグインを補うようになっていますので,CGI Plug-insフォルダをカスタマイズする際にはネットワークインストーラの実行後にCGI Plug-insフォルダの内容を再確認して下さい。
プラグインは通常のコンパイル済みスクリプトの他,DataCompObjフォーマットのコンパイル済みスクリプトも使用できます。DataCompObjフォーマットのコンパイル済みスクリプトは AS Compilerによって作成することができます。プラグインのファイルタイプは任意です。

結果の表示および保存

実行したAppleScriptの結果は,できる限りテキストに変換されてHTMLとしてブラウザの画面に表示されます。しかし,スクリプトを実行した結果がレコードやスクリプトなどのテキストに変換できないデータの場合には Data Component Objectを用いてバイナリデータとして返されます。これを逆に利用して,テキスト(バイナリデータ)や整数などの任意のデータを再利用可能なバイナリデータとして受け取る方法があります。それは,
return {theResult:theResult}
などのように,結果をレコードで返すようにスクリプトを入力することです。これにより,「結果」は必ず Data Component Objectフォーマットで返されるようになります。MIMEタイプには application/data-component-object が指定されますので,ブラウザの機能を利用して保存したり指定したアプリケーションで開くことが可能です。保存したデータは Data Component Objectを利用してAppleScriptで開くことが可能です。結果としてスクリプトオブジェクトが返された場合,MIMEタイプとして application/x-AppleScriptというMIMEタイプで返されます。これをヘルパーの設定によりクライアント側のAS Runnerで実行されるようにしておくと,サーバとクライアントの間でAppleScriptによる連携を行うことができます。

HTML Conv Objectのサポート

このスクリプトはHTML出力のエンジンとしてスクリプト共有ライブラリHTML Conv Objectを使用しています。これによりスクリプトアプリケーション本体を変更することなくHTML Conv Objectのアップデートのみで出力するHTMLを最新のものにすることができます。このスクリプトはHTML Conv Objectの次のような機能を利用することができます。

ただし,プラグインは独自にHTML Conv Objectに対応するか HTML Conv Objに対応したHTMLひな形を使用しない限り,上記の機能を利用できません。HTML Conv Objectについての詳しい情報は以下のページを参照して下さい。

HTMLひな形のサポート

このスクリプトはひな形HTMLをサポートしています。ひな形をテキストエディタで編集することにより,出力するHTMLを高度にカスタマイズし,あなたがお使いの他のページとページレイアウトを揃えることができます。画像やナビゲーションリンクを含むページも自動的に出力することができます。

動作条件

必要条件
以下のファイルは必須ではありませんが,環境やバージョンにより,必要なことがあります。 共有ライブラリはスクリプト本体と同じフォルダに入れることができます。ネットワークインストーラを利用することで複数の共有ライブラリを一度にインストールすることが可能です。
スクリプティング機能追加はスクリプティング機能追加フォルダに入れて下さい。

高速化のためのヒント

スクリプティング機能追加Tanaka's osaxをインストールするとCGIの処理に不可欠なURL文字列の取り扱いが大幅に速くなります。
スクリプト共有ライブラリはAR Runner本体と同じフォルダの中にあるものが優先的に読み込まれるので,使用する全ての共有ライブラリをAS Runnerのフォルダに入れると処理が全体的に速くなります。
MacOS 8.5.1以降はAppleScriptがPowerPCネイティブになりますので,処理が速くなります。
MacOSは一番手前のアプリケーションに多くのCPUパワーが配分されます。そのためAS RunnerはCGI機能が呼び出されると自動的に一番手前に切り替わります。このままですと他のアプリケーションの処理が遅いままなので,AS RunnerはCGI処理を行わないときは自動的にバックグラウンドにまわります。この処理の過程で仮想メモリの再構成やウインドウの再描画が発生してシステム全体の処理速度が落ちることがあります。これを避けるために,必要のないFinderのウインドウは閉じておき,不必要なアプリケーションは終了させておきましょう。
AS Runnerには処理の終了後に自動的に終了する機能が付いていますが,AS Runnerの起動と終了は処理が遅いので,AS Runnerは起動させたままの方がいいでしょう。

コンフリクト情報:Jon's Commandsについて

Jon's Commandsをインストールしていると,AS Runnerにおいて "Error -43 (File Not Found)" が発生することがあります。これはJon's Commandsのバグが原因です。この問題は Jon's Commands 2.0.4 において解決されました。

c-open関連ページ
   ダウンロードページへ
   よくある質問のページへ
   エラー番号一覧のページへ
   ライセンス登録に関して
   使用できる表のスタイルと配色の一覧
   スクリプト共有ライブラリ規格


Copyright(C) SUZUKI Kazufumi, All rights reserved.