プロジェクトのディプロイメント

概要

Curl® 統合開発環境 (IDE) のディプロイメント ツールは、さまざまなシナリオに応じてアプリケーションを移動および再構成できるように設計されています。たとえば、以下のような状況を想定してみましょう。
大規模な Web サイトの一部にあたる Web アプリケーションを開発します。Curl IDE における開発およびテストの初期段階はすべてローカル ファイル ネットワークで実施し、Curl パッケージ、画像ファイルのディレクトリ、および既にサイトにあるその他のリソースは、これらのローカル コピーを使います。次に、アプリケーションをテスト サーバーにコピーしてテストを続行します。最後に、完成したアプリケーション部分を Web サイトにディプロイします。この時点で、アプリケーションと一緒にデザイン仕様も保存されますが、これはテスト サーバーまたはプロダクション サーバーにはコピーしません。
上記のタスクを効率よく実行するには、以下の作業を実行するためのツールが必要です。
IDE プロジェクトでは、これらのすべての作業に役立つディプロイメント ツールやディプロイメント ストラテジーを提供します。

Curl 統合開発環境 (IDE) のディプロイメント ストラテジー

要約:
ディプロイメントでは、次の操作が可能です。
  • ディプロイメント ターゲット (複数可) を定義できます。
  • ターゲットに応じて異なる方法でアプリケーションをディプロイできます。
  • キャッシュと同期を制御できます。
  • ディプロイメント時にアプレットに署名を追加できます。
Curl IDE は、全体的なプロジェクト管理の一環としてプロジェクトのディプロイメントを処理します。「プロジェクトの管理」の章では、アプリケーション開発の初期段階におけるプロジェクトの使用法について説明しています。

ディプロイメント ターゲット

Curl のディプロイメント システムを使用するには、最初に 1 つ以上のディプロイメント ターゲットを定義する必要があります。ディプロイメント ターゲット名は特定の場所に関連付けられています。プロジェクトのディプロイ時はプロジェクト リソースの多くをターゲットにコピーするため、ターゲットの場所は IDE がファイルを書き込むことができるディレクトリでなければなりません。Web サーバーのファイル システムに対して直接アクセス権を持つ場合は、サーバーに直接プロジェクトをディプロイできます。アクセスが不可能な場合は、別のディレクトリにコピーしてから FTP または他の手段で Web サーバーにファイルを転送します。
各プロジェクトには default という既定のディプロイメント ターゲットが含まれています。このターゲットは、プロジェクト ディレクトリのサブディレクトリにあたる deploy-default にプロジェクトをディプロイします。ディプロイメント ターゲットを追加および変更するには、IDE の [プロジェクトのプロパティ] ダイアログを使用します。[プロジェクト][ターゲット設定を編集] を選択すると、[ターゲット] タブが選択された状態で [プロジェクトのプロパティ] ダイアログが開きます。新規ターゲットを追加するには [追加...]、既存のターゲットを変更するには [設定...] を選択します。「ターゲット」を参照してください。
1 つのプロジェクトに複数のディプロイメント ターゲットを指定できますが、一度に 1 つのターゲットしかアクティブにできません。現在のプロジェクトのアクティブなターゲット名は、IDE のプロジェクト ペインのタイトル バーでマニフェスト名の右側に表示されます。アクティブなディプロイメント ターゲットが存在する場合、[プロジェクト] メニューのディプロイメント コマンドは [target-name のディプロイメント] および [OCC 用の target-name のディプロイメント] と表示されます。
[プロジェクト] メニューの [現在のターゲット] コマンドには、プロジェクトで現在利用可能なすべてのディプロイメント ターゲットが一覧表示され、アクティブなターゲットには印が付けられています。ここでアクティブなターゲットを新たに選択することもできます。
プロジェクトのディプロイ時には、ファイルが新たに書き込まれる前にターゲット ディレクトリにあるコンテンツがすべて削除されます。したがって、ディプロイメント プロセスでコピーされるファイル以外に、このディレクトリにファイルを書き込まないようにしてください。

マニフェストとディプロイメント

プロジェクト マニフェストの目的は、プロジェクト ファイルに必要なリソースを検索できるようにすることです。IDE は、アプリケーション 開発に対応して自動的にプロジェクト マニフェスト ファイルを更新します。「プロジェクト ファイルとプロジェクト マニフェスト」の章では、プロジェクト開発でのマニフェスト ファイルの役割について説明しています。
プロジェクトのディプロイ時に、プロジェクト ファイルに必要なリソースが異なる場所にある場合があります。たとえば、開発中に、プロジェクト ディレクトリのサブディレクトリにある、ローカル コピーのパッケージを使用する場合があります。プロジェクトのディプロイ時には、いくつかのアプリケーションで共有される別のディレクトリに同じパッケージがある場合があります。この場合、ディプロイされたプロジェクトには、開発中に使用されるマニフェストとは異なるマニフェストが必要です。
プロジェクトの [コンポーネント ターゲット設定] では、ディプロイされたプロジェクト用に IDE でどのようにマニフェストを作成するかを指定できます。また、 [コンポーネント ターゲット設定] を使用すると、パッケージのドキュメントを生成するかどうかなど、他の有用なディプロイメント情報を指定することもできます。
プロジェクトの各リソースに対して [コンポーネント ターゲット設定] を個別に設定できます。また、異なるディプロイメント ターゲットに対して、指定のコンポーネントを異なる方法で処理することもできます。たとえば、この章の最初のシナリオを考えてみましょう。すべてのプロジェクト リソースをテスト サーバーにコピーする必要がある場合があります。その一方で、Web サーバーにディプロイする場合、一部のリソースをコピーし、その他のリソースはアプリケーションが検索できるようサーバー上の場所を指定する場合もあります。

キャッシングおよび同期

Curl 実行環境 (RTE) の重要な機能の 1 つは、実行するアプレットによりダウンロードされるパッケージをキャッシュするということです。アプレットがダウンロードではなく、クライアント上に既にキャッシュされたパッケージを使用できると、パフォーマンスが向上します。エンド ユーザーは [Curl コントロール パネル][全般] タブからクライアント上の RTE のキャッシュ動作を制御できます。アプリケーションの新バージョンを Web サーバーにディプロイする場合、必要に応じてその新しいバージョンがダウンロードされるようにすることができます。同期を制御するにはいくつかの方法があります。「キャッシュと同期」のセクションでこれらの問題について詳細に述べています。

コード署名

コード署名では、Curl アプレットとそのマニフェストにデジタル署名することができます。この機能は Curl Pro/IDE でのみ利用できます。「Curl 及び Curl Pro 製品」をご覧ください。コード署名には次のような利点があります。
アプリケーションに署名を追加するには、適切な証明機関から最初に公開鍵/秘密鍵のペアを取得しなければなりません。これらは公開鍵/秘密鍵のペアを発行する Verisign® や Thawte® などの機関です。[ターゲット設定] ダイアログ ボックスでコード署名を選択し、証明書ファイルを指定します。「ターゲット」を参照してください。証明書のファイルは PKCS#12 フォーマットですが、PFX フォーマットとしても知られています。
署名付きアプレットとそのマニフェストには、そのファイルの先頭近くの {curl-file-signature ...} フォームが含まれます。署名が確認されるまでは、署名された Curl ファイルは評価されません。署名が確認できない場合は、アプレットまたはマニフェストから得られたコンポーネントの 1 つがいくつかの理由で破損しています。
署名付きアプレットを実行するエンド ユーザーは、ダイアログから対話的に次のオプションのいずれかを選択します。
アプレットを実行中にアプレットの証明書が無効だと判明した場合、エンドユーザーは次のオプションから選択することができます。
注意: コード署名は Mac のプラットフォームではサポートされていません。

随時接続コンピューティングのためのディプロイメント

このディプロイメント システムを使って、Curl の随時接続コンピューティング (OCC) 機能に対応するアプリケーション用のアーカイブ ファイルを準備することもできます。この場合、[プロジェクト] メニューの [ディプロイ] コマンドの代わりに、[OCC 用のディプロイメント] を使用します。OCC の詳細については、「随時接続コンピューティング」を参照してください。[プロジェクト] メニューの詳細については、「プロジェクト メニュー」を参照してください。

コンポーネント ターゲット設定の編集

要約:
コンポーネント ターゲット設定では、ディプロイメントに応じてプロジェクト内の各リソースをさまざまな方法で処理することができます。
アクティブなターゲットを作成して選択したら、次にプロジェクト内の各ファイルおよびリソースについてそのターゲット設定を指定できます。ターゲット設定では、プロジェクトのディプロイ時にどのようにリソースを取り扱うかを定義します。[プロジェクト] メニューの [ターゲット設定を表示] コマンドを選択すると、プロジェクト ペインでファイル名の右側に設定インジケータが表示されます。設定インジケータが表示されているときは、このコマンド メニューは [ターゲット設定を隠す] に変わります。
[プロジェクト] メニューの [コンポーネント ターゲット設定の編集] コマンドを選択すると、[コンポーネント ターゲット設定] ダイアログが開きます。このダイアログは、設定インジケータをクリックして開くこともできます。このダイアログには、現在選択されているリソースで利用可能なすべての設定が表示されています。
すべての種類のリソースで利用可能なアクションは、[ターゲット マニフェストにインクルードしない] です。製品仕様や進捗状況のメモなど、プロジェクトには含める必要があってもアプリケーションと一緒にディプロイする必要のないリソースにはこの設定を使用します。
その他の設定項目は、選択するリソースの種類に応じて異なります。

ファイルとディレクトリ

ファイルとディレクトリには次のような設定があります。

パッケージ

パッケージには次のような設定があります。
ディプロイメント機能を最も効率的に使うには、パッケージ ファイルにアプレット ファイル以外の Curl ソース ファイルをすべてインクルードするようアプリケーションを構成する必要があります。IDE はパッケージ ファイルを読み取り include ステートメントを確認することによって、パッケージを構成するファイルを判定します。IDE はパッケージ ファイル以外の .scurl ファイルの include ステートメントに含まれるファイルは認識できません。evaluate プロシージャでアクセスするファイルも認識されません。

デリゲート(委譲)

マニフェストは Curl アプレットがリソースを位置付けできるようにします。マニフェストは別のマニフェストを使用して、delegate-to メカニズムからリソース情報を提供することができます。「マニフェストのデリゲート (委譲)」を参照してください。プロジェクトにマニフェストを追加できます。[プロジェクト] メニューの [デリゲート先の追加] コマンドを使用して、delegate-to 式をプロジェクトのマニフェストに追加します。
次のようなデリゲート設定があります。

ディプロイメントの例

このセクションでは、いくつかのサンプル プロジェクトを使用してプロジェクトのディプロイメントを説明します。この例は、d:\automated-build-temp\build\win32-atom\docs\default\examples\uguide\deployment.zip に含まれています。拡張例の使用法の詳細については、「アプレットの拡張」を参照してください。
このアーカイブから適切なディレクトリにファイルを解凍します。ファイルを解凍すると、applet-projectuse-package、および use-delegate-to の 3 つのディレクトリが作成されます。各ディレクトリには IDE プロジェクトが含まれます。これらのすべてのプロジェクトに 3 つのディプロイメント ターゲットがあります。

ローカル リソースのディプロイメント

最初に、IDE を使用して、applet-project にあるプロジェクトを開きます。このプロジェクトには、アプレット ファイル start.curlshow-logo.scurl というソース ファイルを含む DOC.LOGO パッケージ、およびファイル curllogo.gif を含む images という名前のディレクトリが含まれます。アプレットは、パッケージ DOC.LOGO で定義されているプロシージャ show-logo を使用して、ディレクトリ images にあるイメージ ファイルを表示します。
これらのリソースのすべては、プロジェクトを含むディレクトリにあります。ファイル、パッケージ、ディレクトリ リソースを識別する component 式を含むプロジェクト マニフェスト ファイルを開くには、プロジェクトのルート ノードをダブルクリックしてください。
各コンポーネントの設定を表示するには、[プロジェクト] メニューの [コンポーネント ターゲット設定を表示] を選択します。3 つのディプロイメント ターゲットすべてが、アプレットとそのすべてのリソースをターゲットにコピーすることに注意してください。
既定のターゲット、および追加ターゲットの少なくとも 1 つに APPLET-PROJECT をディプロイします。アプレットは正しく実行され、すべてのディプロイされた場所に Curl ロゴが表示されます。

非ローカル パッケージのディプロイメント

IDE を使用して、use-package にあるプロジェクトを開きます。このプロジェクトには、アプレット ファイル start.curl、および APPLET-PROJECT で定義されたパッケージ DOC.LOGO が含まれます。ファイルおよびパッケージ リソースを識別する component 式を含むプロジェクト マニフェスト ファイルを開くには、プロジェクトのルート ノードをダブルクリックしてください。この場合、パッケージの場所は現在のプロジェクト ディレクトリと相対的に定義されています。
このプロジェクトのコンポーネント ターゲット設定は、ターゲットの場所にコピーされる start.curl を指定します。プロジェクト ディレクトリにないリソースはディプロイメント中にコピーできません。そのため、パッケージはコピーできません。コンポーネント ターゲット設定は、[パスの使用] で、ディプロイされたマニフェストに component 式を作成するよう IDE に指示します。このマニフェストはプロジェクト マニフェストが使用するロケーション パスと同じパスを使用します。
既定のターゲット、および追加ターゲットの少なくとも 1 つに USE-PACKAGE をディプロイします。このディレクトリは APPLET-PROJECT に対し同じリレーションを持たないため、アプレットが既定のターゲット ディレクトリでは正しく実行されないことに注意してください。このディレクトリを APPLET-PROJECT が既にディプロイされている Web サイト上の場所にコピーすると、アプレットは正しく実行されます。他のディプロイメント ターゲットは、ディレクトリを互いに適切なリレーションに置いて、アプレットがこれらの場所で正しく実行できるようにします。
アプレットがそのプロジェクト マニフェストを使用してパッケージ DOC.LOGO を検索できますが、ディレクトリ images には直接アクセスできないことに注意してください。

デリゲート マニフェストのディプロイメント

IDE を使用して、use-delegate-to にあるプロジェクトを開きます。このプロジェクトにはアプレット ファイル start.curl、およびプロジェクト APPLET-PROJECT に対してデリゲートされたマニフェストが含まれます。マニフェストを識別する delegate-to 式を含むプロジェクト マニフェスト ファイルを開くには、プロジェクトのルート ノードをダブルクリックしてください。
ディプロイメント ターゲットである directory-deploylocal-deploy は、ディレクトリ DelegateDemo にプロジェクト ファイルを書き込みます。プロジェクト APPLET-PROJECTDeployDemo にディプロイされます。プロジェクト リソースを検索するには、APPLET-PROJECT マニフェストのコンポーネント ターゲット設定には、[別のパスを使ってターゲット マニフェストにインクルードする] を使用します。このパスでは、ディプロイされたプロジェクトの場所を指定します。この設定は、指定したパスを使用するディプロイしたマニフェストに delegate-to 式を作成するよう、IDE に指示します。
このプロジェクトをターゲット directory-deploy または local-deploy のいずれかにディプロイします。USE-PACKAGE と同様、このプロジェクトは正しいリレーションにある APPLET-PROJECT に依存します。delegate-to を使用して、パッケージ マニフェストを追加するため、このプロジェクトは、プロジェクト APPLET-PROJECT のすべてのリソースにアクセスできます。アプレット start.curlmanifest-url を使用して、直接、またはパッケージ DOC.LOGO から、applet-project のイメージ ファイルにアクセスします。

自動ディプロイメント

IDE のディプロイメント操作を自動化し、ビルド スクリプトやその他の自動化されたコンテキストに含めることができます。異なったディプロイメント ターゲットを使用して、ドキュメントを作成や、パッケージの .pcurlファイルを作成といった、プロジェクトにおける多様なディプロイメント操作を行うことができます。
Curl IDE には deploy-project.xcurl と呼ばれるプロジェクト ディプロイメントのためのスクリプトがあります。このスクリプトは d:\automated-build-temp\build\win32-atom\ide\bin にあります。Curl のスクリプトの書き方および使い方についての詳細は、「スクリプト」をご覧ください。
ディプロイメント スクリプト を実行するために次のような構文を使用してください。
構文:curl deploy-project.xcurl [target] project-file
フラグの種類:
  • (--help | --usage | -h | -?):
    コマンドラインのオプションとともにヘルプメッセージを印刷します。
  • (--target | -t) target-name:
    ターゲット target-name をディプロイします。省略された場合は、すべてのプロジェクトがディプロイされます。
  • --occ:
    OCC を使用してディプロイします。省略された場合は、OCC の機能なしでディプロイが行われます。
  • (--preflight | -p) (none | dialog | throw)
    dialog または throw の場合は、ディプロイメントの作業が終了する前にプリフライトされています。プリフライトは、ディプロイ ターゲットのディレクトリが、ディプロイされようとしているイメージ内のファイルだけを含んでいることを確認するためのチェックです。dialog の場合は、ユーザーに進め方を問うダイアログが表示されます。throw の場合、エラーがスローされ、ディプロイは失敗に終わります。none の場合、プリフライト チェックがされません。
  • (--verbose | -v):
    ディプロイメント中に stderr へのメッセージを印刷し、どのターゲットがディプロイされているのかを記述します。
ターゲットのディプロイ中にエラーが発生した場合、stderr にエラーが記録され、それ以上ターゲットはディプロイされません。
自動ディプロイメント API のドキュメントは API リファレンスにありません。すべての必要なコンポーネントは次に説明されている通りです。
DeployPreflight は次の3つの値を持つ列挙型です。
ProjectDescription クラスは、ディスク上のプロジェクトの状態を表します。ProjectDescription.from-url ファクトリは、ProjectDescription を作成し、Url を Curl のプロジェクト ファイル (.cprj) に渡します。
ProjectDescription.deploy メソッドはプロジェクトのターゲットの1つをディプロイします。次のような構文があります。
構文:
{deploy
    target,
    occ? = false,
    preflight = DeployPreflight.dialog
}
           
説明:
ProjectDescription.targets プロパティは、プロジェクト内のすべてのターゲットを返す Iterator-of TargetDescription です。
TargetDescription はプロジェクトのディプロイ ターゲットを表します。これには、次のようなフィールドが含まれます。