ASConsole (Active script console) by kanegon 1. 概要 ActiveScript 用インタラクティブシェルです。 特定の言語に依存せず、ActiveScript に対応した複数のスクリプト言語を切り替えて 利用することができます。 現状では JScript、VBScript、Ruby、Perl、Python、PHP が利用可能です。 2. 機能 - 式の評価 - 文の実行 - 複数のスクリプトエンジンの切り替え - 異なるスクリプトエンジン間でのオブジェクトの受け渡し - GUI インタフェース - 複数行入力 - 組込み関数(COM情報表示、16進数変換とか) - Web ライブラリサポート(jQueryなど) - 他 ScriptControl を使用して eval するための簡単な GUI フロントエンドです。キーワー ドの補完などのような言語機能のサポートや連携は行っていないため、特定の言語のみ を使用する場合、各言語の実装元あるいはコミュニティが提供する各言語専用のインタ ラクティブツールのほうがより高機能と考えられます。 このツールは Windows 上で動作する GUI ツールであって、導入が簡単なこと、動作が 軽いことが特徴です。 Windows ユーザがソースコードを記述する際のちょっとした文法確認、動作確認を手軽 に行うことができます。パス名の加工のような文字列操作の動作確認や複雑な正規表現 を記述した際の動作検証の際に特に有用と考えます。 また、スクリプト言語の対話的実行環境としてではなく、履歴付きの単なる関数電卓と しても便利に使うことができます。 3. 動作環境 動作確認済みプラットフォームは以下のものです。 Windows XP professional + IE8 Windows 7 Ultimate + IE8 おそらく、Windows XP 以降、IE8以上であれば動作するものと思われます。 4. インストール/アンインストール 配布のアーカイブファイルを任意のディレクトリに展開してください。 特別な設定は必要ありません。 ツールの起動には展開されたファイル ascon.hta をエクスプローラからダブルクリッ クします。 アンインストールは展開されたファイルをすべて削除してください。 また、ASConsole を起動すると、利用者のドキュメントフォルダ配下に ASConsole の 名前のフォルダを作成し、その下に作業ファイルを格納します。 アンインストール時にはこれらのファイルおよびフォルダも削除してください。 利用者のドキュメントフォルダは OS によって異なります。以下を参考にしてください。 WinXP: C:\Documents and Settings\<利用者名>\My Documents Win7: C:\Users\<利用者名>\Documents 標準で使用可能なスクリプトエンジンは JScript、VBScript の2つです。 他のスクリプトエンジンを使用するためには対応する言語の ActiveScript に対応した パッケージを別途導入してください。 以下、対応している(動作確認に使用した)パッケージを示します。 同じ言語でも開発元、パッケージが異なると使用できない可能性が高いです。 - Ruby [1.8.7] ActiveScriptRuby(1.8.7-p330 --with-winsock2 --enable-tcltk-stub) Microsoft Installer Package (1.8.7.36) ActiveRuby.msi http://www.artonx.org/data/asr/ [1.9.2] Ruby-1.9.2-p136 Microsoft Installter Package(2010-12-25) ruby-1.9.2.msi http://www.artonx.org/data/asr/ ※ActiveScriptRuby では、1.8.7 と 1.9.x の両方のバージョンを同時にインストー ルできますが、インストールする順番に注意してください。 当アプリケーションではデフォルトでは後からインストールされたもののみを認 識します。 先にインストールしたバージョン、または両方のバージョンを同時に有効にする にはスクリプトの修正が必要になります。 詳細は「9. 使用上の注意点、制限、不具合、覚書、余談など」の該当部分を参 照してください。 - Perl ActivePerl 5.10 Windows(x86) ActivePerl-5.10.0.1004-MSWin32-x86-287188.msi http://www.activestate.com/activeperl/ - Python ActivePython 2.6 Windows(x86) ActivePython-2.6.1.1-win32-x86.msi http://www.activestate.com/activepython/ - PHP PHP 5.2.6 installer php-5.2.6-win32-installer.msi http://php.mirror.camelnetwork.com/releases/ 1) エクスプローラから msi パッケージをダブルクリックしてインストールします。 インストールダイアログの途中、拡張パッケージを選択する箇所で activescript、mbstring を選択します。 2) インストールが完了したら、念のため Windows を再起動し、コマンドプロンプ トを開きます。コマンドプロンプトで以下のコマンドを入力し、ActiveScript を有効化します。 > cd \ext > regsvr32 php5activescript.dll 3) インストールフォルダにある php.ini を php-activescript.ini の名前で C:\Windows\system32 にコピーします。 (マニュアルの記載では php.ini は実行ファイルのあるフォルダに配置するら しいが、ASConsole の場合、C:\Windows\system32\mshta.exe が実行ファイル となるため。(たぶん)) PHP で日本語を扱うために、mbstring を有効化する必要があり、そのために コピーした php-activescript.ini を修正する必要があります。 設定方法は開発対象や個人の環境によって異なるため、マニュアル等で確認し てください。 一応、作者の環境では、以下のように4行ほど追加することで、mbstring モジュー ルで定義されるマルチバイト系の文字列処理関数(mb_xxxx)が参照できているよ うです。 [PHP] extension=php_mbstring.dll [mbstring] mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_output = SJIS OS が Vista/7 の場合、上記 1)、2) の両方で、明に管理者権限で実行しないと登 録が失敗する可能性があるようです。 activescript, mbstring の選択を行わずインストールした場合、 php5activescript.dll, php_mbstring.dll が ext フォルダにコピーされません。 その場合、別途配布されている pecl-5.2.6-Win32.zip のパッケージから導入して ください。 なお、PHP の Windows インストールパッケージの現在の最新版は 5.2.9-1 が公開 されています。 しかし、ActiveScript を使用するために必要な php5activescript.dll が最新パッ ケージに含まれないため、ここでは 5.2.6 で動作確認を行っています。 後述する COM 情報取得の組込み関数を使用する場合、ActiveScriptRuby のインストー ルが前提となります。 5. 基本操作 5.1 スクリプト式評価 JScript を例にとり、式を評価してその結果を表示する手順を示します。 以下に例を示します。 > a = 10 10 > b = 20 20 > a * b 200 先頭に '>' のついている行がユーザの入力を表しています。 入力した行を逐次解釈し、その結果を表示します。 逐次解釈は内部で eval() を呼んでいるだけなので、可能なことは各言語の eval の機 能に依存します。 5.2 システムコマンド 入力文字列の先頭に # を付加すると、システムコマンドとして扱われます。 システムコマンドには以下のものがあります。 #exit #quit #q アプリケーションを終了します。 #version #ver バージョンを表示します。 #clear コンソールを初期化します。 #changeScript #cs スクリプトエンジンを切り替えます。 scriptname は ScriptControl 作成時に指定したスクリプト名、またはそのエイリ アスを指定します。 以下の名前が指定可能です。 JScript, jscript, js VBScript, vbscript, vbs RubyScript, rubyscript, ruby PerlScript, perlscript, perl Python, python, py PHPScript, phpscript, php なお、アプリケーション初回起動時には JScript が有効になっています。 #! Windows アプリケーションを起動します。 #!notepad などと指定することでメモ帳が起動します。 #history ## 入力テキストの履歴の一覧の表示、または、特定の入力履歴の再実行を行います。 #alias エイリアスを定義します。 入力した文字列がエイリアス定義のキーワードに一致した場合、最初にエイリアス 置換を行い、次にスクリプトの式または文の評価を行います。 例えば、JScript と VBScript を頻繁に切り替えたい場合、 #alias js #changeScript JScript #alias vbs #changeScript VBScript として定義しておくと、"js" または "vbs" の入力のみでスクリプトエンジンの切 り替えを行うことができます。 エイリアス定義を行う場合、キーワードおよびテキストのどちらの文字列も "(ダブ ルクォーテーション)などで囲まないように注意してください。ダブルクォーテー ションは正しく認識できません。 5.3 アプリケーションの操作 ユーザ入力欄に評価式、あるいは、システムコマンドを入力して、[実行]ボタンをク リックします。 [実行]ボタンの代わりのキーボードのエンターキーも使用できます。 ユーザ入力欄にフォーカスがあるとき、[↑]または[↓]キーで過去の入力テキストの履 歴を呼び出すことができます。 [複数行]ボタンをクリックすると、複数行入力用のダイアログが表示されます。 複数行入力用のダイアログで過去の入力テキストを呼び出すには [Ctrl]+[↑] または [Ctrl]+[↓] キーを使用してください。 6. 組込み機能 便利機能としていくつかの組込み関数などを提供しています。 すべてのスクリプトから使えるものと、一部のスクリプトでのみ使える関数があります。 6.1 スクリプト間のオブジェクトの受け渡し スクリプト間でオブジェクトの受け渡しを行うための組込み関数です。 直接他のスクリプトに渡すのではなく、共有領域を経由した間接的な受け渡しとなります。 - オブジェクトを共通領域への退避 exportVariable(<名前>, <オブジェクト>) - 共通領域からのオブジェクト取得 importVariable(<名前>) 6.2 COM 情報取得 COM 情報取得のため、以下の組込み関数を提供します。 この機能を使用するためには ActiveScriptRuby が必要です。 comInfo(obj [,name]) # インタフェース名の情報 # 名前が指定されている場合はメソッドまたはプロパティの情報 # (VBScript ではパラメタの省略ができないため、obj のみを # パラメタとする場合に、name として Null を指定のこと) comMethods(obj) # そのオブジェクトが持つメソッド一覧 comProperties(obj) # そのオブジェクトが持つプロパティ一覧 JScript を例にとり、実際の使い方を示します。 IE の制御そのものは通常の JavaScript の機能です。 > ie = new ActiveXObject('InternetExplorer.Application') Microsoft Internet Explorer > ie.visible = true true > ie.gohome() undefined > comInfo(ie) [guid({D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}), helpstring("Web Browser Interface for IE4.")] Interface IWebBrowser2 > comInfo(ie.document) [guid({3050F55F-98B5-11CF-BB82-00AA00BDCE0B}), helpstring("")] Dispatch DispHTMLDocument > comMethods(ie) QueryInterface(), AddRef(), Release(), GetTypeInfoCount(), GetTypeInfo(), GetIDsOfNames(), Invoke(), GoBack(), GoForward(), GoHome(), GoSearch(), Navigate(), Refresh(), Refresh2(), Stop(), Quit(), ClientToWindow(), PutProperty(), GetProperty(), Navigate2(), QueryStatusWB(), ExecWB(), ShowBrowserBar(), GetTypeInfoCount(), GetTypeInfo(), GetIDsOfNames(), Invoke() > comProperties(ie) Application, Parent, Container, Document, TopLevelContainer, Type, Left, Left=, Top, Top=, Width, Width=, Height, Height=, LocationName, LocationURL, Busy, Name, HWND, FullName, Path, Visible, Visible=, StatusBar, StatusBar=, StatusText, StatusText=, ToolBar, ToolBar=, MenuBar, MenuBar=, FullScreen, FullScreen=, ReadyState, Offline, Offline=, Silent, Silent=, RegisterAsBrowser, RegisterAsBrowser=, RegisterAsDropTarget, RegisterAsDropTarget=, TheaterMode, TheaterMode=, AddressBar, AddressBar=, Resizable, Resizable= > comInfo(ie, "navigate") [id(0x00000068), method, helpstring("Navigates to a URL or file.")] VOID Navigate( [in] BSTR URL, [in, optional] VARIANT Flags, [in, optional] VARIANT TargetFrameName, [in, optional] VARIANT PostData, [in, optional] VARIANT Headers) 6.3 n進数変換 電卓用途としての便利機能です。スクリプトの機能とはあまり関係ありません。 以下の関数は JScript でのみ提供されます bin([n, ...]]) // 2進数変換 0b[01]+ oct([n, ...]]) // 8進数変換 0[0-7]* dec([n, ...]]) // 10進数変換 0|([1-9][0-9]*) hex([n, ...]]) // 16進数変換 0x[0-9A-F]+ 使用例: > hex(10, 20, 15*2) 0xA, 0x14, 0x1E > dec() 10, 20, 30 > dec() 10, 20, 30 > oct() 012, 024, 036 > bin() 0b1010, 0b10100, 0b11110 パラメタなしで関数を呼び出すと直前の hex() or dec() or oct() or bin() へのパラ メタを使用して再変換を行います。 2進数の 0bXXX の表記は独自の出力用表現形式です。入力値として記述することはでき ません。 6.4 ブラウザアタッチ Web クライアントのスクリプト言語として JavaScript がよく使用されますが、最近で は JavaScript をそのまま使用することは少なく、jQuery や prototype.js といったラ イブラリを前提とすることが多いようです。 これらのライブラリを利用可能とするため、IE で表示中の web ページにアタッチした り、内部的にダミーのブラウザオブジェクトを生成したりするためのヘルパ関数を提供 します。 ブラウザのアタッチを行うと入力した式をローカル環境の eval() で評価する代わりに、 ブラウザの window.eval() を用いて式を評価するようになります。 以下に jQuery を例とした簡単な使い方の例を説明します。 6.4.1 ローカル環境でライブラリのみを使用する - ライブラリファイルの準備 ライブラリファイル(jquery-1.6.1.js など)を、配布サイト(http://jquery.com/) から取得し、ASConsole フォルダに格納します。 - アタッチ > __attach(null, utils.load("jquery-1.6.1.js")) __attach() の第一パラメタに null を指定すると、実際の web ページの代わりに、 システム内部に不可視のブラウザオブジェクトを1つ作成し、その window オブジェク トにアタッチします。 - 動作確認 > $.fn.jquery 1.6.1 > $.ajax({url:"http://www.google.co.jp/",success:function(data){alert(data);}}) 6.4.2 jQuery を使用した Web ページをアタッチする - ASConsole 内から IE を開く > ie = __createIE() - 表示された IE で、該当ページを開く - 該当ページをアタッチ > __attach(ie.Document) - 動作確認 適当な要素を書き換えてみる > $("body").html("

title

body") 6.4.3 jQuery を使用していない Web ページをアタッチし、jQuery を強制的に挿入する - ASConsole 内から IE を開く > ie = __createIE() - 表示された IE で、該当ページを開く - 該当ページをアタッチし、同時に jQuery を挿入 > __attach(ie.Document, utils.load("jquery-1.6.1.js")) - 動作確認 適当な要素を書き換えてみる > $("body").html("

title

body") 6.4.4 デタッチ アタッチは該当ページ毎に行います。 アタッチをするということは、現在アタッチしているブラウザのページ内で作業してい るイメージであり、ブラウザに強く依存している状態です。 アタッチした状態で該当のブラウザを終了させると、すべての式評価ができなくなって しまいます。 該当ページでの作業が終わったら、必ずデタッチを行ってください。 > __detach() デタッチを行うことで、アタッチ前の状態に環境を戻します。 なお、ブラウザを終了してしまい、すべての式評価ができない状態となった場合、 [ERROR] 462: リモート サーバ マシンが存在しないか、利用できません。 のようなエラーメッセージが表示されます。 このエラーが表示された場合、自動でデタッチが行われますが、万が一、うまくデタッ チされない場合は明示的にデタッチコマンドを入力してください。 すべての式評価ができない状態であっても __detach() コマンドだけは受け付けるよう になっています。 ASConsole 自体を終了すると、すべてのアタッチ状態は完全に初期化されます。 デタッチをせずに、ASConsole を終了させても問題はありません。 7. VBScript/Python における操作 VBScript では式や関数の実行と、代入やサプルーチンの呼び出しを明確に呼び分ける 必要があります。 この区別は先頭の文字で行います。代入などを行うとき、テキストの頭に ']' を付加 して実行してください。 > ]a = 123 # (文の実行)変数 a に 123 を代入 > a # (式の評価)変数 a の内容を表示 123 > a = 123 # (式の評価)変数 a の内容と 123 を比較 (代入ではない) true Python も VBScript とほぼ同じ解釈となります。']' が指定された場合、文の実行と 認識し、eval でなく、exec を使用します。 Python では a=123 のような単一変数への単純代入については、']' なしでも特別に文 として評価する処理を入れています。 これは電卓などの簡易利用に対する利便性のためであって、Python 自身の構文確認な どに使用する場合は混乱の元なので依存しない方がよいかも知れません。 (a,b)= ... とか a[1]= ... など他の書式には対応していません) なお、Perl でも ']' を受け付けます。 Perl の場合は、']' が指定された場合でも指定されない場合と同じように eval() を 行いますが、評価結果のコンソールのへの表示のみを抑止します。 8. スクリプトの呼び出し方法について 入力式の評価は ScriptControl#Run でスクリプト毎のヘルパ関数(execEval)を呼び出 し、ヘルパ関数内で各言語毎の eval を呼び出します。VBScript/Python ではヘルパ関 数内で Eval/eval または Execute/exec を切り替えて、式の評価または文の実行を行 います。 ScriptControl#Eval ではなく、あえてヘルパ関数を使用するのは、スクリプトの例外 を呼び出し元で正しく拾えないスクリプトエンジンがあること、拾えても呼び出し元で はエラー情報を適切に抽出できない可能性があること、直前の結果の記憶などの追加処 理をヘルパ関数で処理するなど、複数の理由によります。 現状では例外を言語間の呼び出しで伝播させず、必ず、呼び出し先のスクリプト内で catch して完結させる方式としています。そもそも言語間にまたがる例外の伝播が可能 かどうかが分かっていないこともあります。呼び出し元には文字列レベルの情報だけを 返します。 ヘルパ関数を経由して eval するのが基本的な使用方法となりますが、それでも ScriptControl#ExecuteStatement が必要となる局面があります。また、 ScriptControl#Eval の挙動を確認したい場合もあると思います。(スクリプトの言語仕 様によりますが、モジュールのインポートや関数定義など eval ではエラーとなる 場合でも ScriptControl#ExecuteStatement で処理できる可能性があります。) そのような場合、評価式の先頭に特定のプレフィクスを付加して実行することで、強制 的に特定の呼び出し方法を選択できます。 プレフィクス 動作 ---------------------------------------------------------------------------- (なし) ScriptControl#Run (ヘルパ関数経由で eval) ] ScriptControl#Run (ヘルパ関数経由で Execute/exec、VBScript/Pythonのみ) ; ScriptControl#ExecuteStatement (直接呼出し) ;; ScriptControl#Eval (直接呼出し) < ScriptControl#AddCode (直接呼出し) スクリプトのテキストを入力とする << ScriptControl#AddCode (直接呼出し) スクリプトのファイル名を入力とする # システムコマンド ---------------------------------------------------------------------------- 9. 使用上の注意点、制限、不具合、覚書、余談など ヘルパ関数内で eval するため、入力式の実行コンテキストが関数内になることに注意 してください。 そのことにとどまらず、スコープや名前空間の考え方が各言語毎に異なりますが、各言 語毎の詳細は作者の理解を超えているため、ソースを見て判断してください。 Ruby では、eval で TOPLEVEL_BINDING を指定しています。 Python では exec で globals() を指定しています。 PHP ではローカル変数の退避/復元によってスコープ問題を回避しています。 JScript/VBScript 以外のスクリプト言語では、標準入出力に対する操作が可能です。 このうち、標準出力、標準エラー出力については出力先を切り替えることで当アプリケー ションの GUI コンソールへの表示をサポートします。 当アプリケーションでは標準入力はサポートしません。標準入力は正常に動作すること はなく、スクリプトエンジンによってはアプリケーションエラーなどの致命的なエラー を引き起こす可能性もあるため、該当機能を使用しないように注意してください。 標準出力の対応は暫定です。特に日本語の扱いについてはまだ不具合の残っている可能 性があります。 PHP では eval 関数の設計が他の言語と異なり、"10+20" のような単純な式を受け付け ません。 ソースに記述するのと同様な文として記述してください。変数内容や式の値を確認する には print 文を使って内容をコンソールに出力してください。従って、上記のような 単純な計算を行う場合でも "print(10+20);" としてください。 ただし、ASConsole では入力を簡素化するための、いくつかの省略記法をサポートしま す。特定の条件で記述を多少簡略化できます。 - 式評価(その1) テキストの先頭が数字であれば全体を単純な数式とみなし、print を補います。 ex) "10*(20+30)" => "print(10*(20*30));" - 式評価(その2) テキスト全体が単一の変数であれば式として評価し、print を補います。 ex) "$itemName" => "print($itemName);" - 組込み関数 p の提供 var_dump の別名としてより短い名前の関数 p を提供します。 ex) "p($a, $b);" => "var_dump($a, $b);" - p のカッコ省略 p でカッコおよびセミコロンを省略可能とします。 ex) "p $a, $b, $c" => "p($a, $b, $c);" 上記省略記法の仕様は暫定です。大幅に変更あるいは削除される可能性があります。 ActiveScriptRuby 1.8.7 と 1.9.x は同時にシステムに登録できますが、ASConsole 起動時には片方のみが有効になります。 両方の Ruby を同時に認識させるためには以下の説明に従い、スクリプトを修正して ください。 (ProgID) スクリプト名 説明 ----------------------------------------------------------------------- RubyScript ActiveScriptRuby の代表名(あとからインストールしたバージョンで上書き) RubyScript.1 ActiveScriptRuby 1.8.7 の個別名 RubyScript.1.9 ActiveScriptRuby 1.9.x の個別名 ActiveScriptRuby をインストールすると、上記名前でスクリプトエンジンが登録され ます。当アプリケーションの初期状態では上記の代表名のみが有効になっており、その 名前でスクリプトエンジンが選択されます。そのため、ASConsole を起動すると、1.8.7 と 1.9.x のうち、後からインストールしたバージョンが自動的に選択されます。 どのバージョンが選択されているかの確認するには定数 RUBY_VERSION を参照してくだ さい。以下に例を示します。 > RUBY_VERSION 1.8.7 両方のバージョンの ActiveScriptRuby をインストールしたシステム上で、その両方の スクリプトエンジンを有効にするためには、scriptmanager.js 内を以下のように修正し ます。(コメントアウトされている箇所のコメントをはずすだけ) ... [RubyScript, ["eval.rb"], "rb"], [RubyScript18, ["eval.rb"], "rb18"], [RubyScript19, ["eval.rb"], "rb19"], ... サフィックスなしの RubyScript は内部的に COM 操作関数が使用します。 少々邪魔ですが有効なままにしておいてください。 ruby で JScript のメソッドに nil を渡しても null と解釈されないようです。 (JScript 側の typeof(value) が "unknown" になる) なお、JScript側から RubyScriptのメソッドを呼んだ場合、null は自動的に nil に変 換されます。 ちなみに、他の言語の COM インタフェースにおける null 表現は以下となります。 (たぶん) ---------------------------------------------------------------------- JScript null VBScript Null RubyScript 1.9.xでは名前から WIN32OLE_VARIANT::Null または WIN32OLE_VARIANT.new(nil, WIN32OLE::VARIANT::VT_NULL) のあたりと推測される(うまく動作してないが) 1.8.7は不明 nil を VT_NULL 扱いしてくれるなら、どちらも問題ないように思える が、少なくとも現状はそのように処理はされないもよう(では内部で nil はどう変換されてるのか?) PerlScript Win32::OLE::Variant->new(VT_NULL) または Variant(VT_NULL) Python None PHPScript NULL ---------------------------------------------------------------------- 何が null かという問題がありますが(VT_NULL or VT_EMPTY or 空のVT_DISPATCHな ど)、ここでは ASConsole のホストであり、言語間連携のハブとなる JScript のメ ソッドをよびだしたときの見え方を基準としています。(インタフェースオブジェク トを JScript で実装している都合のため、JScript から null と見えるものであれ ばよい。) 文字コード、特に日本語の扱いは全体的に作者の理解が不十分です。以下は現状の覚書 になります。 HTA、直接取り込む.jsファイル、スクリプトファイルは UTF-8として扱っています。 たとえ、コメントであっても、Shift_JISで日本語などを記述するとスクリプトの解析 に失敗する可能性があります。 実行時の文字コードについて Ruby 1.8.7 では $KCODE='SJIS' を動的に指定していま す。1.9.xでは eval されるパラメタ文字列を強制的に .force_encoding('Windows-31J') して日本語として認識させています。この対処は完全ではなく、例えば importVariable/exportVariable で渡される情報は正しく認識できない可能性がありま す。対処方法の検討中です。 Python では日本語文字列には u を必ず付加してください。(ex. u"日本語") u をつけておく限り、簡単な日本語処理では問題は発生しないようです。 Perl における文字コードの扱いは正直よく分かっておらず、現状ではシステム側の考 慮はありません。 しかし、単純な日本語文字列を表示するだけであれば特に問題はないようです。 PHP で日本語を表示するとゴミが表示されます。print("日本語"); などとしたとき、 最終的に Unicode に変換されますが、3文字に対し、6文字分のUnicode文字列が生成 されていることが原因のようです(後半3文字分は0x0000)が、実際にどこに問題がある かの切り分けはできていません。PHP で日本語処理を正しく処理するためには利用者の 文字コードの理解と .ini ファイルの適切な環境設定とが欠かせないようです。いまの ところどちらも十分に理解できているとはいえず、対応に抜けがある可能性があります。 まれに表示が固まってしまうことがあります。(アプリ自体がハングするわけではない) 文字化け等でコンソール領域に特殊な文字を表示させた場合に問題が発生する可能性が 高いようです。そのような場合は #clear コマンドでコンソールを初期化してみてくだ さい。それでも解決しない場合、アプリケーションを終了させてください。この問題は 調査中です。 comInfo(obj, name) でプロパティ情報を取得するとき、PROPERTYPUT の型が表示さ れていません。これは現状の仕様です。(ruby の win32ole を使って PROPERTYPUT の型情報を取得する方法が分からないため) JScript でインスタンスメソッドを作成し、Ruby からオブジェクト経由でそのメソッ ドを呼び出すとき、パラメタがあれば正しくメソッド呼び出しを行えますが、パラメタ がないと関数自体の定義情報(テキスト?)を取得してしまうようです(JScript では foo() と foo は別物だが、ruby ではメソッドとプロパティの区別がつかず、パラメタ なしの場合、常に foo すなわちプロパティとして解釈してしまう?)。 正しい使い方が存在するのかも知れませんが、たとえパラメタが存在しなくてもダミー のパラメタを付加することでとりあえず回避はできます。(getText() に対して getText('dummy') などとする)これは Perl でも同じようです。 逆に Python ではパラメタなしのメソッドを正しく処理できるうえ、余分なパラメタを つけるとエラーとなってメソッド呼び出しに失敗します。 スクリプトエンジンの追加はヘルパ関数(execEvalなどいくつかの必須関数)を含むスク リプトテキストを用意して scriptmanager.js のテーブルを修正することで行います。 他のスクリプトの実装を参考にしてください。 最低限は execEval があればよいはずです。 ASConsole は複数起動できません。これは、履歴などのユーザ設定情報を複数のアプリ ケーションインスタンスで共有することが難しいためです。 それでもあえて、複数起動したい場合には、ascon.hta を以下のように書き換えてくだ さい。複数起動モードでアプリケーションが起動します。 hta:applicationタグ内 SINGLEINSTANCE="yes" => SINGLEINSTANCE="no" 複数起動モードでは、履歴、エイリアスおよび選択中のスクリプトエンジンの保存を行 いません。そのため、あえて複数起動させたい場合は、普段使用する標準設定の アプリはそのまま残し、フォルダ全体を別フォルダにコピーしてから、コピーしたもの を編集することをお勧めします。複数起動モードについては、正式仕様ではないため、 動作の確認が十分ではありません。あらかじめ承知願います。 実はHTAアプリでなく、HTMLベースのサーバアプリにすることも同様の仕組みでできる かもしれません。Ruby/Perl/Python などをクライアントにインストールする開発者な ら、HTAの展開程度は問題ないとは思いますが、JScript と VBScript だけでもアプリ 不要で実行できるなら一部の人にはより便利かも知れません。今後の課題です。 キャプション文字列を変更する処理が、IE6 では正常に動作していません。ブラウザ側 の制限のようです。 今回、GUI は作成しましたが、作者はサポートしている各言語の詳細については正直あ まり詳しいわけではありません。各言語において文字列の結合や 123+234 のような簡 単な数式が評価できることは確認していますが、どれだけのことができて、どれだけの 制限があるのかはまだ分かりません。 アプリケーションエラー、文字化け、動作異常などの問題が発生した場合、まず、各言 語のコミュニティで相談することをお勧めします。 もちろん、スクリプト側でなく、ホストとなる当アプリケーション側の問題については、 問題が判明すれば随時修正を行っていく予定です。 10. 使用条件、再配布について 本プログラムはフリーソフトウエアです。 本プログラムおよびソースコードは自由に使用することができます。 本プログラムおよびソースコードの配布や改変に制限はなく、商用利用も可能としま す。改変した生産物に著作権表示も不要です。 本プログラムおよびソースコードは無保証です。 本プログラムおよびソースコードの使用において生じた如何なる損害についても作者 は一切の責任を負いません。 11. 修正履歴 2003.04.26 ver0.01 新規作成 (jsevalとして) 2003.04.27 ver0.02 showMethods を関数化 2003.05.02 ver0.03 メソッド、プロパティ情報の詳細を表示 2003.09.30 ver0.04 ActiveScriptRuby 1.8 対応 2009.03.24 ver1.00 ASConsole に名称変更 スクリプトの呼び出しを ScriptControl 経由に変更 JScript、VBScript、Ruby、Perl、Python に対応 その他いろいろ修正 2009.04.01 ver1.01 標準出力の取り込み(Ruby, Perl, Python) 日本語対応考慮追加 ActiveScriptRuby 1.9.1 対応 ActiveScriptRuby のインスタンス化に使用するスクリプト名変更 (GlobalRubyScript.1 => RubyScript) ダイアログのボタン名称変更[OK]=>[実行(E)] comXXX関数群を文字列を返す形から直接印字する方式に変更 vbs のオブジェクト操作の不具合修正 Perl でパラメタチェックの強化 スクリプトファイル(evalヘルパ)の内部名の識別子にプレフィクス追加 2009.04.03 ver1.02 PHPScript 対応 ScriptControl#Eval/executeStatement エラー判定強化 2009.04.06 ver1.03 ScriptControl#AddCodeの呼び出しサポート evalの評価結果の前に "=>" の表示を追加 ソース整理 2009.04.07 ver1.04 履歴保存時の \ の考慮漏れ修正 comProperties が動作しなくなっていた問題の修正 2009.04.09 ver1.05 ActiveScriptRuby の 1.8 と 1.9 は共存不可としていたが、通常使用では特に問 題がなさそうなので、説明を修正 2011.05.22 ver1.06 ActiveScriptRuby 1.9 の日本語処理の不具合を修正 ActiveScriptRuby 1.8.7/1.9.2 の導入時の説明を最新版に合わせ更新 2011.05.23 ver1.06a 1.06の不具合修正 2011.06.01 ver1.07 ブラウザアタッチ機能追加(jQuery 対応) JScript の組込関数名 print/println を __print/__println に変更 2011.06.08 ver1.08 ブラウザアタッチ時のエラー処理改善 2011.06.25 ver1.09 プロンプト表示による現在選択中の言語の明確化