電動ひやむぎ

2012-12-07

Weblocksというフレームワーク

このエントリーをはてなブックマークに追加

(このエントリは Common Lisp Libraries Advent Calendar 2012 7日目の記事です。)

Weblocks

本日ご紹介するライブラリは Weblocks。サイトは Weblocks-site

継続ベースのWebアプリケーションフレームワークで、Hunchentoot上に作られています。Viewの生成からデータベースアクセス周りまで含むオールインワンなフレームワークになっています。

最初はどういう動きをしているのか分かりにくく、動きを追うことが難しいかもしれません。慣れれば楽かもしれません(そんなに使ってないので断言できない)。

対応する処理系

  • SBCL
  • CCL

他の処理系でも動くかもしれませんが、本家サイトのUsing Quicklispの 1で「Install SBCL or CCL.」とあるので、上記のどちらかを使うのが安全な気がします。Windowsで SBCLを利用する場合は 本家のバイナリではなく、Windows用のマルチスレッド対応版を使用した方が良いかと思います。

簡単なサンプルコード

Weblocks は QuickLisp に登録されているので、(ql:quickload :weblocks) でインストール可能です。また、wop:make-appという Weblocksアプリケーションの雛形を生成する便利関数も用意されているので、アプリケーションを作るときの毎回書くような部分が自動で出来ていい。

CL-USER> (ql:quickload :weblocks)  
CL-USER> (wop:make-app 'hiyamugi)  
CL-USER> (hiyamugi:start-hiyamugi :port 8080) 

localhost:8080/にアクセスすると 画面には "Happy Hacking!" と表示されるはず。これだけではアレなので、簡単なサンプルアプリケーションを用意してみました。ソースは こちら -> https://github.com/Unspeakable/msg.hiyamugi.net。Quicklisp の local-projects ディレクトリ等に持ってきて試すことが出来ます。

$ git clone https://github.com/Unspeakable/msg.hiyamugi.net  
$ sbcl  
CL-USER> (ql:quickload :msg.hiyamugi.net)  
CL-USER> (msg.hiyamugi.net:start-msg.hiyamugi.net :port 8080) 

localhost:8080/にアクセスすると 適当にメッセージを登録したり、変更したり、削除したり出来ると思います。

メリット
メンテナンスされている

一時期は Hunchentootのバージョンアップ時にメンテナ不在で QuickLispから外されたことのある Weblocksですが、そんなのは過去の話です!今は MLも比較的活発、「Weblocksでこんなサイト作ったよ!」みたいなメールも時々飛んでいます。何か問題があったときには、MLで質問したら誰か答えてくれるかもしれません(ただし英語)。安心!

Common Lispの Webアプリケーションフレームワークは、古めのものがメンテナンスされていなかったりします。Weblocksには、これからも頑張って欲しいです。

Widgetを組み合わせていけば画面が作れる

Weblocksでは画面上の構成部品を Widgetという単位で纏めて再利用が効くようにしているので、少ないコードである程度動くものが作れますし、HTMLをほぼ書かずに画面を作ることも出来ます。ささっとプロトタイプを作れるので、作るものが漠然としている状態でも コネコネしているうちにイメージを固める、なんてこともやりやすいと思います。

今回ご用意したサンプルアプリケーションでは、大したコードを書いていません。HTMLやJavaScriptは1行も書かずに、このくらいの内容が作れてしまうんです!!!!!!!

データの取得や保存も楽々

Weblocksでは イロイロな オブジェクト永続化方法が選べるようになっています。今回、僕が作ったサンプルアプリは cl-prevalenceを利用しています。他にも ElephantCLSQLPostModern などから選べます。今回くらい簡単な内容だと、途中で永続化ライブラリを変更することになっても 設定ファイル conf/stores.lisp の変更だけで対応出来たような気がします。

デメリット
取っ付きにくい

現状、日本でWeblocksをバリバリ使っている人を私は知りません。日本語の情報自体が非常に少なく、また「Examplesを動かしてみた」レベルを超える情報は皆無に近いです。MVCで言うところの全てが抽象化されているので、抽象構造自体の学習コストは比較的高くなっていると感じます。

デザインを入れにくいかも...

私はWebデザインの経験が少ないもので、本職のデザイナーさんがどのようにデザインするのか分からないのです。なので見当はずれかもしれませんが、デザインを入れにくいのではないかなーと思います。

メリット2で挙げた Widgetによる画面の生成は「Widgetが吐き出す HTMLによって画面が作られる」のですが、デザイナーさんがデザインをしやすいHTMLになっているのか分かりません。デザイナさんに「このHTMLを綺麗に見えるよう、CSSを書いてください」と言って、はーいうふふー!おっけー!と2つ返事でCSSを書いてくれるデザイナさんがいるなら問題無さそうです。

実際、どうなの?

非常にクセの強いフレームワークだと思いますが、非常に面白いモノだと思っています。まだ「こいつでガッツリとアプリケーション作って納品するぞーp(^o^)q」みたいな気持ちは無いですが。今回のエントリを書いたことを切っ掛けに、以前書いていた WeblocksのWidget一覧を作成再開しようと考えています。ちなみに以前書いていたものを、はてなダイアリーから持ってこようとしていたのですが、全然上手く行かなかった…