アップグレード

Web SDKのバージョンを更新する

バージョン: 10.6.0.0 | パッケージ: @c8y/cli, @c8y/apps, @c8y/ngx-components

以前のバージョンのWeb SDKでビルドしたUIは、ビルド時のバージョンに固定されています。 プラットフォームの更新によって UI のバージョンが更新されませんが、すべての API は後方互換性があるので、新しいバックエンドで実行されている UI でも新しい機能を使えるようになります。 そのためUIまたはWeb SDKの新しい機能を使用する必要がある場合はほとんど、更新が有効です。したがって、新しいアプリケーションをビルドしてプラットフォームにデプロイする必要があります。 このレシピでは、そのためのベストプラクティスについて説明します。

準備

データをバックアップしたり、コードの差分を確認するために、ソース管理システム(SCM)を使用することをお勧めします。 SCMをまだ使用していない場合は、 git を使用して変更を保存する方法を紹介していますので、以下をご覧ください。すでにSCMを使用している場合、またはSCMを使用したくない場合は、次のセクションに進むことができます。SCM を使用しない場合は、アップデートを実行する前にアプリケーションをバックアップしてください。

システムに git がインストールされていることを確認します。 次にターミナルを開き、以下のコマンドを実行します。

cd <<path/to-you-app>>
git init
git add .
git commit -m "init commit"

これで、コードは .git フォルダに保存されているローカルのgitリポジトリにコミットされます。 次に、Web SDKを更新する方法を説明します。 更新後にgitを使いたくない場合は、.gitフォルダを消去してください。

更新

Web SDKを更新するには、スキャフォールディングで使用する new コマンドを使用します。

c8ycli new <<app-name>> <<cockpit|devicemanagement|administration>> -a @c8y/apps@<<version>>

例えば、現在の作業ディレクトリがThings Cloudのコックピットアプリケーションをベースにした「my-cockpit」というアプリケーションで、バージョン10.6.2.0に更新する場合は、次のコマンドを実行する必要があります。

cd ..
c8ycli new my-cockpit cockpit -a @c8y/apps@1006.2.0
備考
npmはsemverバージョン番号のみをサポートしているため、バージョンの最初の2つの番号は結合されます(例:10.6は1006になります)。-aフラグを削除して、常に最新バージョン(クラウドプラットフォームが稼働しているバージョン)に更新することもできます。

このコマンドは、特定のバージョンで新しいアプリケーションをビルドするために使用されるファイルをコピーします。 現在、以下のファイルが上書きされています。

これらは、その記事のバージョンに基づく更新によって上書きされるファイルです。 この一覧は、今後のバージョンで変更される可能性があります。 次に、これらのファイルについて以前に加えた変更を再適用する必要があります。 それには、git diffツールがとても役立ちます。

変更を再反映するために差分を確認する

git diffツールは、アップグレードに伴って行われた変更と、以前にカスタマイズした箇所を再反映するのに便利です。 次のスクリーンショットでは、Visual Studio Code を使用して変更を特定しています。これは、git diffツール(大概のIDEはgit diffingもサポートしています)がうまく統合されているためです。

vscodeとの差分を比較する

このツールを使用すると、アップグレードで変更されたファイルと、カスタム変更を再適用する必要がある場所を簡単に比較できます。 この場合、MyCustomModule のみ、アップグレードの app.module.ts に反映する必要があります。 この変更が完了すると、更新を確認できます。

更新の検証

バージョンの更新が機能したかどうかを確認するには、通常、最初にローカルで実行することをおすすめします。 したがって、最初に依存関係を再度インストールする必要があります。 現在の node_modules ディレクトリを削除し、 npm install(または yarn)を再度実行して依存関係を更新してください。 その後、 npm start でアプリケーションを起動します。ログイン後、ユーザー名をクリックすると、現在の UI バージョンを確認できます。

すべてが予想通りに動作した場合は、npm run deploy コマンドを実行して、アプリケーションをデプロイできます。

結論

特に app.module.ts に多くの変更がある場合、更新プロセスは少し注意が必要な場合があります。 ただし、gitとVisual Studio Codeを使用すると、視覚的な違いがこのタスクの実行に役立つ場合があります。 また、独自のAngularのカスタマイズはモジュールに入れ、必要な場合にのみ app.module.ts に変更を加えることをおすすめします。

Angular 11へのアップグレード

Angular 11はバージョン10.10.4.0からサポートされています。AOT と Ivy はまだサポートされていません。アプリケーションを実行する前に、以下の設定変更が必要です。

備考
Visual Studio Codeを使用している場合、Angular Language Service PluginUse legacy View Engine language service オプションが選択されていることを確認してください。

Angular 11から12へのアップグレード

Angular 12 はバージョン 10.11.45.0 からサポートされています。アプリケーションを実行する前に、以下の設定変更が必要です。

備考
AOT はまだサポートされていません。

IVY を有効にする方法

Ivyは、アプリケーションの速度を向上させ、開発を容易にするAngularアプリケーションの新しいレンダリングエンジンです。Ivyを有効にすることは必須ではありませんが、古いビューエンジンは非推奨であるため、有効にすることをおすすめします。

更新中に:

    "angularCompilerOptions": {
        "enableIvy": true
  }
    "scripts": {
        ...
    "postinstall": "ngcc"
  }
備考
「ディープインポート」はサポートされていません。例えば、 @c8y/ngx-components/asset-navigator からインポートする必要がありますが、 @c8y/ngx-components/asset-navigator/services/asset-service からはインポートしないでください。
備考
Visual Studio Codeを使用する場合、Angular Language Service プラグインのオプション Use legacy View Engine language service が選択されていないことを確認してください。

アプリケーションの移行

このセクションはプラグイン用 AngularJS SDK を用いてプラグインを開発したことがある、もしくは既存のデフォルトアプリケーションを拡張したい開発者を対象としています。

以下のコンセプトを理解する必要があります。

ハイブリッドアプリケーションをセットアップする

ハイブリッドアプリケーションでは、同時にAngularJSとAngularを使用できます。AngularJSで記述された移行されていないプラグインをAngularの文脈で使用できるようになります。テンプレートとしてコックピット、デバイス管理、管理などのデフォルトアプリケーションを使用する場合、CLI は自動的にハイブリッドアプリケーションをセットアップします。使用コマンドは c8ycli new <your-app-name> <template-name> です。

例えば、既定のコックピットを上書きするには以下を実行します。

c8ycli new cockpit cockpit

このコマンドを実行すると、以下のファイルを含む単純なファイル構造ができ上がります。

AngularJSプラグインのインポート

アプリケーションへカスタムプラグインを統合するには、はじめにプラグインをインポートするハイブリッドアプリケーションをセットアップする必要があります。そして、ハイブリッドアプリケーションにプラグインをコピーし、 ng1.ts ファイルでプラグインの cumulocity.json をimport文で参照してください。

import 'my-custom-plugin/cumulocity.json';

Webpackはマニフェストファイルを読み取り、コンテンツをimportを必要とするCommonJSへ変換します。これにより、プラグインがロードされアプリケーションに適用されます。

カスタムブートストラップとアップグレード

app.module.ts ファイルでは、HybridAppModule に存在する以下のコードを用いてハイブリッドアプリケーションをブートストラップしています。

import { UpgradeModule as NgUpgradeModule } from '@angular/upgrade/static';
import { ng1Modules } from './ng1';

export abstract class HybridAppModule {
  ng1Modules = ng1Modules;
  protected upgrade: NgUpgradeModule;

  ngDoBootstrap() {
    (window as any).bootstrap();
    this.upgrade.bootstrap(document.getElementById('app'), this.ng1Modules, { strictDi: false });
  }
}

このモジュールはアップグレードモジュールをブートストラップするだけでなく、Angularアプリケーションを初期化します。

app.module.ts ではブートストラップを制御できます。例えば、ブートストラップされたng1モジュールに別のモジュールを追加できます。

constructor() {
  this.ng1Modules.push('my-custom-module');
}

上記のコードは my-custom-module も読み込みます。上記のコードを用いると ngDoBootstrap() 関数をアプリケーションのニーズに応じて上書きできます(例: Angularの文書に示されているupgrade, downgradeのAngularのserviceなど)。