BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Clojure 用 Web フレームワークのまとめ - Enlive と Compojure

Clojure 用 Web フレームワークのまとめ - Enlive と Compojure

原文(投稿日:2011/10/03)へのリンク

Clojure は Lisp 言語ファミリの比較的新しいメンバであり,Java プラットフォームで動作する。2007 年に発表されたこの言語は,多くの関心を集めてきた。

大多数の JVM 言語とは違って Clojure はオブジェクト指向言語ではないが,OO に求められるものを提供している。例えば,

  • カプセル化 (ネームスペースやプライベート定義,クロージャを通じて)
  • ポリモーフィズム (マルチメソッド)
  • 継承の代用としての,関数の再利用

ここ数年の間に,Clojure でビルドされた Web フレームワークやライブラリが数多く現れている。例えば,

InfoQ では Compojurを開発した James Reeves 氏,Enlive を開発したChristophe Grand 氏に簡単な Q&A を行い,Clojure に関連するプロジェクトの内容と,そこでの経験について話を聞いた。

InfoQ: それぞれ自己紹介と,Clojure を始めた理由について,簡単に話していただけますか?

Christophe (Enlive): 私は独立コンサルタントで,フランスに住んでいます。関数プログラミングには,初期の頃から本当にいい思いをさせてもらっています。Clojure に出会う前に私は,ユーザの法務部門で利用するための,リアルタイムコラボレーション機能を備えたテキストエディタを数ヶ月に渡って開発していました。このソフトウェアは Rhino で記述されていて,防衛的プログラミング (defensive programming) の練習になりました。一仕事を終えた私は,もっとよい言語を探すことにしました。ちょっと変わったものを表すフランス語表現に "5本足の羊 (five-legged sheep)" というものがありますが,5本足,つまり "動的"型付け,関数型プログラミング,メタプログラミング,強い処理並列性,JVM でホストされること,の5つを求めたのです。しかし,その頃リリースから4カ月ほど経っていた Clojure を偶然見つけたので,羊の足 (要求事項) のうち1本は諦めることにしました。言語と実装の堅牢性や健全性から,これを私のデフォルト言語にすることにしたのです。

James (Compojure): 私は英国の開発者で,現在はロンドンに住んでいます。私の Clojure に対する関心は数年前,Lisp を学ぼうとしていた時に始まります。ちょうどその頃 Clojure がリリースされたのです。

Clojure は大変シンプルな言語で,コアライブラリの習得も容易です。その前年に Haskell のプログラムを経験していた私は,すでに不変性と関数型プログラムのファンになっていました。さらに単純な構文と小さくてもパワフルな標準ライブラリの大ファンでもあります。それで Clojure がすぐに気に入りました。

InfoQ: 毎日の作業でもっとも便利な Clojure の特徴をひとつあげるとすれば,何になりますか?

Christophe (Enlive): 状態管理が妥当であること – デフォルトでの不変性と効率的な永続的なデータ構造ですね。関数型のスタイルを選択肢として持っている他の言語と Clojure が違うのは,他の書き方を決して選択させない部分があることです。ですから簡単だという理由で,いろいろな解決策に惑わされることがありません。作成されたコードはおおよそ簡潔で理解しやすく,デバッグも容易です。

James (Compojure): 難しい質問ですね,Clojure の機能は,どちらかといえば非常に限定された問題を解決するように設計されていますから。例えばプロトコルについては,ポリモーフィズムは可能であるものの,継承やカプセル化には対応していません。ですから,ひとつの機能を取り上げて,それがもっとも有効だというのは難しいのです。Clojure を使う上での楽しさは,これら個々のツールすべての組み合わせ,協調から来ているのですから。回答としては少しずるいですが,このシンプルさが強調されている点が一番,ということにしたいと思います。Clojure では,問題を解決するのに最適なツールを選択することができるのですが,他の多くの言語では,何らかフレームワークを使って作業する必要があって,最適解を得ることが必ずしもできないのです。

InfoQ: おふたりのプロジェクトがどのようなものか,開発者にどのように使われるのかを説明してください。

Christophe (Enlive): Enlive という HTML 操作ライブラリを開発しています。 おもな用途は2つ,webスクリプティングとテンプレートです。Enlive のテンプレートはプレーンな HTML ファイルをベースとしていて,特別なマークアップやルールを必要としないために,デザイナが直接記述することも可能です。この HTML から実際のアウトプットを生成する方法 (繰り返しやデータ設定をする場所) を Clojure を使用して記述します。また CSS3 を強く意識したセレクタが, このような変換を行う場所を識別するのに使用されます。これによって設計のラウンドトリップがとても簡単になります。

データを取得する時も同じように,対象とするデータを示すためにセレクタが使用されます。技術的に言えば,Enlive の目標は XSLT と同じですが,XML に代えて Clojure でコードを書くことと,XPath の代わりに CSS 風のセレクタを使用することが違います。

James (Compojure): Compojure は RIng をベースとした小さな Web フレームワークです。開発者が web アプリケーションを定義するために利用可能な,簡単なルーティング DSL を提供します。Compojure は他のライブラリと併用して利用されます。例えばテンプレートに対する Hiccup や Enlive,データベースアクセスの ClojureQL といった具合です。

InfoQ: Clojure アプリの開発にはどんなツールを使用していますか? これは便利,というものがなにかあるでしょうか?

Christophe (Enlive):  CCW (Counterclockwise) Eclipse プラグインを使用しています。開発の進展が早いですし,主な開発者たちが強くコミットしている点がよいと思います。

James (Compojure): 私は Emacs と SLIME を開発に,Leiningen をビルドとデプロイに使っています。慣れてしまえば,Emacs の paredit モードが S 式をすばやく移動するのにとても便利なのです。その他に SLIME セッションをいつも動作させておいて,ソースコードを頻繁に再読み込みするようにしています。いつも実行中の環境で開発しているからです。

InfoQ: プロジェクトの今後のロードマップについて教えてください。

Christophe (Enlive): clojure contrib への移行と,それからキャッシュやエンコード,エスケープに関する動作をもっと柔軟なものにしようと思っています。

James (Compojure): Compojure については,少なくとも当面は多くの機能追加を行う予定はありません。

私はどちらかといえば,何でもこなそうとする大規模フレームワークよりも,特定のタスクを行う小さなライブラリと関数の方が好みなのです。分離したライブラリにする方が適当と思えない範囲で Compojure に追加できる余地は,もうそれほど大きくはありません。

例えば,私が書いてみようと思っているプロジェクトアイデアのひとつは,Ruby on Rails にある respond_to メソッドと同じように,HTTP レスポンスを別形式で参照可能にするものです。これを Compojure の一部として含めることも可能ですが,別のライブラリとして分離できない理由はありませんし,特定のフレームワークに限定する必要もありません。

Dionysios G. Synodinos 氏は Web エンジニア兼フリーのコンサルタントであり,Web 技術を専門としている。

この記事に星をつける

おすすめ度
スタイル

BT