Perl: 2012年4月アーカイブ
前回の記事 では
とっても簡単なじゃんけんアプリを作ってみました。
今回は wxFormBuilder というGUIビルダー、RADを使って
書き換えてみましょう。
じゃんけんアプリでは、 フレーム や パネル や ボタン や サイザー をコードで組み立てていました。
wxFormBuilder を使えば、これらのデザインは
GUIビルダー側で行ないxrcファイルに保存、コード側ではxrcファイルを読み出しイベントハンドラを登録するだけになります。
DBやデータに基いてGUIの構成を細かく組み立てる場合はXRCは向きませんが、予め決まっている場合はコードで組み立てるより気楽だと思います。
まずは wxFormBuilder をインストールしましょう。
wxFormBuilder_v3.1.70.exe を入れてみます。
wxFormBuilderを起動したら、下のようにレイアウトします。
レイアウトできたら、メインの設定を変更しましょう。
nameとfileを変更します。
最後にXRCを書き出すためチェックを入れ、ボタンを押してそれぞれ janken.fbp, janken.xrc を保存しましょう。
前回のjanken.plを変更し、janken_xrc.plとします。
次のコマンドで起動します。
- portableshell.bat
- perl janken_xrc.pl
上手く起動できたでしょうか。

それぞれのシンプルなサンプルを動かしてみましたので、その起動速度のメモします。
体感時間なので当てになりませんが、次のような感じでした。
- WxPerl 1秒未満
- WxPython 1秒未満 (気持ちWxPerlより速いかも)
- WxRuby 8秒ぐらい
使ったコードは次です。
Rubyのコードは wxRubyでGUIプログラミング をそのまま使わせていただきました。
コードが等化ではありません。
ですが、それぞれの各種サンプルを動かしてみたところ、上記の体感時間に関しては
だいたい当てはまる感じがしています。
サンプルは次を動かしてみました。
- WxPerl http://search.cpan.org/perldoc?Wx::Demo
- WxPython C:\Program Files\wxPython2.8 Docs and Demos\samples\
- WxRuby C:\wxruby\samples
環境は Core 2 Duo 2.13G Macbook Air の VMWare Fusion の WindowsXP 上です。
帳票印刷を真面目にやろうとすると、色々問題が出てくると思います。
- ExcelやAccessを使い、OLEでアクセスするも、Officeが入っていなくては使えない。
- Crystal ReportsはVisual Studio 2010からバンドルされなくなった。
- 商用ライブラリを利用するには、お金が掛かる。
- 自分でレイアウトするにしてもレイアウトを計算して、デバイスコンテキストにレンダーするのが難しい、面倒。
- rubyにはとっても良いものがあるようです! ThinReports
Webアプリのようにテンプレート言語でTableタグを含むHTMLを作成して
それをPDFに変換できたら良いのに・・・と思い付きました。
wkhtmltopdf はSafariやChromeで使用されている
HTMLレンダリングエンジン Webkit をCUIから扱えるようにパッケージングしたものです。
Windows環境では、wkhtmltopdf.exeとして用意されています。
Sumatra PDF PDF用のフリーソフトです。CUIからも使えます。印刷とプレビューに使用します。ダウンロードはポータブル版がオススメです。
それでは組み合わせてみましょう。
- Text::MicroTemplateを使って、HTMLを作成します。
- wkhtmltopdfを使って、HTMLをPDFへ変換します。
- Sumatra PDFを使って、PDFを印刷、又はプレビューします。
contrib以下にダウンロードしました。

下記を chohyo.pl として保存します。
- portableshell.bat
- perl chohyo.pl
で、chohyo.htmlとchohyo.pdfを書き出します。
- perl chohyo.pl --preview
で、Sumatra PDFでchohyo.pdfを開きます。
- perl chohyo.pl --printer
で、Sumatra PDFでchohyo.pdfを印刷します。
前回 はUrladerを使って
ソースの一群を.exeに纏めてみました。
これを実行すると、C:\Documents and Settings\<ユーザー名>\Application Data\urlader\Janken\i-<バージョン> には素のソースコードが展開されてしまいます。
今回は、Filter::Crypto::CryptFileを使ってjanken.plを難読化してみたいと思います。
以下を crypt.pl として保存してください。
- portableshell.bat
- perl crypt.pl
を実行すると、janken2.plという難読化されたファイルが出力されます。
これはこのまま perl janken2.pl として実行できます。
じゃんけん.plを exe にしてみる の
pack_janken.pl内で、難読化したいファイルのみcrypt_fileを適用するようにしておけば
exeのパッケージング時に自動的に行なわれるようになると思います。
Filter::Cryptoで難読化したファイルは 復号化できないわけではない
のですが、実用上はこの程度で十分な場合もあると思います。
前回 は WxPerl で簡単な janken.pl を作成しました。
今回はperl環境をインストールしなくても簡単に実行できるように
単独のexeにしてみたいと思います。
方法いろいろ
色々な方法があると思います。
Urladerを使ってみる
ここではUrladerを使って exe にしてみます。
Urlader-1.0そのままだと、起動時に問題が出ますので、パッチを当ててインストールします。
- portableshell.bat
- cpan
- look Urlader
- lwp-request http://bokut.in/mt/2012/04/24/urlader-rt76135.patch | patch -p1
- perl Makefile.PL
- dmake
- dmake install
- exit
下記のパッケージングするためのスクリプトを pack_janken.pl として保存してください。
pack_janken.plの実行には List::Compare が必要ですので、こちらもインストールしてください。
pack_janken.plを実行してexeを作ってみましょう。
- portableshell.bat
- lwp-download http://urlader.schmorp.de/prebuilt/1.0/windows-x86 windows-x86
- perl pack_janken.pl
janken.exeが出きたら成功です。
C:\Jankenに
- Perl環境
- モジュール
- janken.pl
をコピーし、実行できる環境を用意しました。
(この時点でC:\Jankenだけ持ち歩けば、実行できるようになりました)
UrladerでC:\Janken以下を janken.exe に固めます。
janken.exeをダブルクリックすると起動できると思いますが如何でしょうか。
これでStrawberry Perl環境やjanken.plを持ち歩かなくても、janken.exeだけ持ち歩けば
実行できるようになりました。
実行時は次のように動きます。
- C:\Documents and Settings\<ユーザー名>\Application Data\urlader\Janken\i-<バージョン> に固めたC:\Jankenを展開。
- 上記ディレクトリをカレントディレクトリとして、wperl.exe janken.plを実行。
展開されたディレクトリは削除されません。
2回目移行の実行時に再利用されるので、1回目に比べ起動時間がとても短かくなります。
なお作ったjanken.exeは こちら になります。
前回 の記事では WxPerl をインストールしました。
今回は凄く簡単なじゃんけんアプリを作ってみたいと思います。
下記をjanken.plとして保存してください。
- portableshell.bat
- perl janken.pl

コマンドラインではなく、ダブルクリックで起動したい場合は
perl.exeと同じディレクトリにあるwperl.exeのショートカットを作り
プロパティで調節します。

前回 はStrawberry PerlにCPANモジュールを入れてみました。
今回はGUIツールキットのCPANモジュール WxPerl をインストールして、メッセージボックスを出してみます。
WxPerlはC++で書かれたGUIツールキットの WxWidgets をPerlから使えるようにしたものです。
WxWidgetsはOSの標準的なGUIの見た目に近いという特徴があります。
- portableshell.bat
- cpan
- install Wx (長く時間が掛かるのがネックです・・・自分の環境では22分かかります。ActivePerlを使えば、数分で終わりますが、ここでは辛抱することにします。また Strawberry Perl Professionan にはWx, Moose, Catalyst, DBIx::Classなどヘビー級なものが全て含まれています。)
- exit
- perl -E "use Wx; Wx::MessageBox('Hello Wx')"

Strawberry PerlもActivePerlも CP932 で表せない日本語ファイルを扱うのには一工夫必要です。
ここでは Win32::Unicode を使ってみます。
作者様の詳しい 文章 がありますので、下ではサンプルを行なってみました。
備考
Windowsにはファイルを扱うためのAPIとして CreateFileA と CreateFileW が用意されています。
CreateFileAは渡されたファイル名を、通常CP932として扱かいます。(現在のコードページに依存)
CreateFileWは渡されたファイル名を、UTF-16LEとして扱います。
上記の例の「萌え♥.txt」はCP932では表せないので、最終的にCreateFileAが呼ばれる場合は問題が起きます。Strawberry PerlとActivePerlのopenがそうです。
Win32::Unicodeでは最終的にCreateFileWを呼ぶので正しく「萌え♥.txt」を扱えます。
他の処理系
- Strawberry PerlとActivePerl
openはCreateFileA、Win32::UnicodeはCreateFileW
- CygwinのPerl
openでCreateFileWが使えます。
- Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
open(u'萌え♥.txt', 'w') で正しく扱えました。
- ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
下記では正しく扱えないようです。
# -*- encoding: utf-8 -*-
file = File.open("萌え♥.txt", "w")
前回 はStrawberry Perlを入れてみました。
今回はCPANモジュールを入れてみましょう。
- portableshell.batをダブルクリックして、コマンドプロンプトを立ち上げる。
- cpan
- install <インストールしたいモジュール>

ここではWindowsで日本語ファイル名を扱かうのに欠かせないモジュール Win32::Unicode を入れてみました。
モジュールのインストールには少し時間が掛かります。
典型的には次のようなステップで処理が行なわれます。
- look Win32::Unicode (ファイルの取得、展開、展開先に移動)
- perl Makefile.PL (makefileの作成)
- dmake (makefileに従って、実行、コンパイル)
- dmake test (t/以下のファイルに記述されたテストを実行)
- dmake install (出来たファイルのインストール)
また、ActivePerlを使うと、ppmという完成済みのファイルが用意されていれば
GUIのフロントエンド「Perl Package Manager」からクリックするだけでインストールが出来ます。
こちらは、上記のステップを踏まないので、とても速く完了します。
日々更新されている 新しいバージョンのモジュールを
入れる場合はppmが用意されていない場合があるので、cpanで入れることになりますが
そうでない場合は「Perl Package Manager」はとても便利です。
ActivePerlと並んでWindowsで使えるPerl, Strawberry Perlを使ってみたいと思います。
Strawberry Perl
Strawberry Perlは次で公開されています。
最新版の Strawberry Perl Nov 2011 では、次の形式のものが用意されています。
種類
MSI installer exe形式ではない、msi形式のものです。
ダブルクリックでインストーラを起動し、c:\strawberry\ 以下にインストールし スタートメニューにアイコンが登録されます。 環境変数のPATHに C:\strawberry\perl\bin が追加されます。Portable edition zip形式のものです。インストーラーは使用せず、展開するだけです。
展開するフォルダの場所は、ドライブやパスを問わず、どこにでも置けます。
環境変数のPATHは、変更されません。
付属の portableshell.bat を起動すると、PATHが設定されたコマンドプロンプトが立ち上がり そこから起動したPerlは @INC(モジュールを読み込むフォルダ) が自動的に調節されます。ZIP edition 付属の relocation.pl.bat と update_env.pl.bat を使って、手動で任意の場所にインストール するものです。
MSM Strawberry Perl自体をパッケージングする工程はモジュールになっていて、自身で行うこともできます。
上記のmsi形式をパッケージングする際に Perl::Dist::WiX によって作成されたmsmファイルです。
自身でパッケージングする際にmsmファイルを使用することもできます。
自身で作成したモジュールなどをバンドルして .msi 形式のインストーラーを作成したい場合などに便利です。
インストール
ここでは環境を汚さない Portable edition を使いたいと思います。
strawberry-perl-5.14.2.1-32bit-portable.zip
をダウンロードして展開します。
portableshell.bat をダブルクリックして、コマンドプロンプトを立ち上げます。
perlを起動してみます。
perl -E "say 'Hello World'"

Windows で Perl が使用できるようになりました。
なお、アンインストールする際は、展開したフォルダ毎削除するだけです。

