カテゴリー別アーカイブ: Strawberry Perl

Strawberry Perl PortableZIP editionをファイルサーバに置いて使用する

Strawberry Perlは、Windows用Perlの実装の1つです。リリースには複数の種類があり、「PortableZIP」というエディションも用意されています。これにはStrawberry Perlの関連ファイルがまとめられており、PC上に展開するだけで、インストールする事無く実行する事ができます。

そして、この展開したファイル群をファイルサーバに置いても実行させる事ができるので、(信頼されたネットワーク内に限るべき、ですが、)ファイルサーバにアクセスできるWindows PCであれば、事前に何の準備もする事なく、Perlスクリプトを実行できます。

例えば、拙作のWAF+PSGI serverのOneman、OnemanベースのWebアプリと合わせてファイルサーバに置く事で、ネットワーク内の全てのPC上でWebアプリを動作させる事ができます。

ファイルサーバへの配置

例として、以下のように、Strawberry Perl、Oneman、Webアプリモジュール、Webアプリ実行用Perlスクリプト、Perl実行用バッチファイルを配置します。
32bit用だけを置いておけば64bit PCでも動作しますが、ここでは環境変数を参照して、実行するプログラムを振り分けてみます。

\\Server\share\strawberry-perl-5.16.2.1-32bit-portable\
\\Server\share\strawberry-perl-5.16.2.1-64bit-portable\
\\Server\share\Oneman.pm
\\Server\share\MyWebApp.pm
\\Server\share\mywebapp.pl
\\Server\share\mywebapp.bat

MyWebApp.pm

Oneman WAFを使用したWebアプリケーションを作成します。
例としてHello, world!を表示するだけのアプリですが、次に作成するmywebapp.plから$Binを渡す等でファイルサーバのパスが取得できるので、ファイルサーバに対するファイルI/Oを行う事もできます。
もしくは$ENV{USERPROFILE}等を参照して、ローカルPCにファイルを保存してもよいかもしれません。

# MyWebApp.pm
package MyWebApp;
use base 'Oneman';
sub app {
    my ($self) = @_;
    $self->write('Hello, world!');
    return;
}
1;

mywebapp.pl

MyWebAppを動作させるためのスクリプトを作成します。
OnemanはPSGIサーバも内蔵しているため、$psgi_appからstart()メソッドを実行する事によりローカルPCでWebサーバが起動します。
start()メソッド(実体はOneman::oneman())のpreforkオプションを使い、ソケットをオープンした後、BUILDERとWORKERをforkする前に、ブラウザを起動させる処理を加えています。
また、jQuery等の静的ファイルも合わせて配置し、staticオプションにより出力させる事もできます。

# mywebapp.pl
use FindBin qw( $Bin );
use lib $Bin;
require MyWebApp;
MyWebApp->psgi_app->start(
    prefork => sub { system('START http://localhost:5000/') == 0 },
);

mywebapp.bat

mywebapp.plを実行するためのバッチファイルを作成します。
環境変数によりOSが32bitか64bitかを判別して実行ファイルを振り分けます。決定したperl.exeによりmywebapp.plを実行します。

# mywebapp.bat
@ECHO OFF

IF %PROCESSOR_ARCHITECTURE% == "x64" (
    SET PERL=\\Server\share\strawberry-perl-5.16.2.1-64bit-portableperl\bin\perl.exe
) ELSE (
    SET PERL=\\Server\share\strawberry-perl-5.16.2.1-32bit-portableperl\bin\perl.exe
)

%PERL% \\Server\share\mywebapp.pl

実行

以下のコマンドをローカルPCのコマンド プロンプトから実行します。

>\\Server\share\mywebapp.bat

もしくは、バッチファイルなのでショートカット (.lnk) を作成しておくと便利です。

Webサーバが起動した後に、自動的にブラウザが起動して、Webアプリのトップページが表示されます。

まとめ

このように、Strawberry Perl PortableZIP editionをファイルサーバに展開して使用すれば、特別にWebサーバを用意する事なく、複数のPCでPerlベースのWebアプリを動作させる事ができます。

ただし、ネットワーク上に置いたファイルをローカルPCで実行する事になるので、セキュリティポリシーによっては正常に動作しないかもしれません。また、動作する場合においても、それらファイルが悪意あるユーザから不正に書き換えられないようにするため、一般ユーザには読み込みのみが可能になるよう管理者が配置する、等の工夫が必要です。