Strawberry Perl(Portable)でPerlスクリプトのexeファイル化

Perl

記事をご覧の方へ

現在vivibit.netは旧システムからの移行に伴い修正作業を行っています。
表示上の問題や軽微なエラーが発生する可能性がありますが、ご利用に問題はありません。
また、現在一部ファイルのダウンロードができなくなっています。
順次対応予定ですが、お急ぎの場合や問題を発見された場合はコメント欄でご指摘いただけると助かります。


ふと思った時にPerlスクリプトをexeファイル化できるようにやり方を記しておく。
なおこれはexeファイル内にzip圧縮してあるスクリプトを一時フォルダに展開して実行する仕組みだった。
今回Portable版でやっているが、Portable版ではないやつでもほぼ同じ手順になる。

Strawberry Perl(Portable)の導入と実行

Strawberry Perlの導入方法について。
公式ページよりAll releasesを開く。
http://strawberryperl.com/releases.html

いろいろバージョンがあるが、今回はver 5.24.0.1 / 64bitの中の
「64bit PortableZIP edition」を使った。
記事を書いている時点でのファイルは、strawberry-perl-5.24.0.1-64bit-portable.zip になる。
(SHA1:40094b93fdab1057598e9474767d34e810a1c383)

ダウンロードしたら適当な場所に展開する。
(ちなみにzipは120MBぐらいだけど、展開すると400MBちょいあった。結構大きい。)
strawperl-explorer

展開したら、portableshell.batを実行する事により、
環境変数の設定されたコマンドプロンプトが開くようになっている。

Portable版の場合、基本的にココからいろいろ実行していくことになる。
strawperl-shellcmd

PAR::Packerモジュールのインストール

次にPerlスクリプトをexe化するモジュールのPAR::Packerをインストールする。
Strawberry Perlにはcpanm及びCPANが同梱されているので、これを使ってモジュールを入れる。

前項のように開いたコマンドプロンプトで以下のコマンドの様に実行する。
cpanm PAR::Packer --force

どうもtestで失敗するようだったので強制インストールオプションを付けている。

依存関係は問題なく入ってくれていたのでたぶん大丈夫だと思う。
strawperl-cpanm-par

PARでPerlスクリプトのexeファイル化

無事PAR::Packerのインストールが済めば、次からは
pp -o ohayou.exe ohayou.pl

のようにしてスクリプトをexe化する事ができるようになる。

(-o [出力ファイル名] のオプションを指定しない場合、a.exeに出力される。)
今回は以下のohayou.plをexeにしてテストした。

[perl]
print "Ohayou, Sekai-chan.\n";
sleep(10);
[/perl]

コマンドプロンプトからではなく、出来たexeファイルをダブルクリックしてもちゃんと起動する。

strawperl-par-packed
--gui オプションを付けると実行時のコンソールを出なくできる。
--icon iconfile.ico オプションでアイコンを変える事ができる。

その他使い方は以下のヘルプ(バージョンが古いけど)とかでチェック。
http://perldoc.jp/docs/modules/PAR-0.75/script/pp.pod

出来るexeファイルの挙動について

作った実行ファイルを実行すると、
C:\Users\(ユーザー名)\AppData\Local\Temp\par-(16進数の並び)\ に展開して実行している模様。
実行後に削除はされないみたいなので、数回だけ他の環境で実行したい、みたいなやつに使うのが良いか。
拡張子をzipに変えてアーカイバで開いても同様に元のスクリプトが取り出せるので、見られると困るようなやつにはダメかな。

strawperl-exe-view

この記事を書いた人

この記事は過去に「ビビビッ」に在籍したライターが書いたものです。
記事の著作権は各ライターに帰属します。

編集者をフォローする
Perl
スポンサーリンク

コメント

  1. […] 参考ページ: Strawberry Perl(Portable)でPerlスクリプトのexeファイル化 […]

タイトルとURLをコピーしました