Qt Installer Framework Manualを和訳する

# 目的
Qiita上に和訳記事が見つからないため、Qt Installer Framework Manualを自分用に和訳します。

https://doc.qt.io/qtinstallerframework/index.html

参照するバージョンは
+ Qt Installer Framework: Version 4.5.1
+ Qt 6.2.4

またデプロイ先は主にWindowsを想定しています。

## Qt Installer Frameworkとは
Qt Installer FrameworkはQt Companyが提供している、Qtアプリケーション向けのカスタムインストーラー作成ツールです。
Qtアプリケーション以外のプロジェクトでも使用できます。一方でQtアプリケーションのインストーラを別のインストーラ作成ツールで作成することも可能です。
Qt本体と同様、コミュニティ版は無償で使用できますが、ライセンスが使用用途に合っているかは確認が必要です。

# Overview of Qt Installer Framework
Qt Installer Frameworkは、インストーラーをデプロイするための一連のツールとユーティリティを提供します。 
ソースコードを書き直す必要なく、サポートされているすべてのデスクトップQtプラットフォームに対して、１度にインストーラを作成、デプロイすることができます。
インストーラーは、実行されるプラットフォーム (Linux、Microsoft Windows、および macOS) ネイティブなルックアンドフィールを備えています。

インストーラーは、インストール、更新、またはアンインストール中にユーザーをガイドするページを含む他、インストール可能なコンテンツのリストを提供し、それに関する情報 (製品名、インストーラー、使用許諾契約のテキストなど) を提示します。

事前定義されたページにウィジェットを追加するか、ページ全体を追加してユーザーに追加のオプションを提供することにより、インストーラーをカスタマイズできます。 またインストーラーに操作を追加するスクリプトを作成できます。

## Choosing Installer Type
ユース ケースに応じ、**offline**または**online**のインストーラー、あるいはその両方を提供できます。
どちらのインストーラーも、後でコンポーネントの追加、更新、および削除に使用できるメンテナンスツールをインストールします。 

**online**インストーラーは、Web サーバー上のオンライン リポジトリからコンポーネントをダウンロードしてインストールするメンテナンスツールのみをインストールします。 したがって、onlineインストーラーのバイナリサイズは小さく、ダウンロード時間はofflineインストーラーよりも短くなります。
エンドユーザーが利用可能なすべてのコンポーネントをインストールしない場合、オンラインインストーラーのダウンロードと実行にかかる合計時間は、オフラインインストーラーのダウンロードと実行よりも短くなる可能性があります。
オンライン インストーラーを作成して、ユーザーが常に最新バージョンのコンテンツ バイナリをインストールできるようにします。

**offline**インストーラーには、インストール可能なすべてのコンポーネントが含まれており、インストール中にネットワーク接続を必要としません。 
オフライン インストーラーを作成して、後でコンピューターにインストールするためにユーザーがインストール パッケージをメディアに直接ダウンロードできるようにします。たとえば、CD-ROMや USB スティックでインストール パッケージを配布することもできま

エンド ユーザーは、メンテナンス ツールを使用して、最初のインストール後にサーバーから追加のコンポーネントをインストールしたり、更新がサーバーに公開されるとすぐにコンテンツの自動更新を受信したりできます。 
ただし、これがオフライン インストールで機能するのは、オフライン インストーラーの構成でリポジトリ アドレスを指定した場合、またはエンド ユーザーが保守ツールの設定でリポジトリ アドレスを指定した場合のみです。

## Promoting Updates
製品をインストールしたエンドユーザーにアップデートを促進するためには、オンラインリポジトリが利用できます。
アップデートを提供する最も簡単な方法は、リポジトリを再作成し、Web サーバーにアップロードすることです。大規模なリポジトリの場合、変更されたコンポーネントのみを更新することができます。

## Providing Content for Installers
他のコンテンツプロバイダが**アドオンコンポーネント**としてインストーラにコンポーネントを追加できるようにすることができます。コンポーネントプロバイダは、インストール可能なコンポーネントを含むリポジトリを設定し、リポジトリを指す URL をエンドユーザに配信する必要があります。エンドユーザーは、インストーラーでそのURLを設定する必要があります。アドオンコンポーネントは、パッケージマネージャで表示されます。

# Getting Started
Qt Installer Framework は、Qt プロジェクトの一部として開発されています。フレームワーク自体は Qt を使用しています。ただし、Qt で構築されたアプリケーションを含む (ただしこれに限定されません) あらゆる種類のアプリケーションのインストールに使用できます。

## Supported Platforms
デスクトップ Qt がサポートするすべてのプラットフォーム用のインストーラーを作成できます。
インストーラーは、次のプラットフォームでテストされています。
+ Microsoft Windows 7, and later
+ Ubuntu Linux 18.04, and later
+ macOS 10.13, and later

## Building from Sources
次の手順では、Qt Installer Frameworkを自分でビルドする方法について説明します。フレームワークのビルド済みバージョンをダウンロードした場合は、これをスキップできます。

（訳注）Qt Installer Frameworkのinstallerは以下からダウンロードできる。

https://download.qt.io/official_releases/qt-installer-framework/

TBD

# End User Workflows
エンドユーザーの使用感は、オフラインインストーラーとオンラインインストーラーで似ています。
インストーラは、アプリケーションと一緒に、パッケージマネージャ、アップデータ、およびアンインストーラで構成されるメンテナンスツールをインストールします。エンドユーザーは、メンテナンスツールを使用して、コンポーネントを追加、更新、および削除することができます。メンテナンスツールは、追加または更新するコンポーネントを取得するために、外部リポジトリに接続します。リポジトリは、設定ファイルで指定するか、エンドユーザーがメンテナンスツールの設定で指定することができます。

このセクションでは、初期インストール後にエンドユーザーがコンポーネントを追加する方法の実装例として、macOSで、Qt5インストーラーによりインストールされるメンテナンスツールを使用します。
インストーラーは、サポートされる各デスクトッププラットフォームのネイティブなルックアンドフィールを持つため、LinuxとWindowsで実行すると、見た目も使い勝手も違ってきます。

## Initial Installation
次の図は、アプリケーションをインストールするためのデフォルトのワークフローを示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603614/5b974476-b2e4-21c3-0ba8-29e1c1c5651a.png)

サンプルプロジェクトは、Qt Installer Framework リポジトリの `examples\tutorial` ディレクトリに格納されています。アプリケーション インストーラーを作成するには、binarycreator ツールを使用できます。

1. Starting Installer
インストーラを起動すると、まず introductionページが開きます。
設定ファイルである `config.xml` で、**インストーラー名**と**インストールする製品**を指定します。
*Continue* を選択すると、次のページに進みます。

2. Selecting Target Directory
エンド ユーザーは、インストール先のディレクトリを指定する必要があります。 構成ファイル `config.xml` でデフォルト値を指定できます。
ディレクトリが既に存在する場合は、警告ダイアログを表示します。
*Continue* を選択すると、次のページに進みます。

3. Selecting Components
コンポーネント選択ページには、インストール可能なコンポーネントと各コンポーネントの簡単な説明が表示されます。エンドユーザーは、インストールするコンポーネントを選択します。
すべてのコンポーネントを選択する場合は *Select All*、コンポーネントの選択を解除する場合は*Deselect All*、デフォルトの選択状態に戻す場合は*Default*を選択します。

インストール可能なコンポーネントをパッケージ ディレクトリのデータ ディレクトリに追加します。 コンポーネントに関する情報は、`meta`ディレクトリの `package.xml` ファイルに指定します。

ブール演算子またはスクリプトを使用して、コンポーネントをデフォルトで選択するかどうかを指定できます。 
*Continue* を選択すると、次のページに進みます。

4. Accepting License Agreements
ライセンスチェックページでは、エンド ユーザーが使用許諾契約の条項に同意する必要があります。
`package.xml`ファイルでライセンスファイルを指定し、ファイルをメタディレクトリにコピーすると、ライセンスチェックページが表示されます。

5. Selecting Windows Program Group
Windowsでは、[スタートメニューディレクトリ選択ページ] により、エンドユーザーは Windowsスタートメニューで製品のプログラム グループを選択できます。
プログラム グループのデフォルト値は、`config.xml`構成ファイルで指定します。
*Next* を選択すると、次のページに進みます。

6. Installing Components
[インストールの準備完了] ページでは、ユーザーが*install*を選択するとインストールを開始できることがエンド ユーザーに通知されます。
インストール中、インストールの実行ページに、インストールの進行状況に関する情報が表示されます。エンド ユーザーは、`Show Details` を選択して詳細情報を表示できます。
インストールが完了すると、[インストール完了ページ]が開きます。

このページに、インストーラーを閉じたときにインストール済みの製品を起動するオプションを追加できます。起動する製品と表示するテキストを `config.xml`構成ファイルに指定します。

## Adding Components
エンド ユーザーが最初のインストール時にすべてのインストール可能なコンポーネントを選択しなかった場合、パッケージ マネージャーを使用して、後でリポジトリから残りのコンポーネントをインストールできます。 
パッケージ マネージャーは、初期インストール時にアプリケーションと共にインストールされるメンテナンス ツールの一部です。 これは、コンポーネントを含むリポジトリがローカルまたは外部で利用できる場合にのみ機能します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603614/0d762d53-1529-f7e3-130e-ebebee4c0d3f.png)
 
メンテナンスツールには、パッケージ マネージャー、アップデーター、およびアンインストーラーが含まれています。

1. Starting Package Manager
Maintenance Toolを起動すると、まずintroductionページが開きます。
エンド ユーザーが *Package Manager* を選択してから *Continue* を選択すると、コンポーネントの選択ページに進みます。

2. Selecting Additional Components
[コンポーネント選択ページ]には、インストール可能なコンポーネントと各コンポーネントのリストと簡単な説明が一覧表示されます。 インストール済みのコンポーネントは選択されて表示されます。 
エンドユーザーは、インストールする追加コンポーネントを選択します。 また[リセット] を選択して、現在インストールされているコンポーネントを再度表示できます。

*Continue* を選択すると、次のページに進みます。

3. Installing Selected Components
[更新準備完了ページ]は、ユーザーが *Update* を選択すると、コンポーネントがインストールされたことをエンド ユーザーに通知します。
[更新ページ]には、インストールの進行状況に関する情報が表示されます。エンド ユーザーは、*Show Details* を選択して詳細情報を表示できます。

インストールが完了すると、[アップデート完了ページ]が開きます。

## Removing Components
インストールされているコンポーネントのすべてまたは一部を削除するための既定のワークフローを示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603614/6f4b7d30-a219-b442-2978-98d7f68c3e75.png)

1. Removing All Components
エンド ユーザーが Maintenance Tool を起動すると、[紹介ページ]が開きます。

エンド ユーザーは、[すべてのコンポーネントを削除] を選択してから [続行] を選択して、インストールされているすべてのコンポーネントを削除できます。 
[アンインストールの準備完了] ページでは、ユーザーが [アンインストール] を選択するとアンインストールを開始できることがエンド ユーザーに通知されます。

2. Removing Selected Components
エンドユーザーは、[パッケージ マネージャー] を選択し、*Continue* を選択して、コンポーネント選択ページで削除するコンポーネントを選択できます。
エンドユーザーが削除するコンポーネントの選択を解除し、*Continue* を選択すると、更新の準備完了ページが開きます。ユーザーが *Update* を選択すると、コンポーネントの削除がエンド ユーザーに通知されます。
更新ページには、削除の進行状況に関する情報が表示されます。エンドユーザーは、[詳細の表示] を選択して詳細情報を表示できます。


# Tutorial: Creating an Installer
このチュートリアルでは、小さなプロジェクト用の単純なインストーラーを作成する方法について説明します。

このセクションでは、インストーラーを作成するために実行するために必要な以下のタスクについて説明します。
1. すべての構成ファイルとインストール可能なパッケージを含む、**package directory**を作成します。
2. インストーラーバイナリとオンラインリポジトリのビルド方法に関する情報を含む、**configuration file**を作成します。
3. インストール可能なコンポーネントに関する情報を含む**package information file**を作成します。
4. インストーラーコンテンツを作成し、パッケージディレクトリにコピーします。
5. **binarycreator**ツールを使用してインストーラーを作成します。

インストーラー ページは、構成およびパッケージ情報ファイルで指定した情報を使用して作成されます。

サンプルは、Qt Installer Frameworkリポジトリの examples\tutorial ディレクトリにあります。

## Creating a Package Directory
インストーラーの設計を反映し、将来的にインストーラーを拡張できるようにするディレクトリ構造を作成します。ディレクトリには、**config** および **packages** と呼ばれるサブディレクトリが含まれている必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603614/e13b78ea-9e3c-f4d5-6048-49ccdf3295dc.png)

パッケージディレクトリに関する詳細は、[Package Directory](https://doc.qt.io/qtinstallerframework/ifw-component-description.html)を参照してください。

## Creating a Configuration File
**config** ディレクトリに、次の内容の config.xml というファイルを作成します。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>Your application</Name>
    <Version>1.0.0</Version>
    <Title>Your application Installer</Title>
    <Publisher>Your vendor</Publisher>
    <StartMenuDir>Super App</StartMenuDir>
    <TargetDir>@HomeDir@/InstallationDirectory</TargetDir>
</Installer>
```

構成ファイルは、[introductionページ]に表示される次の情報を指定します。
+ \<Title> : タイトル バーに表示されるインストーラー名。
+ \<Name> : ページ名と紹介テキストに追加されるアプリケーション名。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603614/00611299-ea58-66e4-b8b6-1194d44659fe.png)

その他のelementはインストーラの動作をカスタマイズするために使用します。
+ \<Version> : アプリケーションのバージョン番号
+ \<Publisher> : ソフトウェアの発行者
    + Windows Control Panelなどで表示される
+ \<StartMenuDir> : Windows の [スタート] メニューに表示される製品の既定のプログラム グループの名前。
+ \<TargetDir> : ユーザーに表示されるデフォルトのターゲット ディレクトリが、現在のユーザーのホーム ディレクトリにある InstallationDirectory であることを示します (定義済みの変数 `@HomeDir@` が値の一部として使用されるため)。
    + 詳細については、[Configuration File](https://doc.qt.io/qtinstallerframework/ifw-globalconfig.html)を参照してください。

## Creating a Package Information File
この簡単なシナリオでは、インストーラは com.vendor.product という名前のコンポーネントを 1 つだけ扱います。
インストーラにコンポーネントに関する情報を提供するために、以下の内容で**package.xml**というファイルを作成し、**meta**ディレクトリに配置します。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>Name of component</DisplayName>
    <Description>Component Description.</Description>
    <Version>0.1.0-1</Version>
    <ReleaseDate>2010-09-21</ReleaseDate>
    <Licenses>
        <License name="Beer Public License Agreement" file="license.txt" />
    </Licenses>
    <Default>script</Default>
    <Script>installscript.qs</Script>
    <UserInterfaces>
        <UserInterface>page.ui</UserInterface>
    </UserInterfaces>
</Package>
```

package.xmlの詳細については、[Package Information File Syntax](https://doc.qt.io/qtinstallerframework/ifw-component-description.html#package-information-file-syntax)を参照してください。

### Specifying Component Information
コンポーネント選択ページには、次の要素からの情報が表示されます。
+ \<DisplayName> 要素は、コンポーネントのリスト内のコンポーネントの名前を指定します (1)。 
+ \<Description> 要素は、コンポーネントが選択されたときに表示されるテキストを指定します (2)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603614/12c2de08-bb6f-8fc5-521a-5c96108cc5d8.png)

### Specifying Installer Version
+ \<Version> 要素を使用すると、更新プログラムが利用可能になったときに、その更新プログラムをユーザーに宣伝できます。

### Adding Licenses
+ \<License> 要素は、ライセンス チェック ページに表示されるライセンス契約のテキストを含むファイルの名前を指定します。

### Selecting Default Contents
+ \<Default>要素は、デフォルトでコンポーネントが選択されているかどうかを指定します。値がtrueなら、コンポーネントはデフォルトで選択状態になります。この例では、実行時に値を解決するために、スクリプトを使用しています。
+ \<Script>要素には、JavaScriptスクリプトファイル名installscript.qsを指定しています。

## Creating Installer Content
インストールするコンテンツは、コンポーネントの **data** ディレクトリに格納されます。コンポーネントは1つだけなので、packages/com.vendor.product/dataディレクトリにデータを配置します。この例では、テスト用のファイルを既に置いていますが、基本的にどのようなファイルでも置くことができます。

パッケージ化のルールとオプションの詳細は[Data Directory](https://doc.qt.io/qtinstallerframework/ifw-component-description.html#data-directory)を参照してください。

## Creating the Installer Binary
最初のインストーラを作成する準備ができました。
コマンドラインで examples\tutorial ディレクトリに切り替えます。com.vendor.product で識別されるパッケージを含む YourInstaller.exe というインストーラを作成するために、次のコマンドを入力します。

```:On Windows
..\..\bin\binarycreator.exe -c config\config.xml -p packages YourInstaller.exe
```
インストーラーは現在のディレクトリに作成され、エンド ユーザーに配布できます。
binarycreator ツールの詳細は、[binarycreator](https://doc.qt.io/qtinstallerframework/ifw-tools.html#binarycreator)を参照してください。

チュートリアル インストーラーの実行時にエラー メッセージが表示される場合は、静的にビルドされた Qt を使用してインストーラーを作成したことを確認してください。詳細については、「Qt の構成」を参照してください。