タスクにより、柔軟でカスタマイズ可能なファイル操作や複雑な インストール処理が可能となります (そのため、"tasks" という 名前になっています)。デフォルトでは、PEAR には 4 つのタスクがあります。 しかし、PEAR/Tasks ディレクトリに既存のタスクと同様の規約に従った ファイルを追加することで、簡単にタスクを追加することが可能です。 このページでは独自のタスクを作成する方法については説明しません。 package.xml 内でタスクを使用する方法についてのみ説明します。
PEAR とともに配布されているのは、3 つの基本的なタスクと 1 つの 複雑なタスクです。基本的なタスクは "replace"、"windowseol" および "unixeol" で、複雑なタスクが "postinstallscript" となります。 "replace" は、package.xml 1.0 の古いタグ <replace> とほぼ同じもので、ファイルの中身についてテキストの置換を行います。 "windowseol" および "unixeol" は、 DOS のバッチファイル (.bat) や Unix のシェルスクリプトなどのファイルの 行末コードを適切に操作します。 "postinstallscript" により、更なるインストール関数を 実行するためのスクリプトを動作させることを選択可能です。
replace タスクには、3 つの必須属性があります。
type - これは package-info あるいは pear-config のいずれかである必要があります。package-info の場合は package.xml 自身から取得した情報をもとに置換を行い、 pear-config の場合は設定変数 (
pear config-show |
from - 変換元となるテキストです。 通常のテキストと区別するため、これは伝統的に "@" で囲まれ、例えば from="@version@" のようになります。
to - "from" が現れた際に変換するために 使用する抽象項目。package-info の場合に変換候補として指定可能なのは、 以下のいずれかです。api-state、api-version、channel、 date、description、license、license-uri、name、notes、release_date、release-license、release_notes、 state、summary、time、version そしてパッケージによっては extends、providesextension、srcpackage および srcuri。
package-info 型の置換はパッケージの作成時に行われることに注意しましょう。 そのため、.tgz/.tar リリースの中には置換後のファイルが含められます。 pear-config 型の置換はインストールシステムによってのみ行われ、 インストールの際に実行されます。
このタスクは、Windows 固有のファイル (DOS のバッチファイルなど) を 非 Windows 環境 (たとえば行末を \n に変換してしまう Unix など) で 作成することを可能にします。このタスクは、インストール時だけでなく パッケージ作成時にも実行されることに注意しましょう。そのため、 .tgz/.tar リリースの中には正しい行末のファイルが含まれます。
このタスクは、Unix 固有のファイル (シェルスクリプトなど) を 非 Unix 環境 (たとえば行末を \r\n に変換してしまう Windows など) で 作成することを可能にします。このタスクは、インストール時だけでなく パッケージ作成時にも実行されることに注意しましょう。そのため、 .tgz/.tar リリースの中には正しい行末のファイルが含まれます。
postinstallscript タスクは、参照しているファイルが インストール後に実行するスクリプトであることを インストーラに通知します。
セキュリティ上の理由により、このスクリプトはユーザによって 手動で実行させなければなりません。そのため、インストーラは このタスクをその他のタスクとは別の特別なコードで管理します。
<postinstallscript> タグでは、インストーラがユーザからの入力を 取得するために使用するパラメータを定義しています。 Web インストーラおよびコマンドラインインストーラの両方をサポートするには、 すべての入力を PEAR で処理し、インストール後スクリプトに所定の形式で 渡す必要があります。あなたがしなければならないことは、 <postinstallscript> タグの内部で使用するパラメータを定義することだけです。
パラメータつきの単純なインストール後スクリプトを表す xml は、 このようになります。
<tasks:postinstallscript> <paramgroup> <id>first</id> <param> <name>test</name> <prompt>Testing Thingy</prompt> <type>string</type> </param> </paramgroup> </tasks:postinstallscript> |
この段階では、"string" 型のみがサポートされることに注意しましょう。 その他の型もいずれサポートされる予定です。 次に、より複雑な例を示します。
<tasks:postinstallscript> <paramgroup> <id>first</id> <param> <name>test</name> <prompt>Testing Thingy</prompt> <type>string</type> <default>hi</default> </param> <param> <name>test2</name> <prompt>Testing Thingy 2</prompt> <type>string</type> </param> </paramgroup> <paramgroup> <id>second</id> <name>first::test</name> <conditiontype>preg_match</conditiontype> <value>g+</value> <param> <name>test</name> <prompt>Testing Thingy a</prompt> <type>string</type> <default>hi</default> </param> <param> <name>test2</name> <prompt>Testing Thingy b</prompt> <type>string</type> </param> </paramgroup> </tasks:postinstallscript> |
このスクリプトには 2 つのパラメータグループがあります。まず最初の グループが処理された後に、2 番目のグループが処理されます (自然な 流れです)。しかし、ここでは 2 番目のグループは条件付きの パラメータグループとなっています。これは、前のパラメータグループでの ユーザの入力を検証し、それが条件を満たす場合にのみプロンプトを 表示します。条件は、3 つのタグ <tasks:name>、<tasks:conditiontype> および <tasks:value> で指定します。3 つのタグはすべて必須であり、 ひとつでも欠けていると xml の妥当性検証に失敗することに注意しましょう。
<tasks:name> は、前のパラメータグループのパラメータ名です。書式は グループ ID::パラメータ名 のようになります。つまり、上の例の "first::test" は、<tasks:paramgroup> first の <tasks:param> test のことを指します。
<tasks:conditiontype> は、<tasks:name> で指定したパラメータの値を どのように処理するかを定義します。"="、"!=" あるいは "preg_match" のいずれかとなります。
=: これは (明らかに) パラメータの値が <tasks:value> タグと 等しいかどうかを調べます。
!=: これは (明らかに) パラメータの値が <tasks:value> タグと 等しくないかどうかを調べます。
preg_match: これは、<tasks:value> タグの内容を、 preg_match() 関数の / および / の間の値として使用します。正規表現には、両端の // を 「含めないでください」。2 番目の <tasks:paramgroup> において、 値 "g+" は以下のように扱われます。
<?php preg_match('/g+/', first::test value) ?> |