Powered by
Movable Type 3.35

メイン

カテゴリー:Perl

Test::WWW::Declareで宣言的にWebアプリをテストはてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加

こんにちは。
つくるぶガイドブログ Perl担当の西山です。

Perlカテゴリーのエントリーでは、CPAN(世界中のPerlプログラマーが作成しているライブラリを集約したアーカイブ)に登録されているモジュールの中から、便利だったりコードが格好良かったり、Perlならではの魅力を持っているようなモジュールを取り上げていこうと思っています。
よろしくお願いします!

Test::WWW::Declareモジュールについて

というわけで、一発目は Test::WWW::Declare モジュールをご紹介します。

今年の春のYAPC::AsiaでJesse Vincent氏が 「Abusing Domain Specific Languages for Fun and Profit」 というセッションで発表していたり、最近では 宮川達彦さんのWeb::Scraperのスライド
"integrate with WWW::Mechanize and Test::WWW::Declare"
と書かれていたりで気に留めていた方も多いんじゃないでしょうか?しばらくSubversionのリポジトリでしか公開されてなかった様ですが、先月末ようやくCPANにアップされました。

Test::WWW::Declareは、Webアプリケーションのテストコードを宣言的に記述する為のモジュールです。「宣言的である」ということは、作業そのもの(HOW)を記述するのでは無く、性質や状態を定義することで「それは何なのか(WHAT)」という観点で対象を記述するようなイメージでしょうか。

このモジュールでは、Perlの持つ機能を駆使して英語に近い構文のDSLを定義することで、宣言的なコーディングを実現しています。内部的にはテスト用のモジュールとして実績のある Test::WWW::MechanizeとTest::More をラッピングする形で実装されています。

また、Railsの対抗馬として開発されていると話題になっているWebアプリケーションフレームワークJiftyと開発元が一緒ということもあって、Jiftyとの連携も念頭に開発されているようです。

続きを読む "Test::WWW::Declareで宣言的にWebアプリをテスト" »

Perlを何で書く?Eclipseで書く!はてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加

テキストエディタでのプログラミング

こんにちは、Perl担当の西山です。

唐突ですが、皆さんはPerlプログラムを開発する時は
どんなアプリケーションを使ってコーディングしていますか?
おそらくPerl使いの方々の多くは、
スクリプトなどで機能を拡張できる高機能なテキストエディタを駆使して
日々開発しているのではないでしょうか。
Unix系であればEmacsやVim、Windows環境なら秀丸やEmEditor、
MacだとmiやBBEditなどでしょうか?

かくいう私はWindows環境でVimで開発しています。
ファイル検索用のfuzzyfinderやモジュールをアウトライン表示するtaglistなどの拡張スクリプトを入れて快適に作業しています。

が、実際のところこれらのテキストエディタはインストールしただけの素の状態では
せいぜいシンタックスハイライトぐらいしか言語に即した機能は付いておらず、
通常の文字列編集の機能だけを使ってコーディングすることになる為、
非常に開発効率が悪いです。
そこで少しでもプログラミングが楽になる機能を追加する為に
拡張プラグインを探そうとしてもなかなかまとまった情報が見つからない。。

これからPerlを始めようとする人にとって、十分な機能が揃った開発環境が見つからないことが
意外に大きな障壁になってるんじゃないかと思います。

私はメインで使用するプログラミング言語をJavaからPerlに変えた人間なのですが、
JavaならEclipseをインストールするだけですべて揃うのに・・・と思ったものです。
そう、Perlにはイマドキの開発環境であるIDE(統合開発環境)が、少なくともデファクトと呼べるものが無いのです!
RubyがEclipseやNetBeans、MacOSXの開発環境であるXcodeなどに次々と取り込まれていくのに・・・
としばらく横目で眺めているような状況でしたが、
サードパーティながらEclipse上でPerl開発を可能とするプラグインが開発されていました。
それがEPICです。

続きを読む "Perlを何で書く?Eclipseで書く!" »

Catalyst+Jifty::DBIの組み合わせを試してみるはてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加

こんにちは、Perl担当の西山です。

PerlにはたくさんのDBアクセス用のモジュールが用意されていますが、
皆さんはどのDBアクセスを使用していますか?
最近ではDBIx::Class(通称DBIC)がデファクトと呼ばれていますね。
ある程度長くPerlを使っている人だとClass::DBI(通称CDBI)に手馴れていて
今でも使っているケースもあると思います。
あとはSix Apartの社内標準モジュールとして開発・公開されている
Data::ObjectDriverもありますね。

Jifty::DBIとは

数あるDBモジュールの中でも個人的に気になっているモジュールがありまして、 それがJifty::DBIです。 DSLを駆使しててかっこいい、独創的、奇抜、変態、などなどと賞賛されているWebアプリケーションフレームワーク「Jifty」と セットで開発されているDBアクセスモジュールです。 一月ほど前に開催されたShibuya.pmでもプレゼンが行われたので気になっている方も多いと思います。 公開されている資料で分かりやすく使い方がまとめられている通り、 DML(データ操作)の手続きの抽象化だけでなくDDL(データ定義)の手続きの抽象化までカバーされていて、 Perl内の競合であるDBICなどよりかはRuby(on Rails)のAction Recordに近い設計思想で Jiftyファミリーのモジュールの中では比較的使いやすいモジュールだと思います。 というわけで、Jiftyごと実際にサービスで使うのはちょっと自信が無かったので、 Jifty::DBIだけでもと思い、個人的に使い慣れているCatalystと組み合わせて使ってみました。

続きを読む "Catalyst+Jifty::DBIの組み合わせを試してみる" »

テンプレートの記述もPerlで - Template::Declareを使うはてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加

こんにちは、Perl担当の西山です。

これまでJifty::DBI、Template::WWW::DeclareとWebフレームワークJiftyの周辺モジュールについて書きましたが、今回はViewに関わる部分であるTemplate::Declareというモジュールを取り上げようと思います。

特徴

Template::Declare(以下TD)は、HTML::MASONやTemplate::Toolkitなどに並ぶテンプレートエンジンですが、他のものには無い特徴を持っています。
  1. すべてのテンプレートは100% Pure Perlで記述する
  2. 宣言的なシンタックス
  3. Mixinや継承などのオブジェクト指向の機能を利用可能(Perlなので)
  4. HTML/XUL/RDF/XMLなどの形式に対応(その他の形式も拡張可能)

簡単な例でPerlではデファクトのテンプレートエンジンであるTemplate::Toolkit(以下TT)と比較してみましょう。

配列データを元にHTMLでリストを出力するような場合、
TTでは以下のように書くと思います。

<ul>
[% FOREACH a IN array %]
    <li>[% a %]</li>
[% END %]
</ul>

TTに限らず、HTMLなどのデザインを主としてそれに対してロジックを組み込むようなタイプのテンプレートエンジンでは、記法の多少の違いはあれど大体上記のような書き方になるのではないでしょうか。

一方TDでは以下のようになります。

template list => sub {
    ul {
        for my $a (@array) {
            li { $a }
        }
    }
};

使い方は・・・と思いましたが、結構見たままですよね。
"list"という名前でHTMLのリスト構造をテンプレートとして定義していて、
その後は以下のようにshow関数を使って名前でテンプレートを呼び出すことができます。

show 'list'

HTMLのタグはすべて同名の関数として用意されていて、通常のPerlコードと同じように使えます。
※Perlにもともとtrという名前の演算子が用意されている関係でtr/tdタグのみそれぞれrow/cellという別の名称の関数にマッピングされています。

TTなど他のテンプレートエンジンはロジック部分にそれぞれ(しかも結構独特な)文法を用意していて、メインの言語とは別に覚えないといけないですが、
TDならば変数への値の格納やループ処理はそのままPerlの文法で書けます。
外部モジュールを使う場合もいちいちテンプレート用のプラグインを作る必要も無いです。


続きを読む "テンプレートの記述もPerlで - Template::Declareを使う" »

JiftyでWebアプリをつくる - Windowsにインストールはてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加

こんにちは、Perl担当の西山です。

今回から数回に分けてPerlのWebアプリケーションフレームワークであるJiftyを取り上げてみたいと思います。

Jiftyの特徴

公式サイトにてJiftyの基本理念が表明されていますが、その中でも特にRuby on Railsも売りとしている「DRY(Don't Repeat Yourself)」「Full-stack」についてCatalystよりも強く意識しているのが感じられます。 Jiftyはその特徴をPerl流に更にエクストリームに実践することを開発思想としているようです。

というわけでこちらの取り上げ方もRailsをちょっと意識してみて、
Windows環境でイチからセットアップするところから始めてみようと思います。

※本エントリーではOSはWindowsXP、ActivePerlのバージョンは5.8系列を使用します。

1. ActivePerlをインストール

まずはWindows上でPerlスクリプトを実行できるようにする為、実行環境をインストールします。 ここではWindows用のインストーラが用意されていてお手軽に利用できるActivePerlという実行環境をインストールします。 ActivePerlはActiveState社が配布していて、スタンダード版は無償で入手することができます。 ダウンロードページ image012_thumb.jpg

5.10系列もリリースされていますが、本エントリーでは5.8系列を使用する為、現時点の最新版である5.8.8.822をインストールしてください。
インストーラ実行時の選択肢は基本的にデフォルト設定で問題無いと思います。

Jiftyをインストール

ActivePerl付属のPerl Package ManagerというGUIのツールを使ってJiftyをインストールします。 デフォルト設定でActivePerlをインストールしている場合、 スタートメニュー > すべてのプログラム > ActivePerl 5.8.8 Build 822 > Perl Package Manager を選択すると、以下の画像のようにアプリケーションが起動します。

image002_thumb.jpg

リポジトリを追加
ActivePerl標準のパッケージリポジトリにはJiftyは登録されていない為、別途参照先のリポジトリを登録します。 ppm.tcool.orgというサイトで、 Jiftyを始めとする標準でサポートされていないモジュールがWindows版ActivePerl用のパッケージとして提供されていますのでそちらを利用します。 Package Managerのツールバーから Edit > Preference > Repositories と選択すると、 リポジトリの追加画面が表示されるので、以下のURLをPackage Managerに登録します。
追加するURL:
http://ppm.tcool.org/archives/

image004_thumb.jpg

インストールを実行
次に、ツールバーのView > All Packages にチェックを入れてリポジトリに登録されているすべてのパッケージを一覧の表示対象とします。 そして、検索フォームに「Jifty」と入力すると以下の画像のように該当のパッケージが絞り込まれて表示されます。

image008_thumb.jpg

一覧上のJiftyを右クリックで選択してインストール対象として選択状態にし、ツールバーの File > Run Marked Actions を選択すると
確認ダイアログが表示されインストールが始まります。


image010.jpg

マシンスペックにもよるかもしれませんが、追加で必要となるパッケージが222個あると言われる通り
インストールには結構時間がかかりますが、焦らず待ちましょう。

※こちらの環境ではインストール時に

ERROR: File conflict for 'C:/Perl/html/site/lib/Test/Builder/Tester/Color.html'.
    The package Test-Simple has already installed a file that package Test-Builder-Tester
    wants to install.

というエラーが表示されて途中で終了しました。
Test-Simpleパッケージを上記要領で先にインストールしてから
再度Jiftyをインストールするとうまく入るようです。

続きを読む "JiftyでWebアプリをつくる - Windowsにインストール" »

JiftyでWebアプリをつくる - ログイン機能を作るはてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加


※2008/02/09 
Jifty::Plugin::Authentication::Passwordについて追記しました。

こんにちは、Perl担当の西山です。

前回に引き続き、DRY(Don't Repeat Yourself)をとことん追求する
WebフレームワークJiftyの話題です。
今回からJiftyを使ったWebアプリケーションの作り方について書いていこうと思います。
手元の環境にPerlの実行環境やJiftyをインストールしていない方は
前回のエントリーを参照してください。

ログイン機能を付ける

さてサンプルアプリのお題は・・・と考えてみましたが、
Jifty自体がRailsを少なからず意識していることもありますし、
本ガイドブログのRubyのエントリーに勝手に(汗;)連動して
パスワード認証によるログイン機能をまずは実装してみようと思います。
Ruby on Railsを使った作り方はこちら を参照して比較してみるのも面白いのでは?

なお、ここでは説明の簡単の為にDBはMySQLではなく標準添付のSQLiteを使用します。

続きを読む "JiftyでWebアプリをつくる - ログイン機能を作る" »

JiftyでWebアプリをつくる - JiftyからMVCを考えるはてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加

お久しぶりです、Perl担当の西山です。

前回に続きDRY(Don't Repeat Yourself)を追求するWebフレームワークJiftyを取り上げます。
手元の環境にPerlの実行環境やJiftyをインストールされていない方はこれまでの記事を参照してください。
今回はJiftyと一緒に配布されている"ShrinkURL"というサンプルアプリケーションを題材に、
Jiftyに従ってアプリケーションを開発する場合のモジュール構造や考え方を見ていきたいと思います。

これまでの記事:
  1. JiftyでWebアプリをつくる - Windowsにインストール
  2. JiftyでWebアプリをつくる - ログイン機能を作る

Jiftyの考え方

一般的にWebアプリケーションのフレームワークなどで使用されるアプリケーション構造はMVC(Model-View-Controller)と呼ばれる形に機能は分類されますが、 Jiftyでは本家サイトのBasic concepts of Jiftyで説明されているように「Dispatcher」「Action] 「Template」「Model」という4つの要素でアプリケーションを構成しています。 それぞれの要素は主に以下のような役割で開発するように設計されています。
  • Dispatcher: URLに対してActionやTemplateへのマッピングを定義。
  • Action: 画面内での操作やリクエストなどをトリガーに発生するビジネスロジックを定義。
  • Template: 表示系のデータ取得処理や、UIのレイアウト情報を定義。
  • Model: 操作対象となるデータモデルの構造や操作を定義。

通常のMVCではControllerでまとめて扱われることの多いDispatcherとActionの役割を、Jiftyではフレームワークレベルで明確に分けています。
また、表示系の処理もViewが使用するhtmlテンプレートやControllerに分散しやすいですが、JiftyではTemplateのPerlモジュール内で一括管理するように設計されているのが特徴だと思います。

サンプルアプリShrinkURLを見る

新しいモジュールやフレームワークの使い方を理解するには サンプルをてっとり早く動かしてみていろいろいじってみるのが早いと思います。 サンプルアプリケーションであるShrinkURLを見てみましょう。
セットアップ
先ほどサンプルはJiftyと一緒に配布されていると書きましたが、 Windows版のPPMには含まれていないようです。 TortoiseSVNなどのSubversionクライアントをインストールしている方は下記レポジトリから、 チェックアウトしてください。
http://svn.jifty.org/svn/jifty.org/jifty/trunk/examples/ShrinkURL

ブラウザ経由でもCPANのJiftyのページからダウンロードできます。
解凍後のフォルダのexamples\ShrinkURLが今回使用するアプリケーションフォルダです。
適当な作業フォルダにShrinkURLをコピーしてください。

また、ShrinkURLが依存するモジュールとしてNumber::RecordLocatorが必要になります。
別途Package Managerを使ってインストールしてください。

最後に、以下のようにコマンドプロンプトから ShrinkURLフォルダ配下でコマンドを実行するとセットアップ完了です。
C:\tmp\ShrinkURL>perl bin\jifty schema --setup
動作確認
まずは素の状態の動作を見てみます。 以下のようにjiftyコマンドにserverオプションを指定して実行するとアプリケーションサーバが起動し、 デフォルトではhttp://localhost:8888/のURLで アクセスできるようになります。
C:\tmp\ShrinkURL>perl bin\jifty server

ShrinkURLは、入力されたURLにユニークなキーを割り当て、短縮したURLでサイトにアクセスできるようにするアプリケーションです。
登録したURLはDBに登録され、短縮したURLはいつでも利用することができます。


1.URLを入力してShrink it!ボタンをクリック

sc0000.png

2.短縮したURLが生成される

sc0001.png

生成されたURLにブラウザからアクセスすると、元の入力したURLへリダイレクトされます。

続きを読む "JiftyでWebアプリをつくる - JiftyからMVCを考える" »