Velopackを使用してC#デスクトップアプリを迅速にデプロイおよび更新する
クロスプラットフォームのデスクトップアプリケーションのデプロイとアップデートは、従来、開発で最もイライラする部分の1つでした。 しかし、ティム・コーリー氏がビデオ"Deploy and Update C# Desktop Apps Fast with Velopack"で説明しているように、このプロセスは非常に簡単になりました。
Velopack は、パッケージのビルドからアップデートの適用まですべてを処理するように設計された素晴らしいツールで、開発者は、複雑なビルドパイプラインや無限の設定ファイルなしで、1 つのコマンドを使用してアプリケーションを作成、デプロイ、保守できるようになりました。
この記事では、Velopackを使用して標準的なC# WPFアプリを自己更新可能なポータブル・パッケージに変換する方法について、Timの32分のチュートリアル全体を詳細にウォークスルーします。 また、ネイティブのパフォーマンスを維持しながら、自動移行、コード署名、複数のプラットフォーム用のゼロコンフィグセットアップをどのようにサポートするかについても見ていきます。
はじめに:なぜVelopackなのか?
ティムはまず、デスクトップ・アプリケーションのデプロイとアップデートは難しいことではなく、むしろ "とても簡単 "なのだと説明する。このビデオでの彼の目標は、WPFアプリケーションをパッケージ化し、インストーラを作成し、最小限の設定で自動アップデートを可能にすることで、Velopackがどのようにプロセスを簡素化できるかを示すことです。
これはWPFに限ったことではなく、WinForms、コンソールアプリ、あるいはJava、Rust、C#のような.NET以外のソフトウェアにも同じプロセスが有効であると彼は強調する。 Velopackは、ほぼすべての言語やフレームワークのパッケージ構築をサポートしており、クロスプラットフォームアプリケーション向けに現在利用可能な最高のインストーラフレームワークの1つとなっています。
WPFプロジェクトの作成
Timは、Visual Studio 2022で、DeployDemoという名前のシンプルなWPFプロジェクトを作成します。 このプロジェクトは.NET 9をターゲットにしていますが、彼が指摘するように、.NET 10などの新しいバージョンでも完璧に動作します。
この最初のビルドは、デプロイとアップデートの完全なプロセスを示すための小さなアプリケーションです。 彼はWPFを使用していますが、Velopackはクロスプラットフォームのデスクトップアプリケーションでも同様に機能し、あらゆるタイプ for .NETや.NET以外のプロジェクトでも1つのソリューションアプローチになると繰り返しています。
グローバル ツールとして Velopack をインストールする
次に、ティムは端末を開き、こう入力する:
.NETツールインストール -g vpkこのコマンド1つでVelopackがシステム上にグローバルにインストールされ、開発者はどこからでもVelopackコマンドを実行できるようになります。
Velopackはプロジェクトからのコンパイラ出力を、自己更新可能なポータブルパッケージに変換するからです。 このステップでは、アプリにProfessionalなインストーラと自動アップデートフレームワークを提供します。
コマンドラインはセットアップを簡素化するだけでなく、CI/CDパイプラインに簡単に統合できるため、開発者はスクリプトを追加することなく、パッケージング、リリース作成、デプロイを自動化できると説明する。たった1つのコマンドで自動化できることは、開発者が一貫したビルドを維持しながら貴重な時間を節約できることを意味する。
VelopackのNuGetパッケージをインストールする
Visual Studioで、TimはManage NuGet Packagesを開き、Velopackパッケージをインストールします。
彼は、Velopackは以前人気があったインストーラフレームワークであるSquirrelの後継であると説明しています。 Squirrelを使用している場合、Velopackは既存のセットアップを自動的に移行し、信頼性の向上、ビルドの大幅な高速化、クロスプラットフォーム互換性の向上を実現します。
Velopackは、C#、Rust、C++、JavaScriptなどのさまざまなプログラミング言語をサポートし、Windows、Linux、macOS用のデスクトップインストーラを作成できます。 Node.jsは、クロスプラットフォームのアプリデプロイメントのためのフレームワークで、システム間で素晴らしい働きをします。
ティムは、Velopackが完全に無料で使用できることを強調しています。サブスクリプションやライセンス料は不要ですが、商用ソリューションに匹敵するプロフェッショナルなインストーラフレームワークを提供します。
コードで Velopack を初期化する
App.xaml.csファイルでは、ティムはコンストラクタを追加し、わずか数行のコードでVelopackを初期化しています:
new VelopackApp()
.Build()
.Run();new VelopackApp()
.Build()
.Run();このゼロコンフィグ設定により、アプリは直ちにVelopackの自動アップデートフレームワークに接続されます。 これはまだアップデートをチェックするものではありませんが、Velopackがアップデートとインストールを管理し始める後のステップで、Velopackのパフォーマンスを可能にするものです。
ティムは、このセットアップがシンプルであっても、アプリを自己更新するのに十分強力であり、ユーザーがエンドユーザーのマシンで常に最新バージョンを実行できるようにすると説明しています。
ユーザーインターフェイスの設計
アップデートについて深く掘り下げる前に、ティムは基本的なWPFインターフェースを構築します。 彼はグリッドレイアウトを作成し、右上に更新ボタンを配置します。
当初、要素の配置ミスでエラーが発生しましたが、ティムはそれを利用して、WPFにおけるレイアウト階層の重要性を視聴者に再認識させています。 修正後、インストール可能なアプリケーションのインターフェイスは、WPFのような一般的なフレームワークでVelopackがどのように機能するかを示す、すっきりとしたリサイズ可能なものになりました。
次に、テキストボックス(mainTextBox)とSubmitボタン(submitButton)を含むStackPanelを追加します。 アプリを実行すると、最小限の動作するUIが表示されます。 この小さなプロジェクトは、後にアップデートが自動的に適用されることを示すために使用されます。
更新ボタンの実装
さて、ティムは機能性に移ります。 彼は、Update ボタンをダブルクリックして、クリックイベントを生成します。 これは、自動更新フレームワークの中心となります。
彼は、プロセスを3つの段階(チェック、ダウンロード、アップデートの適用)に分けることができると説明しますが、このデモでは、3つのイベントを1つにまとめてわかりやすくしています。
更新ロジックの記述
MainWindow.xaml.cs で、Tim は新しい UpdateManager を作成し、更新ソースとなるローカル パスを指定しています:
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");実際の使用では、このパスは、外部向けアプリケーションのHTTPS URLであったり、内部配布用のローカルファイル共有であったりします。 Velopackは重い設定を必要とせず、どちらの環境でもシームレスに動作します。
その後、ティムはバージョンチェックとアップデートを処理するための非同期コードを追加します:
var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);このコードは、新しいバージョンをチェックし、デルタパッケージをダウンロードし、即座に適用します。 Velopackがすべてを引き受けます。アップデートが完了すると、アプリは自動的に再起動します。
彼は、このデモではボタンクリックを使用していますが、開発者は、Professionalなソフトウェアと同様に、これらのアップデートをサイレントまたは起動時に自動的にトリガーすることもできると説明しています。
アプリケーションの公開
次に、Timは最初のバージョンを公開する方法を示します。 プロジェクトフォルダ内のターミナルを使って、彼は実行する:
dotnet publish --self-contained -r win-x64 -o ./publishこれにより、.NETランタイムを含む自己完結型のビルドが生成されます。つまり、アプリケーションは、.NETを別途インストールすることなく、エンドユーザーのマシン上で実行されます。
Timは、コンパイルされた出力(DeployDemo.exeファイル)をパブリッシュディレクトリに表示し、正しく実行されることを確認しています。 現時点では、コンパイラの出力だけで、パッケージ化されたインストール可能なバージョンではありません。
インストーラー パッケージの作成
公開されたファイルをデプロイ可能なインストーラにするために、TimはVelopackのpackコマンドを使用します:
vpk パック --pack-id DeployDemo --pack-version 1.0.0 --pack-directory ./publishこれにより、セットアップ実行可能ファイルを含む、必要なすべてのファイルを含む Releases フォルダが作成されます。
Timは、リリースファイルをローカルの"サーバー"フォルダにコピーします。 生成されたセットアップファイルを実行すると、アプリが完全にインストールされます。ショートカットが作成され、[プログラムと機能]リストにエントリが追加され、余分な許可やUACプロンプトが表示されないネイティブなインストール体験が提供されます。
現在、このアプリはVelopackによって公式にインストール可能なアプリケーションとなっています。
アプリケーションの更新
更新をシミュレートするために、ティムはSubmitボタンのコードを変更します:
MessageBox.Show($"Hello {mainTextBox.Text}");MessageBox.Show($"Hello {mainTextBox.Text}");その後、同じpublishコマンドとpackコマンドを繰り返し、アプリをリパッケージします:
vpk パック --pack-id DeployDemo --pack-version 1.0.1 --pack-directory ./publishVelopackは、デルタパッケージ(既存ユーザー用の小さな差分ファイル)と新規インストール用のフルパッケージを自動的に作成します。 ティム氏は、フルパッケージが約63MBであるのに対し、デルタパッケージはわずか132KBであることを指摘しています。これは、Velopackが他のツールやインストーラフレームワークよりも大幅に高速で効率的であることの証拠です。
彼は新しいリリースをサーバーフォルダーにコピーし、バージョン1.0.1のリリースを効果的に作成します。
アップデートの適用
ティムはインストールしたアプリケーションを再び開き、更新ボタンをクリックします。 Velopackは数秒で1.0.1アップデートをダウンロード、適用し、アプリを自動的に再起動します。
彼が自分の名前を入力して Submit を押すと、"Hello Tim." と表示されるようになりました。更新フレームワークは軽快に動作し、Velopack が簡単に統合でき、更新サイクル全体を完璧に処理できることが確認できました。
彼は、開発者がこれらのリリースをAzure、ファイルストレージ、またはウェブリポジトリにホストすることができ、同じ自動更新ロジックがWindows、Linux、またはmacOSにまたがって機能することを指摘している。
簡素化されたメンテナンスと柔軟性
ティムは、このプロセスによってデスクトップアプリのメンテナンスが非常に簡単になることを強調しています。 開発者は、最小限の設定と外部依存関係を使用することなく、完全な自動更新機能を備えた内部ツールまたは公開ソフトウェアをデプロイできます。
Velopackは、.NET開発者に使い慣れたAPIを提供し、すべてのステップを処理します:
ビルドの公開
パッケージの構築
リリースの作成
アップデートの適用
- クリーンなアンインストール
複雑なビルドパイプラインや深い設定ファイルを必要とすることなく、これらすべてを実現します。
ティムはVelopackを、開発者が貴重な時間を節約しながら、洗練されたプロフェッショナルなソフトウェアを提供するのに役立つ素晴らしいツールと呼んでいます。 これは、"ただ動く "クロスプラットフォーム更新のためのフレームワークです。
アンインストールとバージョン追跡
インストールされたアプリがWindowsの"プログラムのアンインストールまたは変更"リストに表示され、バージョン1.0.1が表示されていることをTimが示します。Velopackは単にフォルダを削除するだけで、何も残りません。
また、VelopackはWPFだけでなく、WinForms、UNO Platform、さらに古い.NET Framework 4.6.2プロジェクトでも素晴らしい効果を発揮する、と彼は付け加えている。 また、RustやJavaScriptのような他の一般的なフレームワークや言語とも互換性があり、クロスプラットフォームのインストーラのための普遍的なソリューションとなっています。
結論
最後に、ティムはVelopackのパフォーマンスに非常に感銘を受けたと述べています。 ツールをインストールし、コードを1行追加し、2つのコマンドを実行するというわずかなステップで、開発者は、プレーンな.NETプロジェクトから、完全にインストール可能で、自己更新可能なクロスプラットフォームのアプリケーションに移行することができます。
彼は、このような素晴らしいエンジニアリングを構築してくれたVelopackの開発者に感謝の意を表し、おそらく現在利用可能なクロスプラットフォームのデスクトップアプリケーションのための最高のインストーラとアップデートフレームワークであると述べている。
ティムは最後に、すべての詳細、コマンド、ソースコードは、動画の説明で利用可能であることを視聴者に思い出させます。 彼は、開発者がアイデアを議論し、機能を要求し、公開リポジトリを通じてプロジェクトの将来に貢献することを奨励しています。

