本ガイドでは、Sencha Cmd のワークスペース機能を紹介します。ワークスペースはフレームワーク、パッケージ、その他のコードを共有する複数のページをサポートするように設計されています。
前提条件
先に進む前に以下のガイドをご覧になることをお勧めします。
ワークスペースの意味
大規模アプリケーションをビルドするプロセスは、単一ページのアプリケーションのビルドと同じプロセスでスタートします。アプリケーションを展開して複数のページが必要になると、共通の問題が発生します。
- Sencha フレームワークの共通コピーの使用(Ext JS または Sencha Touch)。
- ページ間で共通なコードの使用。
- 共有パッケージまたはサードパーティパッケージ。
これらをサポートするために、Sencha Cmd は「ワークスペース」の概念を定義します。ワークスペースは、1つまたは複数のページ、フレームワーク、パッケージ、その他の共有コードやファイルを含む単なるフォルダです。ワークスペースルートフォルダの場所を選択して、これらのニーズやソースコントロールの要件を改善する必要があります。深さに関係なく、ワークスペースフォルダのサブフォルダで作成された生成済みのアプリケーション/ページは、ワークスペースのメンバーと見なされます。
要件ではありませんが、この場合には通常、ワークスペースフォルダはソースコントロールレポジトリのルートフォルダです。
ワークスペース内のページの正確な構造と仕組みは、Sencha Cmd では重要ではありません。ただし、シンプルさを追求するために、このガイドの各例では、すべてのページがワークスペースの直接のサブフォルダとして作成されます。
*専門用語についての注意。*SenchaのフレームワークベースのアプリケーションはMVCアーキテクチャを採用し、コードツリーの上位でExt.application
を呼び出します。これらのフレームワークが「アプリケーション」の用語を使用して各ページを説明するため、紛らわしくなることがあります。単一ページのアプリケーションでは、これらの用語は置き換えることができます。ただし、アプリケーションが複数のページを利用している場合、これには該当しません。このコンテキストにおいてはより適切であるため、ほとんどの場合、このガイドでは「ページ」の用語が使用されています。
ワークスペースの生成
ワークスペースを生成するには、次のコマンドを使用します。
sencha generate workspace /path/to/workspace
これは、指定されたフォルダに以下の構造体を作成します。
.sencha/ # Sencha-specific files (e.g. configuration)
workspace/ # Workspace-specific content (see below)
sencha.cfg # Configuration file for Sencha Cmd
plugin.xml # Plugin for Sencha Cmd
上記のディレクトリの構造体は単一ページのアプリケーション向けに作成された構造体の一部であったので、熟知しておく必要があります。ただし、この場合には、「.sencha/workspace」フォルダのみが作成されます。
設定
設定はアプリケーションの設定と同様です。".sencha/app/sencha.cfg"
のファイルには、1ページ(“app”)ごとに設定が備わっています。
単一ページのアプリケーションと異なり、".sencha/workspace/sencha.cfg"
ファイルは、ワークスペースの全ページの設定プロパティを設定する場合に有効です。
フレームワークの場所
Sencha Ext JS または Sencha Touch の場所(つまり、「SDK」または「フレームワーク」)はワークスペースの設定プロパティとしてストアされます。これによって、複数のページがこの設定を共有できるようになります。これらの場所においても、またSencha SDKがソースコントロールシステムにストアされる場合でもストアされない場合でも、さまざまなチームがさまざまなプリファレンスを持ちます。以下で述べられる設定によって、ワークスペース内の Sencha SDK の場所のコントロールが可能になります。
デフォルトでは、Sencha Ex JS や Sencha Touch SDK も保持しているワークスペースは、".sencha/workspace/sencha.cfg"
で以下のプロパティ設定を取得します。
ext.dir=${workspace.dir}/ext
touch.dir=${workspace.dir}/touch
workspace.dir
プロパティの値はSencha Cmdで決定され、必要に応じて拡張されます。つまり、ワークスペースには、それが保持しているアプリケーションで使用される SDK のコピーがデフォルトで含まれています。
アプリケーションは、".sencha/app/sencha.cfg"
ファイル内のapp.framework
プロパティを使用してフレームワークを間接的に参照します。
app.framework=ext
ページの生成
ワークスペースを取得すると、ページ(“app”)の生成が以前と同じになります。
sencha -sdk /path/to/ext generate app ExtApp /path/to/workspace/extApp
同じワークスペースでSencha Touchアプリケーションを生成することもできます。
sencha -sdk /path/to/touch generate app TouchApp /path/to/workspace/touchApp
生成されたこれらのページのターゲットがワークスペースに存在しているため、以下の構造体が作成されます(単一ページのアプリ向けのものとは少々異なります)。
.sencha/ # Sencha-specific files (e.g. configuration)
workspace/ # Workspace-specific content (see below)
sencha.cfg # Workspace's configuration file for Sencha Cmd
plugin.xml # Workspace plugin for Sencha Cmd
ext/ # A copy of the Ext JS SDK
...
touch/ # A copy of the Sencha Touch SDK
...
extApp/
.sencha/ # Sencha-specific files (e.g. configuration)
app/ # Application-specific content
sencha.cfg # Application's configuration file for Sencha Cmd
touchApp/
.sencha/ # Sencha-specific files (e.g. configuration)
app/ # Application-specific content
sencha.cfg # Configuration file for Sencha Cmd
build/ # The folder where build output is placed.
production/ # Build output for production
touchApp/
extApp/
testing/ # Build output for testing
touchApp/
extApp/
さらに多くのページを作成するには、上記のコマンドを繰り返します。
ページのビルド
マルチページのアプリケーションの各ページの作成プロセスは、適切な各フォルダから以下のコマンドで実行します。
sencha app build
効率化するために、このプロセスのスクリプトを作成できます。
ページ間のコードの共有
アプリケーションを複数ページに拡大する場合、アプリケーション間でコードを共有する効率的な方法があることが重要です。ワークスペースでこれを行うには2つの方法があります。
- パッケージ
workspace.classpath
パッケージ
Sencha Cmd は、JavaScript、Sass リソースをダウンロードしてアプリケーションに統合するために使用できる強力なパッケージ管理サブシステムを提供します。これは単一ページアプリケーションガイドで説明していますが、ワークスペースに関して、これらのパッケージは共有されるだけです。ダウンロードは1度だけで、デフォルトではワークスペースの "./packages"
フォルダにストアされます。
共有パッケージの場所を変更するには、".sencha/workspace/sencha.cfg"
ファイルで workspace.packages.dir
を変更します。
workspace.classpath
アプリケーションの複数のページで共有 JavaScript コードが必要でワークスペース外の他のアプリケーションでは必要とされない場合、この設定オプションを使用してすべてのアプリケーションにソースフォルダを自動的に含めることができます。このプロパティは Sencha Cmd にこれらの共有コードフォルダを sencha app build
コマンドの実行中にスキャンするように指示します。これを行う方法は次のとおりです。
次のように、common
フォルダをワークスペースに追加します。
.sencha/
workspace/
...
common/ # Folder for common things between pages.
src/ # Folder for common JavaScript code for all pages.
アプリケーションにすべてのページをビルドの際にcommon/src
を含めるには、次のものを".sencha/workspace/sencha.cfg"
に追加します。
workspace.classpath=${workspace.dir}/common/src
これによって、次のコンポーネントがデフォルトのクラスパスに追加されます。
${framework.classpath},${workspace.classpath},${app.classpath}
アプリケーションのミックス
複数のExt JSページ間または複数のSencha Touchアプリケーション間でコードを共有するだけではなく、多くの場合、2つのSenchaフレームワーク間でコードを共有する必要があります。フレームワークには多くの共通点がありますが、多くの重要な点、特にUIコンポーネントとレイアウトのエリアにおいて異なり、このようなさまざまなデバイス環境をターゲットにすることが求められます。これらの違いがある状態でも、2つのフレームワーク間でコードを共有することができ、たとえば、2つのモデルクラス定義間でコードを共有することなどもできます。
場合によっては、混合アプリケーションワークスペースがある場合に、フレームワークごとに共通コードを隔離する必要があります。これを行う方法の1つは、このように workspace.classpath
を設定することです。
workspace.classpath=${workspace.dir}/common/src,${workspace.dir}/common/src-${framework.name}
このように定義することによって、ワークスペースはこのようになります。
.sencha/
workspace/
...
common/ # Folder for common things between pages.
src/ # Folder for common JavaScript code for all pages.
src-ext/ # Folder for common JavaScript code for Ext JS pages.
src-touch/ # Folder for common JavaScript code for Sencha Touch pages.