アプリケーションのパッケージングと配布

デバッグとリリース

アプリケーションを配布する際には、次の2種類のビルドが存在します。

  • デバッグビルド:開発段階で使用されるビルド。デバッグ情報が含まれており、サイズが大きく、実行速度が遅い。
  • リリースビルド:最終的な製品として配布されるビルド。冗長な情報が削除されており、サイズが小さく、高速に実行されます。

プログラムのライブラリ依存

実行可能なプログラムは、動作するために外部のライブラリに依存しています。そのため、配布時にはすべての依存ライブラリを含める必要があります。

  • Windows環境では、Dependsというツールで依存ライブラリを確認できます。
  • Linux環境では、lddコマンドを使用して依存ライブラリを確認できます。

プログラムの環境依存

アプリケーションは、実行環境にも依存します。配布時には、次のような方法で実行環境を整える必要があります。

  1. マニュアルによる環境構築(非現実的)
  2. 専用のインストーラーを作成する
    • インストール時に自動的に実行環境を構築できる専用のデプロイメントプログラムを作成。
    • Windowsでは、InstallShieldInno SetupNSISなどのツールが利用可能です。
    • Linuxでは、Shellスクリプトでデプロイメントプログラムを作成できます。

コード例

設定管理クラス

#ifndef APPCONFIG_H
#define APPCONFIG_H

#include <QObject>
#include <QFont>
#include <QSize>
#include <QPoint>

class AppConfig : public QObject
{
    Q_OBJECT

    QFont m_font;
    bool m_toolbarVisible;
    bool m_statusbarVisible;
    bool m_autoWrap;
    QSize m_windowSize;
    QPoint m_windowPosition;
    bool m_valid;

    bool restore();

public:
    explicit AppConfig(QObject *parent = nullptr);
    explicit AppConfig(QFont font, bool toolbarVisible, bool statusbarVisible, bool autoWrap, QSize size, QPoint pos, QObject *parent = nullptr);

    QFont font() const;
    bool isToolbarVisible() const;
    bool isStatusbarVisible() const;
    bool isAutoWrap() const;
    QSize windowSize() const;
    QPoint windowPosition() const;
    bool isValid() const;
    bool save();
};

#endif // APPCONFIG_H

設定管理の実装

#include "AppConfig.h"
#include <QFile>
#include <QDataStream>
#include <QApplication>

AppConfig::AppConfig(QObject *parent) : QObject(parent)
{
    m_valid = restore();
}

AppConfig::AppConfig(QFont font, bool toolbarVisible, bool statusbarVisible, bool autoWrap, QSize size, QPoint pos, QObject *parent)
    : QObject(parent)
{
    m_font = font;
    m_toolbarVisible = toolbarVisible;
    m_statusbarVisible = statusbarVisible;
    m_autoWrap = autoWrap;
    m_windowSize = size;
    m_windowPosition = pos;
    m_valid = true;
}

QFont AppConfig::font() const
{
    return m_font;
}

bool AppConfig::isToolbarVisible() const
{
    return m_toolbarVisible;
}

bool AppConfig::isStatusbarVisible() const
{
    return m_statusbarVisible;
}

bool AppConfig::isAutoWrap() const
{
    return m_autoWrap;
}

QSize AppConfig::windowSize() const
{
    return m_windowSize;
}

QPoint AppConfig::windowPosition() const
{
    return m_windowPosition;
}

bool AppConfig::isValid() const
{
    return m_valid;
}

bool AppConfig::restore()
{
    bool result = true;
    QFile file(QApplication::applicationDirPath() + "/config.dat");

    if (file.open(QIODevice::ReadOnly)) {
        QDataStream in(&file);
        in.setVersion(QDataStream::Qt_5_15);

        in >> m_font;
        in >> m_toolbarVisible;
        in >> m_statusbarVisible;
        in >> m_autoWrap;
        in >> m_windowSize;
        in >> m_windowPosition;

        file.close();
    } else {
        result = false;
    }

    return result;
}

bool AppConfig::save()
{
    bool result = true;
    QFile file(QApplication::applicationDirPath() + "/config.dat");

    if (file.open(QIODevice::WriteOnly)) {
        QDataStream out(&file);
        out.setVersion(QDataStream::Qt_5_15);

        out << m_font;
        out << m_toolbarVisible;
        out << m_statusbarVisible;
        out << m_autoWrap;
        out << m_windowSize;
        out << m_windowPosition;

        file.close();
    } else {
        result = false;
    }

    return result;
}

まとめ

  • 開発中にはデバッグビルドを使用し、最終的な配布にはリリースビルドを使用する。
  • 配布時には、依存するライブラリをすべて含める必要がある。
  • 特定の実行環境が必要な場合は、専用のインストーラーを作成して環境を構築する。
  • Windowsでは、InstallShieldInno SetupNSISなどのツールが利用可能。
  • Linuxでは、Shellスクリプト.deb.rpm形式で配布が可能。

タグ: Qt C++ アプリケーション配布 ライブラリ依存 インストーラー

5月24日 12:43 投稿