2008.09.22
サーバの思い出、Zopeの思い出
私が「サーバ」という概念を初めて理解したのは、IT業界に入って1年くらい経った、2000年のはじめ頃だ。

その頃、PythonZopeをほぼ同時に知った。Zopeをインストールし、ブラウザに「localhost:8080」と入れてデフォルトのトップページが出てきたとき、「これがサーバなんだ」というのを初めて実感した。

それまでも、1996年からWebサイトをやっていたので、HTMLをプロバイダのサーバにFTPでアップロードしたりはしていた。しかし、ほとんど意味もわからずやっていただけで、ましてや自分でApacheなどのWebサーバを入れたりしたこともなかったので、「サーバ」というものをちゃんと理解してはいなかった。なんでも、自分でやってみるまでは実感がわかないものだ。

私にとっては、その2000年のはじめに入れたZopeが最初のWebサーバであり、最初の「サーバ」でもあった。Webサーバを自分でインストールして、その応答画面がブラウザに出てくるということ、それが驚きだったし、本当にうれしかった。

特にZopeの場合、ブラウザでそのままWeb開発ができるので、Webサーバを入れる面白さから、Web開発の面白さへそのまま移行できて、完全にハマった(そして私は「Zopeジャンキー」になり、Zopeが仕事になって、それがこのブログ名の由来にもなった)。

その後は、Apacheを使ったり、DNSサーバやメールサーバなど、Webサーバ以外のサーバも使うようになった。あたらしい技術はいつも面白くて、かなり失敗したりもしつつ、楽しくいろいろ学んできたが、いまだにZopeを超える衝撃というのはない。私はほんとうに、Zopeに人生を変えられたのだと思う。

Zopeは1998年にオープンソースとして公開されたので、今年でちょうど10年になる。私が見てきたこの8年間でも、Zopeはかなり変わってきていて、特にこの2~3年、Zope 3に重心が移ってきてからの変化は大きい。

それはZope自身が変わったという以上に、ZopeやPython、Web技術をとりまく状況とともに変化してきた過程だった。現在のZopeでは、「Webサーバ」の部分はまったく本質的ではなくなり、ブラウザ上で開発できるという側面も捨て去って、普通にファイルシステム上で開発する、Pythonのアプリケーション・フレームワークになっている。

もともとのZopeは、シンプルなCMS(コンテンツ管理システム)のアプリケーションという側面も持っていたが、Plone(Zopeベースの汎用CMS)が成長し、その役割を担うようになってきたので、Zopeはフレームワークの役割に集中しやすくなった面もある。また、Pythonのパッケージ技術「Python Eggs」やリポジトリ「PyPI」、Webサーバ技術「WSGI」、デプロイ技術「zc.buildout」といった環境が整備されてきて、Zopeのモノリシック(一枚岩)な面も解体が進んでおり、他のPythonフレームワークやライブラリとの境目がなくなってきている。

このようにZopeは着実に進化しているだけでなく、最近は進化のスピードがますます速くなってきている。これは、DjangoTurboGearsPylonsといった「後輩」のPythonフレームワークが登場・成長しており、「長老」たるZopeがこれに刺激されているというのもあるし、Googleをはじめ、Pythonを使う企業・ユーザが増えてきて、Pythonの「生態系」自体が拡大・成長している、というのもあるだろう。

いまのZopeは、私が2000年に初めてインストールしたときのZopeとはかなり違うものになってきている。しかしだからこそ、私はいまでもワクワクしながらZopeを使えているのだと思う。いまでもワクワクできているということ自体、驚きだ。

いまのZopeは、自前でWebサーバを持っていたり、ブラウザ上で開発できるといった、かつてはZopeのセールスポイントだったものを「間違い」だと認め、それを捨てた。そして私も、その進化の方向は正しいと思う。しかし2000年の私は、Zopeが自前でWebサーバを持っており、ブラウザ上で開発できたからこそ、Zopeに夢中になったのだ。

いまから見れば、2000年のZopeは「間違い」かもしれないが、当時はそれで「正しかった」んだと思う。歴史に「もしも(if)」はないが、2000年のZopeがそのようなものだったからこそ、Zopeは普及し、たくさんの人が夢中になり、Pythonの「生態系」も発展したはずだ。ZopeのおかげでPloneも生まれたし、いまやPythonの世界に欠かせない技術となった「Python Eggs」や「WSGI」の作者、「PJE」ことPhillip J. EbyもかつてはZopeユーザで、Zopeからインスピレーションを得たと語っている。

Where Zope Leads, Python Follows
http://dirtsimple.org/2007/01/where-zope-leads-python-follows.html
日本語訳:Zopeの導くところへ、Pythonはついて行く
http://enbug.tdiary.net/20080131.html#p01

<もしPython用に何か新規のものや最新技術を開発しているんなら、「Zopeにはすでにこんなものか、似たようなものがあるだろうか。もしないとしたら、Zopeだとこれはどうやって使うだろう」と問いかけると、得るものが大きい。これこそ、私がPython Eggsやsetuptools、WSGI (Python Web Server Gateway Interface) の仕様書を開発していたときに発した質問だったんだ>。

PJEはこのテキストで、<Zopeの導くところへ、Pythonはついて行く>、<Zopeを学ばない者は、再発明することを運命づけられる>と書いている。Zopeはいわば、スクリプト言語によるフレームワークの「長老」であって、実際に世界じゅうのビジネス現場に投入されてきたので、Web開発のさまざまな課題を「先取り」して解決してきたのだ。

Zopeはいま、もっとも話題になっているWeb技術とは言えないが、これだけ長く生き残り、多くの現場で使われて実績も積み、かつ進化しているというのは、大したものだと思う。私は8年間もZopeを使ってきたうえに、飽きるどころかますます面白くなってきている。2000年にPythonとZopeに出会えたことは、ほんとうに幸運だったんだとあらためて感じる。


関連:
bud.ca - I want a pony: Django Cheeseshop
http://www.bud.ca/blog/pony
ベテランZopeユーザ、Kevin TeagueがDjangoのMLにポストした記事。PyPIやEggs、easy_install、zc.buildoutなど、最近のZope世界でよく使われるようになってきたPython技術のまとめ。Zope固有の技術はほとんどない。