2026/03/12(木)Strawberry PerlでImage::Magick, DBD::Pg, DBD::mysqlをEXE化
最新のStrawberry Perl 5.42で、PerlMagickを含むWindows用EXEを生成する方法。
Strawberry Perlのインストール
Strawberry Perlのサイトから、ダウンロードしました。現時点で最新は「5.42.0.1」。形式はどれでも構わないと思いますが、個人的にPortableを選びました。
以下 c:\strawberry-perl-5.42.0.1 にインストールしたものとして話を進めます。
Image::Magickのインストール
ppmからはインストールできません。以下インストール手順です。
ImageMagick(アプリ)のインストール
ImageMagcik公式サイトからDLL版をインストールします。static版ではImage::Magickが利用できません。
- ImageMagick-7.1.2-15-Q16-HDRI-x64-dll.exe
- ImageMagick-7.1.2-15-Q8-x64-dll.exe
何でも良いですが、個人的に下を選択しました。インストール時に以下のダイアログで、一番上と「C/C++ヘッダをインストール」をチェックしてください。

一番下はチェックしても成功しましせん。*1
Image::Magick(Perlモジュール)のインストール
metacpanなどからImage::Magick(Image-Magick-7.1.2-3.tar.gz等)をダウンロードし、任意のフォルダに展開します。
Makefile.PLを開き、以下の行を修正します。*2
# C compiler #'CC' => 'gcc -std=gnu99 -std=gnu99', 'CC' => 'g++',
続いて、Strawberry Perlを実行し、Image::Magickを展開したフォルダに移動します。ここで、Image::Magickをビルドしてインストールします。
perl Makefile.PL gmake gmake test gmake install
アプリのImageMagickに PATH が通ってないと、最初の「perl Makefile.PL」に失敗するので注意してください。
※参考資料: How to install Image::Magick to Strawberry Perl on Windows-10?
Image::Magickパッケージ化の準備
このままだと、ImageMagick(アプリ)が入っていない環境ではうまく動作しません。対策として、ImageMagick側のライブラリを丸ごと Perl の中にコピーしておきます。
ImageMagick-7.x.x内の以下のファイルを、c:\strawberry-perl-5.42.0.1\perl\site\lib\auto\Image\Magick(Magick.xs.dllがある場所)にコピーします。
- modules をディレクトリごと
- .xml ファイルすべて
- .dll ファイルすべて
CPANの初期設定
コンパイル済パッケージをインストールできるppmが廃止されたようなので、cpanコマンドを使用して、欲しいものはソースからインストールします。
cpanをまず最初に初期設定します。
cpan cpan> o conf init pushy_https
パッケージインストール。
cpan PACKAGE::NAME
テストなしでインストール。
cpan -T PACKAGE::NAME
DBD::mysqlのインストール
MySQL用クラアイントライブラリの用意が大変なので、MariaDB用クライアントライブラリを使用して、DBD::mysqlを構築します。
- MariaDBのクライアント用ライブラリが必要なためMinGW用パッケージをダウンロードして解凍。bin/ lib/ などの4フォルダを、strawberry-perl-5.xx\c 以下に、上書きコピーします。
- 上のバイナリはcurl依存して面倒なので、代わりに手元でソースから構築したバイナリを置いときます。
- DBD::mysql v4.051をダウンロードします。*3
- ファイルを展開し、Strawberry Perl上で、そのフォルダに移動します。
- ビルドしてインストール。
c:\>perl Makefile.PL --cflags=-IC:\strawberry-perl-5.42.0.1\c\include\mysql c:\>gmake c:\>gmake install
同じ方法で「DBD::MariaDB v1.22」*4もインストールできます。ただ DBD::MariaDB は、入出力時のutf8フラグが強制onになっている(オフにできない)ために、プログラムによっては文字化けに苦しむことになります。
ライブラリごとEXE化
例えばこんな感じで、パッケージ化可能てす。
pp -M Image::Magick -o test.exe test.pl
実行ファイル(.pl)にて、use しているものはオプション指定をしなくても自動的にパッケージングされます。動的に使用しているモジュールについては -M オプションが必要です。
Perlのモジュールの中には、外部dllを必要とするものがあります。C:\strawberry-perl-5.42.0.1\c\bin に必要なdllは配置されていますが、外部DLLファイルは明示的に指定しない限り、パッケージに含まれません。
例えば、Net::SSLeayモジュールを使用する場合は、以下のようになります。
pp -M Net::SSLeay -l libcrypto-3-x64__.dll -l libssl-3-x64__.dll -l zlib1__.dll -o test.exe test.pl
こうして書き出すとオプションが長くなり入力が面倒なので、pp.opt というファイルを用意してその中にオプションを書いておきます。adiaryでの使用例なども参考に。
pp @pp.opt
必要dll一覧
Strawberry Perl 5.42.0.1の場合。
- Net::SSLeay
- libcrypto-3-x64__.dll, libssl-3-x64__.dll, zlib1__.dll
- DBD::Pg
- libpq__.dll, libcrypto-3-x64__.dll, libssl-3-x64__.dll, zlib1__.dll
- DBD::mysql(※libmariadbをソースからインストール時*5)
- libmariadb.dll
-aオプション
- a オプションを指定すると、特定のディレクトリを丸ごと収めることがきます。例えば、
-a "C:/strawberry-perl-5.26.2.1/perl/site/lib/Image;site/lib/auto/Image"
とすることで、ppm を使って導入した Image::Magick の.dllをEXEに含めて、展開時に site/lib/auto/Image に配置することができます。ppmが存在する時(以前)は、この方法を使用していました。
その他、補足
- スクリプト内で、スレッド生成やforkをしている場合は、スクリプト最初の方で「use Image::Magick」しておきます。そのほうがメモリの節約になります。
- Strawberry Perl 5.42.0.1 には「多くの追加パッケージ(perl/vendor/lib以下)」が標準で含まれています。
- DBD::Pg, PAR::Packer, Net::SSLeay, CryptX等
まとめ
- Image::Magickモジュールごと、PerlスクリプトをEXE化できるようになりました。
- 新しいStrawberry PerlでもImage::Magickを使用可能になりました。