Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】EXEのファイルサイズ節約方法

Delphiでコンパイルしたアプリケーション(EXE)ファイルは、
それなりに大きなファイルサイズを持っています。

新規作成して何もせずコンパイルしただけのEXEでも
Delphi 11 Alexandria(弊社環境)だと11.2MBもあったりします。

これらのファイルサイズを節約したいとお悩みの方のために、
解決方法を3つご紹介します。

 


①ビルド構成をDebugからReleaseに変更する

アプリケーションのビルド構成には以下のような違いがあります。

  • Debug構成(デバッグモード)
    • 初期値。主にデバッグ情報をコンパイルされるプログラムに埋め込みます。
      名前の通りデバッグに適しています。
  • Release構成(リリースモード)
    • デバッグ情報を除いた、運用環境への配布に適した状態でプログラムをコンパイルします。
      基本的にデバッグはできません。

初期値のDebug構成のままコンパイルしたり、
運用環境へモジュールの配布を行っている場合が多いかもしれませんが、
Release構成でコンパイルを行うと余計なデバッグ情報が除かれるため
ファイルサイズが軽くなります。

冒頭の「Delphi 11 Alexandriaで新規作成して何もせずコンパイルしただけのEXE」の場合、
Release構成でコンパイルした場合のファイルサイズは2.2MB(約1/5)となりました。

 

ただしメリットばかりではなく注意点もあります。

まずRelease構成でコンパイルされたモジュールの場合、
一切のデバッグ情報を持たないためデバッグができません。
(ブレークポイントを設定しても止まりません)

またプロジェクトオプションの各設定項目は
「Debug構成」「Release構成」で別々に保持されており
コンパイル先フォルダやアイコンの設定、バージョン情報などを
初期値からカスタマイズしている場合は、個別に設定が必要になります。

 


②不要なデバッグ情報を含めない設定でコンパイルする

上記①のプロジェクトオプションをビルド構成ごとに設定するのが手間な場合はこちら。
手っ取り早くファイルサイズを節減でき、ビルド構成の切り替えを忘れるリスクもありません。

プロジェクトオプションの「Delphi コンパイラ」の中にある
「リンク」という項目の『デバッグ情報』がTrueになっていると、
内部でデバッグのための情報が埋め込まれるためファイルサイズが増大します。

この設定をFalseに変更すれば、Debug構成のままでも
手軽にファイルサイズを軽量化でき、またデバッグも可能なままです。

こちらでもRelease構成時と同じように、冒頭の
「Delphi 11 Alexandriaで新規作成して何もせずコンパイルしただけのEXE」
を作成してみたところ、Release構成時とほぼ同じ2.2MB(約1/5)となりました。

なお「リンク」ではなく「コンパイル」のノードにも
「デバッグ情報」という項目がありますが、
こちらの設定値を「デバッグ情報なし」に変更すると
ファイルサイズはさほど変わらず、デバッグもできなくなってしまいます。

こちらの設定を変更してもファイルサイズ節約の効果はない

 


③UPXMaskを使う

外部のフリーソフトでEXEファイル自体を圧縮する方法も存在します。

UPXMaskの詳細情報 : Vector ソフトを探す!

こちらの『UPXMask』は20年以上前から存在する、
32bitのEXEファイルをそのまま圧縮できるツールです。
Delphiで作成したアプリケーション以外も圧縮可能です。

このソフトウェアが出回った21世紀初頭にはブロードバンドがまだ一般家庭に普及しておらず、
とにかくファイルを軽くすることが至上命題になる際には非常に重宝されていました。

こちらのような画面でファイルを指定すると、実行モジュールを軽量化できます。

凄いポイントとして、圧縮率を設定出来たり、
可逆圧縮のためファイルサイズを元に戻すことも可能です。

 

ただしこちらのソフトウェア使用にあたっては以下の点にご注意下さい。

  • 64bitアプリケーションは圧縮できません。
  • アプリケーションによっては正しく圧縮されず、ファイルが壊れてしまうリスクがあります。
    既存のEXEを圧縮する際は必ず事前にバックアップを取って下さい。
    (弊社環境で色々試したところ、Delphi/400のインストーラが壊れました。)
  • なにぶん20年以上前のソフトウェアのため、内部の仕組みや作者について現在では一切不明です。
    何らかの問題が発生した場合でも弊社でのサポートは承りかねます