Copal(コーパル)はPerlや、AWK等のスクリプト言語をWindows環境で使いやすくするために作った統合環境です。 最新版は<URL:http://copalpro.sourceforge.jp>よりダウンロードできます。
Copal用にフォルダを作って、そこに書庫ファイルを展開してください。レジストリを書き換えたりはしないので、アンインストールをしたいときはフォルダごと消し去ってください。また、実行ファイルと同じフォルダにCopalPro.cfgという設定ファイルを作ります。またdefsという言語設定ファイルを管理用のフォルダを作ります。
最初にCopalを起動したら、「設定」メニューの「言語」から使用する言語を指定してください。 無ければ「設定」メニューの「新しい言語」を指定して、新規に名前を付けてください。 その後「実行」タブの実行ファイルのパスを設定してください。 例えばC:\Perl\bin\あるperl.exeを使いたいのならC:\Perl\bin\perl.exeと入力してください。 このとき、実行ファイル名までフルパスで入力するのを忘れないでください。
デフォルトでPerl、Ruby、PHPの言語設定例が付属しています。 AWKを使うのであれば、「言語別の設定」の「実行時オプション」に -f を設定してください。 VBScriptを使うのであれば、「言語別の設定」の「テンポラリファイル名」の拡張子を「vbs」にしてください。例えば、copal.vbsなどにして下さい。
Copalを起動した直後か、「ファイル」メニューから「新規作成」を選んだときは、フォームのキャプションに「Copal * 新規スクリプト」と表示されているはずです。この状態で、何かスクリプトを組んでみましょう。スクリプトはメインウィンドウに入力します。 以下全ての例をPerlで説明します。
スクリプトウィンドウに
print "Hello World";
と入力して、実行ボタンを押してください。
「実行結果」というページができて、
Hello World
と表示されたら成功です。
Perlのコマンド evalとCopalは非常に相性が悪いようです。evalに限らず子プロセスを起動するようなコマンドはCopalから見て孫プロセスになってしまうため、環境により不安定になってしまうことがあります。ご了承ください。
入力したスクリプトの実行ができます。適当なスクリプトを入力して「実行」から「スクリプトを実行」を選んでください。実行結果が結果表示ウィンドウに表示されます。エラーメッセージなどもここに表示されます。
スクリプトの実行結果をそのままブラウザへ送ることができます。実行結果は一時的にファイルに保存されますが、その名前は環境設定で指定することができます。
例えば
print "<H1>Hello!</H1>";
上記のようなスクリプトを書いて、「実行結果をブラウザへ」ボタンを押すと、ブラウザが立ち上がって結果を表示します。大きな字で Hello! と表示されたら成功です。
ブラウザへ結果を出力するとき、"Content-type・・"等のヘッダ情報をカットする事もできます。環境設定の「ヘッダ情報をカットする」をチェックしてください。結果ウィンドウに表示される結果はそのままで、ブラウザにはヘッダがカットされた情報が送られます。CGIサーバの一種のエミュレーションだと思ってください。
クリップボードの内容を入力として実行し、実行結果をクリップボードに送ります。
Hello!
World!
であるときに
while (<>){
print ">";
print ;
}
というスクリプトを書いて「クリップボードから入力」ボタンを押すと
クリップボードの内容が
>Hello!
>World!
となります。引用符をつけたり、ちょっとした処理などに使うと便利です。結果をクリップボードに送りたくない場合は、「実行」メニューの「クリップボードに出力しないをチェックしておいて下さい。
現在のスクリプトをDOS窓を開いて実行します。具体的には一時的なバッチファイルを作成し、そのバッチファイルを実行します。このバッチファイルの名前は「設定」メニューの「環境設定」で開くコンフィグウィンドウの実行タブにある「一時的なバッチファイルの名前」で設定することができます。また、バッチファイルの最後に「@PAUSE」を出力することもできます。実行後、すぐにDOS窓が閉じてしまう場合は、環境設定の実行タブにある「@PAUSEを出力する」をチェックしてください。
標準入力を必要とするスクリプトや、eval、grobのようなCopalと相性の悪い関数を使うスクリプトなどはDOS窓で実行すると良いでしょう。
DOS窓から実行した場合、エラー行ジャンプなどの統合環境での機能は全て使えませんのでご注意ください。
スクリプトを実行するとき、いくつかのオプションを指定することができます。例えば、「クリップボードへ出力しない」をチェックしておけば、「クリップボードから入力」を実行しても、結果をクリップボードへ出力しません。このように、チェックしておくと実行のやり方が変わるオプションが用意されています。
現在指定できる実行時オプションは以下の通りです。
Copalは最後にドラッグ&ドロップしたファイルを覚えています。「実行」メニューから「ドロップファイルを記憶」をチェックしておくと、実行時にそのファイルを引数として実行するようになります。 デバッグ時など、なんども同じファイルをドロップする必要がある場合にチェックしておくと便利です。
最後にドロップしたファイルは、「ドロップファイルを記憶」ボタンの上にマウスをあわせると知ることができます。
このチェックが有効なのは以下の処理です。
このボタンを押しておかないとドロップファイルを記憶しないわけではありません。Copalは常に最後にドロップされたファイルを覚えています。このボタンを押すと、最後にドロップされたファイルを入力として使うようになります。
このボタンを押しておくと、実行結果がすべてブラウザに送られます。何度もCGIの動作を確認したいときなどに使うと便利でしょう。
このボタンを押しておくか、「実行」メニューの「クリップボードに出力しない」をチェックしておくと、「クリップボードの内容に実行」をしたときに、実行結果をクリップボードに出力しません。
デバッグ時など、クリップボードの内容に対して実行をしたいが、その内容を上書きしたくないとき等に使ってください。
このチェックが有効なのは以下の処理のみです。
このボタンが押されていると、フォームエディタで編集された、環境変数とフォームデータがスクリプトに渡されます。これにより、あたかもサーバでCGIとして動作させたような結果を得ることができます。
詳しくは、フォームエディタについてを参照してください。
このオプションは、DOS窓へ出力以外の実行方法(ファイルをドロップしたとき含む)すべてで有効です。
このボタンを押しておくと、実行結果がファイルに自動的に保存されます。デバッグ時など、何度も同じファイルを出力する必要がある場合などに便利でしょう。
ボタンを押すと、ファイル名を指定するウィンドウが表示されますので、そこで出力ファイル名を指定してください。存在するファイルを指定しても、上書き確認などは出ませんので注意してください。また、読み取り専用ファイルなどを指定するのはやめてください。
このチェックは、DOS窓へ出力以外の実行方法(ファイルをドロップしたとき含む)すべてで有効です。
Copalには「スクリプトウィンドウ」「結果ウィンドウ」「エラーウィンドウ」の三つのウィンドウがあります。
スクリプトを入力するウィンドウです。
実行結果が表示されるウィンドウです。表示された結果をエディット、保存することもできます。
スクリプトを実行したときに、エラーがあった場合表示されるウィンドウです。エラーをダブルクリックすると、エラー行へカーソルが飛びます。
「表示(V)」メニューから「スクリプト(S)」を選ぶと、スクリプトウィンドウが表示されます。ここにスクリプトを 入力してください。
「表示」メニューから「実行結果」を選ぶと、結果ウィンドウが表示されます。また、スクリプトを実行すると自動的にこのウィンドウになります。この結果は編集することも保存する事も可能です。また実行する度に更新されるので、保存はその都度行ってください。 結果は実行が終わったあと表示されます。実行結果が大きいと、プログラム実行終了から表示までしばらくかかることがあります。
このウィンドウは、スクリプトを実行したら、自動的に非表示になります。 また、このウィンドウは、実行中にエラーがあると非表示にしてあっても、自動的に表示されます。また、自分で標準エラー出力へ出力した場合も自動的に表示されます。
例えば
print "test";
を実行してもエラーウィンドウは開きませんが、
print STDERR "test";
というスクリプトを実行したら、自動的に下にウィンドウが開き、
test
と表示するはずです。
エラー行取得正規表現が設定されていれば、エラー行ジャンプが使えます。エラー行ジャンプが設定してあると、表示されたエラーをダブルクリックすれば、エラーのある行にカーソルが移動します。
標準エラー出力も、実行が終わるまで表示されませんので、スクリプトの進行状況の表示として標準エラー出力を使う事はできません。
Copalのエディタ機能は、おそらくユーザーが普段使ってるエディタの機能に比べて貧弱です。そこで外部エディタとの連携を考えた作りになっています。
まず、「実行(R)」メニューから、「外部エディタの起動(E)」を選ぶと、設定してある外部エディタで現在編集中のファイルを開きます。この機能はオートリフレッシュとペアで使うことを想定しています。Copalはファイルスタンプを監視し、外部で編集中のファイルが変更されていると警告を出しますが、オートリフレッシュがオンになっていると、警告を出さずにファイルを開きなおします。
これにより、よく使うエディタとCopalで同じファイルを開いておき、オートリフレッシュをオンにしておくと、ファイルをエディタで編集、Ctrl+Sで保存してCopalの実行ボタンを押す、という一連の動作でスクリプトの動作確認ができることになります。つまり、Copalでもう一度ファイルを開き直す手間を省くための機能です。
さらに、「環境設定」「エディタ」「オートリフレッシュ」の「外部エディタでファイルを開いたら編集禁止とする」をチェックしておくと、外部エディタ起動時に自動的にCopalでの編集を禁止します。双方でファイルを編集できると混乱する場合などに便利です。
エディタによっては、ファイル名に空白が含まれていると開くのに失敗するものがあります。その場合は設定メニューの「エディタ」タブから「ファイル名を""で囲んでエディタに渡す」をチェックしてください。逆に「""」で囲むとファイルを開けないエディタもありますので、その場合はチェックを外してください。
あらかじめエディタを登録しておけば、 「外部エディタを起動」ボタンで外部エディタを起動して、 Copalで編集中のファイルをそのエディタで開くことができます。 外部エディタの登録は、メニューの「設定」→「共通設定」で 行うことができます。エディタによって、 「""(ダブルクオーテーションマーク)」でファイルを囲まないと いけなかったり、逆に囲まない場合もあるので、 ご使用のエディタのドキュメントを参照してください。
(タグジャンプの設定もしてあります)
「オートリフレッシュ」なんてたいそうな名前がついていますが、要するにファイルを開き直す手間を省く機能です。
Copalは編集中のスクリプトが外部から変更されると警告をだしますが、 「表示(V)」メニューの「オートリフレッシュ(A)」をチェックしておくと、警告を出さずに読み込みなおします。これは外部エディタとの連携の為です。
また、「オートリフレッシュ」ボタンを押すことによってもオートリフレッシュのオン/オフを切り替えることができます。
Copalにはエラー行ジャンプがあり、エラーメッセージを ダブルクリックすると、Copalのエディタの該当箇所にカーソルが移動します。 しかし、外部エディタで作業をしていると、いちいちエラーの場所を 確かめて自分で移動しなくてはいけません。 こんなとき、使っているエディタがタグジャンプに対応していれば、 Copalのエラーメッセージをダブルクリックしたら作業中のエディタの 該当箇所にカーソルが飛ぶようになり、便利です。
エラー行ジャンプでタグジャンプを使うには、 メニューの「設定」→「共通設定」で、 「タグジャンプを使う」にチェックをいれ、 「タグジャンプオプション」を設定してください。
タグジャンプオプションでは、以下の特殊文字が使えます。
たとえば、外部エディタにterapadを使っているなら、「/jl=%L %F」と 設定すればタグジャンプが使えるようになります。 秀丸なら「/j%L,0 %F」とすればよいと思います。
外部エディタの設定をした後、たとえば、以下のようなエラー (printを間違えてplintと打っている)がおきたとします。 その場所をダブルクリックすると、
↓terapadが開いてエラー行に飛ぶ。
外部エディタ(terapadに移る)
「設定」メニューの「共通設定」を選んで出てくる設定フォームの「環境設定」タブで設定できる項目です。
「設定」メニューの「共通設定」を選んで出てくる設定フォームの「エディタ」タブで設定できる項目です。
「設定」メニューの「共通設定」を選んで出てくる設定フォームの「その他」タブで設定できる項目です。
チェックしておくと、ファイルをドロップしたときに自動的にドロップファイルを記憶ボタンが押されるようになります。
「設定」メニューの「言語別の設定」を選んで出てくる設定フォームの「実行設定」タブで設定できる項目です。
「設定」メニューの「言語別の設定」を選んで出てくる設定フォームの「デバッグ」タブで設定できる項目です。
たとえばPerlの場合なら、
line [0-9]+.?
Rubyの場合なら
:[0-9]+.?:
と指定しておけば、エラー行ジャンプできるようになるはずです。
Perlであれば、
at\s(.*)\sline
とすれば良いと思います。
Copalは、CGIの簡易エミュレート機能を持っています。Copalにできることは、
などです。それらの情報を編集するエディタがフォームエディタです。
「表示メニュー」→「フォームエディタ」を選ぶか、CGIデータを使うボタンを押すと、フォームエディタが開きます。そこで入力されたデータを、あたかもブラウザ経由で受け取ったようにスクリプトを実行することができます。
現在、GETメソッドにしか対応していません。
フォームエディタの、環境変数タブにデータを入力すると、スクリプトに環境変数として渡されます。 たとえば、環境変数の名前として"test"、値を"value"にして、追加ボタンを押します。
↓追加ボタンを押した後
この状態で
print $ENV\{'test'\};
を実行すれば、
value
が表示されます。
CGIデータを使うを選んでいると、通常渡される環境変数(PATHなど)が渡されなくなります。必要な場合は、自分で新しく設定してください。
フォームエディタの、フォームデータタブにデータを入力すると、スクリプトにフォームデータとして渡されます。 たとえば、REQUEST_METHODがGETで、TEXTタブに名前を"test"、値を"value"として追加ボタンを押してデータを追加します。
↓追加ボタンを押したところ
その状態で
print $ENV\{'QUERY_STRING'\};
というスクリプトを実行すれば、
test=value
という結果が表示されるはずです。TEXTAREA、CHECKBOXなども同様です。
また、HIDDENなどの要素も、すべてTEXTで代用できるはずですので、そちらに入力してください。
参考→文字コードについて
現在、POSTメソッドには対応しておりません。
フォームエディタの、Cookieデータタブにデータを入力すると、スクリプトに環境変数「HTTP_COOKIE」として渡されます。直接環境変数エディタでHTTP_COOKIEを設定しても良いですが、Cookieエディタを使ったほうが便利です。
たとえば、Cookieの名前として"test"、値を"value"にして、追加ボタンを押します。
↓追加ボタンを押した後
この状態で
print $ENV\{'HTTP_COOKIE'\};
を実行すれば、
test=value
となるはずです。
さらに、Cookieデータとして名前"test2"、値"value2"を追加して実行すると、
test=value; test2=value2
などとなります。
参考→文字コードについて
フォームデータ、Cookieデータに日本語を入力した場合、URLエンコードされます。その際、URLエンコードする前にどの文字コードでエンコードするか指定することができます。文字コードは、フォームエディタの、「設定」→「文字コード」から指定することができます。
たとえば、フォームエディタに名前が"text"、値が"あいうえお"という日本語のデータがある状態で
print $ENV{"QUERY_STRING"};
を実行すると、文字コードがSJISなら結果は
text=%82%A0%82%A2%82%A4%82%A6%82%A8
となり、EUCなら
text=%A4%A2%A4%A4%A4%A6%A4%A8%A4%AA
となります。
UTF-8には対応しておりません。また、改行コードは変換されません(CRLFになります)。
Copalの最新版は、<URL:http://copalpro.sourceforge.jp>よりダウンロードができます。
Copalはインタプリタ、つまりプログラムを自分で解釈して実行する能力は持っておりません。あくまでスクリプトを実行するのはPerlやAWKなどのプログラムです。Copalの仕事は、スクリプトをこれらのプログラムに渡し、結果やエラーメッセージを取得することだけです。従って、エラーメッセージが表示されたらCopalは正しく動作をしています。問題点はスクリプトの方にあるわけです。
Copalの動作がおかしいと思ったら、Copalを使わずにDOS窓から同じスクリプトを実行してみてください。それで問題が出るようであれば、Copalの問題ではなく、使用環境かスクリプトの問題です。DOS窓で問題なく実行できるソーススクリプトが Copalで実行できなかったら、Copal側の問題の可能性があります。詳しい状況をメール等でお知らせください。
Copalは以下の修正BSDライセンスにて配布します。
Copyright (c) 2002-2011 H. Watanabe All rights reserved.
ソースコード、バイナリなどの配布形式、及び変更の有無を問わず、以下の条件を満たす限りにおいて、 再配布及び使用を許可します。
本ソフトウェアはH. Watanabeによって、"現状のまま"提供されるものとする。 本ソフトウェアについては、明示黙示を問わず、商用品として通常そなえるべき 品質をそなえているとの保証も、特定の目的に適合するとの保証を含め、またそれらに 限定されないいかなる保証もなされない。著作権者も、事由のいかんを問わず、 損害発生の原因いかんを問わず、且つ、 責任の根拠が契約であるか厳格責任であるか (過失その他)不法行為であるかを問わず、著作権者が仮にそのような損害が発生する 可能性を知らされていたとしても、本ソフトウェアの使用から発生した(代替品または サービスの提供、使用の喪失、データまたは利益の損失の補償、または、業務の中断に 対する補償を含め、またそれらに限定されない)直接損害、間接損害、偶発的な損害、 特別損害、懲罰的損害または結果損害のいずれに対しても一切の責任を負わない。
その他、以下の方々に報告や提案をいただきました(順不同)。
谷口さん、ユージさん、守屋さん、Johnさん、黒瀬さん、新藤さん、勘兵衛さん、KENZOUさん、kissaさん
本当にありがとうございました。