Clack

Revenge of Lisp in Web

Chapter 6: Clack.App.Directoryを使う

English | 日本語

Clack.App.Directory<component>を使ったClackアプリケーションの実例です。このアプリケーションはディレクトリをHTMLページとして返します。

以下のように使います。

;; /Users/nitro_idiot/ を http://localhost:5000/ に
(clack:clackup
 (make-instance 'clack.app.directory:<clack-app-directory>
    :root #p"/Users/nitro_idiot/")
 :port 5000)

すると"/Users/nitro_idiot/"の中のファイルが http://localhost:5000/ で見られるようになります。

なぜこのアプリケーションは、ただの関数ではなく<component>を使っているかわかるでしょうか? インスタンスを作るときに:rootを引数に取り、その値によって挙動が変わります。これは、アプリケーションが関数として実装されていると難しいです。

クロージャを返す関数でも同じことができることは複雑になります。また、クラスを使う利点がもう一つあります。──継承です。正直に言うと、<clack-app-directory><component>を直接継承していません。<clack-app-file>を継承しています。これはディレクトリではなくファイルだけを配信するアプリケーションです。<clack-app-directory>がするのは、ただディレクトリ内のファイルを一覧できるようにするだけです。

興味がある人はcore/app/directory.lispとfile.lispを見るとコンポーネントがどのように使われているかがわかると思います。