2013.01.05
PythonのWebフレームワーク「CherryPy」 入門用にも適した、枯れた名品
昨日につづいて、Python入門に適したWebフレームワークをもうひとつ紹介したい。「CherryPy」である。

CherryPy - A Minimalist Python Web Framework
http://cherrypy.org/

CherryPyは、PythonのWebフレームワークとしてはベテランである。ベテランなので、もうあまり話題にものぼらない感じではあるが、それゆえに枯れていて、安定している。

CherryPyは「名品」と言ってもいい、すぐれたWebフレームワークだと思うが、Pythonの入門用にも適している。昨日のBottleのように1ファイルではないが、依存ライブラリがないので、Bottleと同様、カレントディレクトリに置くだけで動くのだ。よってBottle同様、「インストール」しなくてもよく、「環境構築」がいらない。

昨日のBottleは、URLのパターンと、それを処理するコントローラ(ハンドラ)を対応づけていく「ルーティング」方式が使われていた。これは、多くのWebフレームワークで使われているメジャーな方式である。いっぽうCherryPyは、オブジェクトをツリー状に構成して、それを辿っていく「トラバース」方式が使われている。この方式は、Webフレームワークでは少数派のようだが、ウェブサイトの構造がそのままオブジェクトのツリーになるので、一般人の視点から見ると、むしろわかりやすいのではないかと思う。

CherryPyによるWebアプリは、例えばこんな感じである。

import cherrypy

class Folder(object):
    def index(self):
        return 'my folder'
    index.exposed = True

class Site(object):
    def index(self):
        return 'my site'
    index.exposed = True

    foo = Folder()

    def blog(self, year, month, day):
        return 'blog %s-%s-%s' % (year, month, day)
    blog.exposed = True

cherrypy.quickstart(Site())

チュートリアルにあるサンプルを若干変形したもの)

これを動かす手順は、昨日とほぼ同様である。適当な作業用ディレクトリに、上のコードを「hello.py」として置く。CherryPy本体は、最新版のダウンロードページにある「CherryPy-3.2.2.tar.gz」を落として解凍すると、「cherrypy」というディレクトリが入っているので、それをまるごと、作業用ディレクトリに置けばいい。

昨日同様、「python hello.py」でWebサーバが8080番ポートで起動するので、ブラウザで「http://localhost:8080/」にアクセスして、「my site」と出てくればOK。同様に、「http://localhost:8080/foo/」にアクセスすると「my folder」と表示され、「http://localhost:8080/blog/2013/01/05」にアクセスすると「blog 2013-01-05」と表示されるはずだ。

このサンプルコードを土台にして、例えばblogメソッドの内容を、ファイルやデータベースからデータを探すように手を加えていけば、実用的なものに近づいていくだろう。

CherryPyは、「Python的で、オブジェクト指向のWebフレームワーク(pythonic, object-oriented web framework)」と自称している。その理由は、上のコードのように、自分がゼロから作ったクラスによって、オブジェクトツリーを自由に構成できるからだ。indexメソッドなど、若干のルールを守るだけでよく、フレームワークから基本クラスを押しつけられることもない。

CherryPyの学習を進めたい人は、まずは公式ドキュメントの「Tutorial and Concepts」を読んでみてほしい。


関連:
ウィキペディア - CherryPy
http://ja.wikipedia.org/wiki/CherryPy

関連エントリ:
Pythonを始めるなら、1ファイルの軽量Webフレームワーク「Bottle」がおすすめ
http://mojix.org/2013/01/04/python-bottle