Sencha Cmd が提供するビルドスクリプトは Sencha Cmd の多くの低レベル機能(コンパイラなど)を結び付けて自動化するコンポーネントです。ビルド用には万能ソリューションはほとんど存在しないので、ビルドスクリプトは動作を設定しカスタマイズする多くのオプションを提供しています。本ガイドはビルドスクリプトの背後の原則について説明し、ニーズに合わせてビルドプロセスをカスタマイズするために参照する場所を紹介します。
前提条件
先に進む前に以下のガイドをご覧になることをお勧めします。
はじめに
内部的に、sencha app build
コマンドは基本的なバリデーションを行い、アプリケーションのルートの "build.xml"
にある Apache Ant ビルドスクリプトに呼び出しを行います。特に、このスクリプトの "build"
ターゲットを呼び出します。つまり、ビルドプロセス全体を確認、拡張し、(必要な場合は)変更することも可能です。
sencha app build
はAntの"build.xml"
ファイルの"build"
ターゲットを起動するだけなので、Antから直接ビルドを同じように起動できます。これは、EclipseやNetBeansなどのIDEでビルドを起動するために有用ですが、Ant(これらすべてについて)を理解する継続的インテグレーションサーバーでも有用です。
生成された build.xml
は .sencha/app/build-impl.xml
といくつかの他のファイルをインポートするために Ant import
タスクを使用する最小限の Ant スクリプトです。build.xml
は生成後に編集するように設計されていますが、.sencha/app/*-impl.xml
ファイルは違います。これらのファイルは sencha app upgrade
で置換されるので、必要でない限り編集すべきではありません。これらのファイルは優れたリファレンスですが、必要でない限り変更すべきではありません。
ビルドターゲット
以下のターゲットはアプリケーションのビルドプロセスを最初から最後まで定義します。init
を除いて、各ターゲットには手順を無効にするために 1 に設定できるプロパティが用意されています。
- init
- refresh
- resolve(デフォルトで 1、skip.resolve=0 を有効に設定)
- js
- resources
- sass
- slice
- page
- native-package
init
を除いて、これらのターゲットはそれぞれビルドプロパティ(以下参照)を "skip."
でプレフィックスされたターゲット名を使用してデフォルトのビルドからドロップすることができます。例えば、slice
ターゲットを無効にするためなどです。
skip.slice=1
これらの手順は必要な場合は個別に実行できます。多くの場合、これは Sass のみをビルドする際に便利です。
sencha ant sass
注意:sencha ant
を使用することは Ant 1.8 以降がインストールされている場合に Ant を使用することと同じです。
設定
sencha app build
の背後のビルドスクリプトの多くの要素は、Ant で通常行われるようにプロパティによって管理されます。この場合、設定プロパティとビルドプロパティの 2 種類のプロパティがあります。
設定プロパティ
Sencha Cmd 設定プロパティをビルドスクリプトに利用できますが、Sencha Cmd のその他多くの機能(コンパイラなど)も実行しています。現在の一連の設定プロパティを参照するには、このコマンドを実行します。
sencha diag show
ほとんどの場合、プレフィックスから各プロパティの出所がわかります。
app.
–"app.json"
および".sencha/app/sencha.cfg"
を参照してください。workspace.
–"workspace.json"
および".sencha/workspace/sencha.cfg"
を参照してください。framework.
– Sencha Touch SDK まはた Ext JS の"cmd/sencha.cfg"
を参照してください。cmd.
– Sencha Cmd インストールフォルダの"sencha.cfg"
を参照してください。
設定プロパティの使用はビルドプロセスよりも広範であるため、Sencha Cmd高度な利用法で詳しく説明しています。
ビルドプロパティ
ビルドスクリプトはビルド特有のその他多くのプロパティを定義します。これらのビルドプロパティは通常 "build."
がプレフィックスされます。
これらの現在の値を確認するには、アプリフォルダからこのコマンドを実行します:
sencha ant .props
ビルドプロパティの設定
ビルドプロパティを設定する方法は多くあります。最もシンプルな方法は、ビルドプロパティファイルの 1 つを編集することです。編集するファイルを決定するためには、これらのファイルの優先順位とロードされる条件を理解することです。
"local.properties"
– がある場合、このファイルが先にロードされます。このファイルはローカルに(ローカルマシンに)のみ適用されます。他の人がソース管理を行えるようにしないでください。これらの設定は他のプロパティファイルで定義されるプロパティや現在の設定プロパティに優先されます。- Sencha Cmd 設定プロパティ
".sencha/app/${build.environment}.properties"
–build.environment
プロパティの値をベースに、以下の 1 つがロードされます。これらのファイルの設定プロパティによって、実行するビルドのタイプに基づいてプロパティに異なる値を持つことができます。".sencha/app/native.properties"
".sencha/app/package.properties"
".sencha/app/production.properties"
".sencha/app/testing.properties"
".sencha/app/build.properties"
– これらのプロパティが次にロードされ、build-environment-specific プロパティに対して低い優先順位になります。これらはすべて(またはほとんど)の環境で使用されるプロパティです。このファイルはカスタマイズできるように設計されています。".sencha/app/defaults.properties"
– これらのプロパティはロードする最後(デフォルト)の値です。このファイルは Sencha Cmd が所有し、各リリースで新しいプロパティが追加されるごとに更新されます。このファイルは一連のビルドプロパティに対するリファレンスとなりますが、編集すべきではないため、他のファイルを編集してください。
"local.properties"
よりも優先順位が高い唯一のプロパティはコマンドラインで渡されるプロパティです。
カスタマイズ
ビルドプロパティでは多くの一般的なニーズを考慮していますが、このようにすべてのケースを考慮することはできません。設定オプションでタスクを達成できない場合、次のレベルのカスタマイズは、生成した "build.xml"
Ant スクリプトを拡張することです。
import
タスクに加えて、"build.xml"
には、利用できる拡張ポイントの多くを記述するコメントブロックが含まれています。これらは、オプションの Ant ターゲットの書式で、ビルドプロセスと同じ名前にプレフィックスの "-before-"
と "-after-"
を加えます。最も一般的な拡張ポイントを以下に示します。
- init
- -before-init
- -after-init
- refresh
- -before-refresh
- -after-refresh
- resolve
- -before-resolve
- -after-resolve
- js
- -before-js
- -after-js
- resources
- -before-resources
- -after-resources
- sass
- -before-sass
- -after-sass
- slice
- -before-slice
- -after-slice
- page
- -before-page
- -after-page
- native-package
- -before-native-package
- -after-native-package
ビルドステップの前後に追加処理を実行するには、適切な名前を付けたターゲットを"build.xml"
に追加します。これらのターゲットはsencha app build
によって起動されます。また、Antを使用して特定のターゲットを直接起動する場合にも起動されます。
これらの拡張ポイントの最も一般的な使用方法は "all-classes.js"
ファイルのビルド出力の後処理です。事前定義された Ant タスクを使用すると、生成後に生成されたファイルに [Copyright] ヘッダーを配置するなどを行うことができます。
<target name="-after-page">
<tstamp>
<format property="THISYEAR" pattern="yyyy"/>
</tstamp>
<!--
The build.classes.file property holds the full path to the "all-classes.js"
file so we use that variable rather than hard-code the name.
-->
<move file="${build.classes.file}" tofile="${build.classes.file}.tmp"/>
<concat destfile="${build.classes.file}">
<header filtering="no" trimleading="yes">
/*
* Copyright (C) ${THISYEAR}. All Rights Reserved.
* My Company Name
*/
</header>
* My Company Name */
<delete file="${build.classes.file}.tmp" />
</target>