本ガイドは Sencha Cmd および Sencha フレームワークのアップグレードをアプリケーションで管理する方法について説明します。
前提条件
先に進む前に以下のガイドをご覧になることをお勧めします。
Sencha Cmd について - Sencha Cmd の使用
アプリケーションのアップグレード
生成したアプリケーションには、ビルドスクリプト(またはスキャフォールド(足場))とターゲットの Sencha SDK の重要なコンテンツという、Sencha Cmd に関係する 2 種類の基本的なコンテンツが含まれます。このため、時々、これらをアップグレードすることが必要になります。アップグレードを実行するには、以下のコマンドを使用します。
sencha app upgrade [ path-to-new-framework ]
“path-to-new-framework” はオプションで、Sencha Cmd Scaffold と アプリケーションが使用するフレームワークの両方をアップグレードするために使用されます。
アップグレードの準備
アプリケーションのソースコードで一括操作を実行する場合は、バージョン管理に関して「クリーン」な状態で始めることを強く推奨します。つまり、アップグレードを実行する前は、コミットされていない変更がないようにします。こうすると、sencha app upgrade
によって行われた変更の確認や廃棄が容易になり、問題が抑制されます。
Sencha Cmd Scaffold のアップグレード
以前のバージョンで生成されたアプリケーションを使用してSencha Cmdのバージョンを更新するには、以下のコマンドをアプリケーション内部から実行します:
sencha app upgrade
これは ".sencha"
のコンテンツを置換しますが、"app.js"
と他のいくつかのファイルもアップグレードします。
フレームワークのアップグレード
生成されたアプリケーションは最初に生成した際のSDKのそれぞれ独自のコピーを含むため、アプリケーションは、新しいバージョンのSDKを使用するように更新する必要があります。sencha app upgrade
コマンドはSDKの旧コピーを新しいコピーに置換します:
sencha app upgrade ../downloads/ext-5.0.0
上記のコマンドは、ダウンロードして抽出されたSDKへのパスをポイントします。
重要このコマンドでは、sencha generate app
コマンドとは異なり、-sdk
スイッチを使用しないでください。その代わり、上に示したコマンドを使用してください。
Ext JS 4.1 から 4.2+ にアップグレードする場合には生成されたソースコードに変更が加えられている場合があります。
マージ衝突の対処
Sencha Cmdでは、コードジェネレータは、3方式のマージを組み込んで、生成するコードが、最後に生成したコード、さらに編集したかもしれないコードの最新状態とできるだけ一致させます。これによって、ユーザーが加えた変更が Sencha Cmd による必要な変更と重ならない限り、多数の方法でファイル("app.js"
など)を編集できるようにしています。
マージプロセスは、"app.js"
の擬似コードに従います(例):
mv app.js app.js.$old
regenerate last version to app.js.$base
generate new version to app.js
diff3 app.js.$base app.js.$old app.js
理想的な状況では、この機構が働いていることを認識することはありません。ただし、「マージ衝突」があり、これを手動で解決する必要があるというエラーメッセージを受信するような状況があります。
基本バージョンを再作成できない場合、".$old"
ファイルがディスクに残されるので、最新バージョンと比較することができます。あるいは、ソース管理システムを使用して、最新ファイルを最後にコミットしたファイルと比較できます。
基本バージョンが生成できた場合(ほとんどの場合)、この衝突が標準方式でターゲットファイルに注釈されるため、".$old"
ファイルは削除されます:
<<<<<<< Generated
// stuff that Sencha Cmd thinks belongs here
=======
// stuff that you have changed which conflicts
>>>>>>> Custom
ビジュアルマージツールの使用
このプロセスはあなたと別のユーザー(この場合は Sencha Cmd)が変更したファイルのソースコントロールシステムで想定される内容に正確に一致します。バージョンコントロールと同様に、これらの問題を解決するためにビジュアルマージツールを使用することが理想的です。
マージの競合が発生した場合、Sencha Cmdを設定してマージツールを呼び出すには、以下の 2 つのプロパティを設定する必要があります。
cmd.merge.tool
cmd.merge.tool.args
cmd.merge.tool
プロパティを設定するのはプログラムが PATH にある場合のプログラム名と同じようにシンプルですが、そうでない場合は完全パスでなければ実行できないこともあります。
対応する cmd.merge.tool.args
プロパティは必要なマージツールで必要とされるコマンドライン引数に従って設定してください。このプロパティは以下の置換トークンを含むテンプレートです。
cmd.merge.tool.args={base} {user} {generated} {out}
このテンプレートは最初にスペースで区切られ、*次に*トークンが実際のファイル名で置換されます。マージツールでカスタムニーズが高い場合、マージツールをラップできるシェルスクリプトに cmd.merge.tool
を設定する必要があります。
マージツールヘルパープロパティ
Sencha Cmd では人気のあるいくつかのマージツールを設定するためのプロパティを提供しています。
p4merge に対して、これらのプロパティを次のように設定できます。
cmd.merge.tool=p4merge
cmd.merge.tool.args=${cmd.merge.tool.args.p4merge}
これは "p4merge"
が PATH
環境変数内にあることを前提としています。ない場合、実行ファイルへのパスを完全に指定する必要があります。
SourceGear の場合:
cmd.merge.tool.args=${cmd.merge.tool.args.sourcegear}
kdiff3 の場合:
cmd.merge.tool.args=${cmd.merge.tool.args.kdiff3}
Syntevo SmartSynchronize 3 の場合:
cmd.merge.tool.args=${cmd.merge.tool.args.smartsync}
TortoiseMerge(TortoiseSVN の一部)の場合:
cmd.merge.tool.args=${cmd.merge.tool.args.tortoise}
AraxisMerge の場合:
cmd.merge.tool.args=${cmd.merge.tool.args.araxis}
代案
アプリケーションを大幅にカスタマイズしている場合、一時的な場所に新しいアプリケーションを生成し、その ".sencha"
フォルダをコピーしてユーザーのファイルを置換し、変更を注意して照合し、バージョンに適用して開始するほうが簡単な場合もあります。
ワークスペースを使用している場合、生成したアプリの".sencha/workspace"
フォルダをワークスペースの".sencha"
にコピーして旧バージョンを置換することが必要な場合があります。