CPAN未公開のCatalyst::Plugin::UploadProgressを試す

はじめに

Catalystの開発コードがあるリポジトリを見ていると、興味深いプラグインを発見しました。そのプラグインとは、ファイルのアップロードの途中経過をプログレスバーで美しく表示するCatalyst::Plugin::UploadProgressです。残念ながら、このプラグインはまだCPANに登録されていません。そこでこのエントリでは、まだCPANで公開されていないCatalyst::Plugin::UploadProgressに含まれているデモアプリを動作させるまでの経過をレポートします。

準備: プロキシの配下でリモートのリポジトリからsvn checkoutできるようにする

プロキシの配下にあるマシンでCatalyst::Plugin::UploadProgressのコードをチェックアウトするには、まずプロキシの設定が必要です。以下の要領で設定を行うとうまくいきました。

$ vi ~/.subversion/servers
[global]
http-proxy-host = my.proxy
http-proxy-port = 8080
http-proxy-username = my.id 
http-proxy-password = my.password
http-compression = no

リポジトリからのチェックアウト

Catalyst::Plugin::UploadProgressのソースコードリポジトリからチェックアウトします。

[ysano@fedora ~]$ mkdir -p svn/catalyst/
[ysano@fedora catalyst]$ cd svn/catalyst/
[ysano@fedora catalyst]$svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/Catalyst-Plugin-UploadProgress

試行錯誤: テストサーバが起動するまでの道のり

お目当てのプラグインソースコードは無事ゲットできました。このプラグインディレクトリを眺めていると、exampleというディレクトリが目に入りました。もしかして?と思って、exampleディレクトリを潜って色々見ていると、どうやらこのプラグインのデモアプリであることがわかりました。(にやり☆)

早速、Catalystのテストサーバを起動しようと思いましたが、実行権限が付いていませんでした。残念。ということで、実行権限を付けました。

[ysano@fedora catalyst]$ cd Catalyst-Plugin-UploadProgress/example/Upload
[ysano@fedora Upload]$ chmod +x script/*.pl

これで、大丈夫と思ってテストサーバを起動してみると、うまくいきませんでした。エラーメッセージを見ると、Catalyst::Plugin::UploadProgressが@INCに入っていないようでした。そこで、とりあえず環境変数PERL5LIBにパスを通しました。

[ysano@fedora Upload]$ export PERL5LIB=/home/ysano/svn/catalyst/Catalyst-Plugin-UploadProgress/lib

もう、これで次こそ大丈夫と思ってテストサーバを起動すると、またエラーが。。。いくつかCPANモジュールが不足しているようでした。そこで、いつものようにモジュールをインストールしました。

[ysano@fedora Upload]$ sudo perl -MCPAN -e 'install Data::Uniqid'
[ysano@fedora Upload]$ sudo perl -MCPAN -e 'install Catalyst::Plugin::Cache::FastMmap'

今度こそ、動作すると思いましたが、今度は-fオプションを付けろと怒られました。

[ysano@fedora Upload]$ ./script/upload_server.pl
[...]
[Tue Nov 22 18:27:32 2005] [catalyst] [info] Upload powered by Catalyst 5.56
Error: Standalone server must be run with the fork flag (-f) for this demo

あと-fオプションを付ければ絶対動くはずと思い、-fオプション付きでテストサーバの起動を試みると、見事起動できました。

[ysano@fedora Upload]$ ./script/upload_server.pl -f
[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Debug messages enabled
[Tue Nov 22 18:33:52 2005] [catalyst] [warn] You are running an old script!

  Please update by running:
    catalyst.pl -nonew -scripts Upload

[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded plugins:
.------------------------------------------------------------------------------.
| Catalyst::Plugin::Session::FastMmap                                          |
| Catalyst::Plugin::Cache::FastMmap                                            |
| Catalyst::Plugin::UploadProgress                                             |
| Catalyst::Plugin::Static::Simple                                             |
'------------------------------------------------------------------------------'

[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded dispatcher "Catalyst::Dispatcher"
[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded engine "Catalyst::Engine::HTTP"
[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Found home "/home/ysano/svn/catalyst/Catalyst-Plugin-UploadProgress/example/Upload"
[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded components:
.-------------------------------------------------------------------+----------.
| Class                                                             | Type     |
+-------------------------------------------------------------------+----------+
| Upload::C::Upload                                                 | instance |
| Upload::V::TT                                                     | instance |
'-------------------------------------------------------------------+----------'

[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded Private actions:
.----------------------+----------------------------------------+--------------.
| Private              | Class                                  | Method       |
+----------------------+----------------------------------------+--------------+
| /default             | Upload                                 | default      |
| /end                 | Upload                                 | end          |
| /upload/done         | Upload::C::Upload                      | done         |
| /upload/progress     | Upload::C::Upload                      | progress     |
| /upload/form         | Upload::C::Upload                      | form         |
| /upload/default      | Upload::C::Upload                      | default      |
| /upload/receive      | Upload::C::Upload                      | receive      |
'----------------------+----------------------------------------+--------------'

[Tue Nov 22 18:33:52 2005] [catalyst] [debug] Loaded Path actions:
.--------------------------------------+---------------------------------------.
| Path                                 | Private                               |
+--------------------------------------+---------------------------------------+
| /upload/done                         | /upload/done                          |
| /upload/form                         | /upload/form                          |
| /upload/progress                     | /upload/progress                      |
| /upload/receive                      | /upload/receive                       |
'--------------------------------------+---------------------------------------'

[Tue Nov 22 18:33:52 2005] [catalyst] [info] Upload powered by Catalyst 5.56
You can connect to your server at http://fedora:3000

デモアプリ(Catalyst Upload Progress Demo)を試す

ちょっとワクワクしながら、http://fedora:3000にアクセスすると、ファイルアップロードのためのフォームが表示されました。fedoraはLANで接続されており、プログレスバーが一瞬で満タンになると面白くないと思い、少し大きめのファイルをアップロードすることにしました。2005/11/11に行われた はてな技術発表会のビデオファイル(61.1MB)を試しに使いました。

アップロードするファイルの選択をして、「実行」ボタンをいざクリックすると、凄い綺麗なプログレスバーが表示されて感動しました。Web2.0の時代にふさわしいデモアプリですよ、これは。スナップショットでは伝えられませんが、アップロードが完了するとプログレスバーがフェードアウトします。カッコいいです。


おわりに

何でこんなに素晴らしいプラグインCPANでまだ公開されていないのか、不思議に思いました。興味のある方はCatalystの開発リポジトリからソースコードをゲットして試してみて下さい。実際に動かす方が実感が持てると思います。