Clack

Revenge of Lisp in Web

Chapter 1: イントロダクション

English | 日本語

ClackはCommon LispのためのWebアプリケーション環境です。PythonのWSGIやRubyのRack、PerlのPlackに影響を受けています。ClackはHTTPを抽象化して単純なAPIにすることで、Webアプリケーションをポータブルで再利用可能なものにします。

Web開発に慣れ親しんだ人ならば、なぜこれらがそれほど重要なのか知っているでしょう。なぜなら──Webアプリケーションは永遠のベータ版だからです。

システムの肥大化

これはつまり、Webアプリケーションは日々改善されていかなければならないことを意味します。改善の過程では仕様変更によって、設計時には想像もしなかった機能が追加されることも稀ではありません。Webアプリケーションはどんどん肥大化します。

そんなとき、システムを下から上まで巨大な塊のように作ってしまうと、モジュール単位での変更がやりづらくなってしまいます。そのため各コンポーネントは疎結合なものでなければいけません。

技術の入れ替わり

Webアプリケーションが改善を繰り返して長く利用されることで、もう一つ問題があります。──Web業界は流れが早いことです。使っている技術は数年でほとんど入れ替わってしまいます。

これはいくら気をつけてプログラムを書いていても避けられないことです。アプリケーションは日に日に古くなっていきます。使っているWebサーバは数年後には脆弱性を多く抱え、保守しがたいものになっているかもしれません。Webフレームワークは将来はもうメンテナンスされてないかもしれません。使っているライブラリについても同様です。そんなとき、それらに深く依存したシステムであれば、時代に沿ったものに変えていくのは難しくなってしまいます。

Clackが解決すること

Clackはそのような問題を解決するために開発されました。ClackはWebアプリケーションの中で、まるで「糊」のように働きます。正直に言えば、ClackはWebフレームワークではなく、モジュール化されたいくつものコンポーネントの集まりです。各コンポーネントは疎結合になっており、依存関係が明確なため、一部分だけ書き換えることが簡単です。

また、ClackはHTTPとWebサーバを抽象化するため、バックエンドが何であるかを意識する必要がありません。作ったWebアプリケーションはバックエンドに依存しないため、ほんの少し書き換えるだけで同じコードを違うWebサーバで走らせることができます。

この章ではClackのすべてを語ることはできませんが、懐疑的な人のために我々が信頼に足るかどうかを判断できる情報をいくつか残しておきましょう。

開発の安定

Clackのコアの機能はすべて、2011年6月の最初の公式リリース時に実装されていました。それ以来重大なバグは見つかっていませんし、後方互換性のない変更もありません。

継続的なリリース

Clackは毎月リリースされています。その中にはさまざまな種類の変更がありますが──僕が強調したいのは──継続的な改善が為されてきた、ということです。その過程でClackの機能は強化されてきましたし、またたとえ今後に重大なバグが見つかったとしても次の月には修正されていることが期待できます。

ドキュメントの充実

Clackのほとんどの関数、変数、マクロにはドキュメント文字列がついています。パッケージも。なぜなら我々は、それ自体が自明の場合でない限り、ソースコードのすべての要素にはドキュメント文字列が必要だと考えるからです。

また、そのドキュメント文字列はHTMLとして公開されています

自動テストの整備

今まで見つかったバグがとても少ない理由は、たくさんの単体テストによります。Clackには現在173個のテストがあり、テストカバレッジは70%以上を保っています(さらに改善したいと思っているけれど)。

もちろん、すべてのリリースはこれらのテストを通っています。1つの処理系だけでなく、Clozure CLとSBCL、CLISPの3つの処理系で。現在の状況はhttp://ci.clacklisp.org/で見ることができます。